California Prevailing Wage Project Cost Calculator

ANALife Services AuthorityNational Calculator Authority›California Prevailing Wage Project Cost Calculator

.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }

California Prevailing Wage Project Cost Calculator

Estimate total labor costs for California public works projects subject to prevailing wage laws (Labor Code §1720 et seq.). Enter worker details, hours, and wage rates to calculate gross wages, fringe benefits, overtime premiums, and total employer cost.

Number of Workers

Regular Hours per Worker (per week)

Overtime Hours per Worker (per week, >8 hrs/day or >40 hrs/week)

Double-Time Hours per Worker (per week, >12 hrs/day or 7th day)

Project Duration (weeks)

Prevailing Base Wage Rate ($/hr)

Fringe Benefit Rate ($/hr, from DIR wage determination)

Apprentice Workers (% of workforce, 0–100)

Apprentice Base Wage Rate ($/hr, typically 60–85% of journeyman)

Employer Payroll Tax Rate (%, e.g. FICA 7.65 + FUTA/SUTA ~3)

Calculate

function calCalculate() { // --- Gather inputs --- var workers = parseFloat(document.getElementById('cal-workers').value); var regHrs = parseFloat(document.getElementById('cal-regular-hours').value); var otHrs = parseFloat(document.getElementById('cal-overtime-hours').value); var dtHrs = parseFloat(document.getElementById('cal-double-hours').value); var weeks = parseFloat(document.getElementById('cal-weeks').value); var baseWage = parseFloat(document.getElementById('cal-base-wage').value); var fringe = parseFloat(document.getElementById('cal-fringe').value); var apprenticePct = parseFloat(document.getElementById('cal-apprentice-pct').value); var apprenticeWage = parseFloat(document.getElementById('cal-apprentice-wage').value); var payrollTaxRate = parseFloat(document.getElementById('cal-payroll-tax').value);

var resultDiv = document.getElementById('cal-result');

// --- Validation --- var errors = []; if (isNaN(workers) || workers 40) errors.push("Regular hours must be between 0 and 40."); if (isNaN(otHrs) || otHrs 168) errors.push("Overtime hours must be between 0 and 168."); if (isNaN(dtHrs) || dtHrs 168) errors.push("Double-time hours must be between 0 and 168."); if (isNaN(weeks) || weeks 100) errors.push("Apprentice percentage must be between 0 and 100."); if (isNaN(apprenticeWage) || apprenticeWage 50) errors.push("Payroll tax rate must be between 0 and 50."); if ((regHrs + otHrs + dtHrs) === 0) errors.push("Total hours per worker per week cannot be zero.");

if (errors.length > 0) { resultDiv.style.display = 'block'; resultDiv.innerHTML = 'Please fix the following:' + errors.map(function(e){ return ''; }).join('') + ''; return; }

// --- Core Calculations ---

// Worker split var apprenticeRatio = apprenticePct / 100; var journeymanRatio = 1 - apprenticeRatio; var journeymanWorkers = workers * journeymanRatio; var apprenticeWorkers = workers * apprenticeRatio;

// Total hours per worker per week (all categories) var totalHrsPerWorkerPerWeek = regHrs + otHrs + dtHrs;

// California overtime multipliers (Labor Code §510): // Regular time = 1.0x base wage // Overtime = 1.5x base wage // Double time = 2.0x base wage // Fringe benefits are paid on ALL hours (straight-time equivalent per DIR)

// Effective hourly wage rate per worker per week (weighted): // Effective Rate = (regHrs * 1.0 + otHrs * 1.5 + dtHrs * 2.0) / totalHrs [for wage calc] // But computes total wage dollars directly:

// --- Journeyman wage cost --- var jRegWage = journeymanWorkers * regHrs * weeks * baseWage * 1.0; var jOtWage = journeymanWorkers * otHrs * weeks * baseWage * 1.5; var jDtWage = journeymanWorkers * dtHrs * weeks * baseWage * 2.0; var jTotalBaseWage = jRegWage + jOtWage + jDtWage;

// --- Apprentice wage cost --- var aRegWage = apprenticeWorkers * regHrs * weeks * apprenticeWage * 1.0; var aOtWage = apprenticeWorkers * otHrs * weeks * apprenticeWage * 1.5; var aDtWage = apprenticeWorkers * dtHrs * weeks * apprenticeWage * 2.0; var aTotalBaseWage = aRegWage + aOtWage + aDtWage;

var totalBaseWages = jTotalBaseWage + aTotalBaseWage;

// --- Fringe Benefits --- // Fringe is paid on ALL hours worked (not multiplied by OT factor per DIR guidance) var totalAllHours = workers * totalHrsPerWorkerPerWeek * weeks; var totalFringe = totalAllHours * fringe;

// --- Gross Labor Cost (wages + fringe) --- var grossLaborCost = totalBaseWages + totalFringe;

// --- Employer Payroll Taxes (applied to base wages only, not fringe) --- var payrollTaxes = totalBaseWages * (payrollTaxRate / 100);

// --- Total Project Labor Cost --- var totalProjectCost = grossLaborCost + payrollTaxes;

// --- Per-worker and per-hour metrics --- var costPerWorker = totalProjectCost / workers; var costPerHour = totalProjectCost / totalAllHours;

// --- Overtime premium (additional cost above straight time) --- var jOtPremium = journeymanWorkers * otHrs * weeks * baseWage * 0.5; var jDtPremium = journeymanWorkers * dtHrs * weeks * baseWage * 1.0; var aOtPremium = apprenticeWorkers * otHrs * weeks * apprenticeWage * 0.5; var aDtPremium = apprenticeWorkers * dtHrs * weeks * apprenticeWage * 1.0; var totalOtPremium = jOtPremium + jDtPremium + aOtPremium + aDtPremium;

// --- Format helper --- function fmt(n) { return '$' + n.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ','); } function fmtN(n, dec) { return n.toFixed(dec === undefined ? 0 : dec).replace(/\B(?=(\d{3})+(?!\d))/g, ','); }

// --- Output --- resultDiv.style.display = 'block'; resultDiv.innerHTML = '### 📊 Project Cost Estimate ' +

'' + 'CategoryAmount' +

'Workforce' + '  Total Workers' + fmtN(workers) + '' + '  Journeyman Workers (' + fmtN(journeymanRatio100,1) + '%)' + fmtN(journeymanWorkers,2) + '' + '  Apprentice Workers (' + fmtN(apprenticeRatio100,1) + '%)' + fmtN(apprenticeWorkers,2) + '' + '  Total Worker-Hours' + fmtN(totalAllHours,0) + ' hrs' +

'Base Wages' + '  Journeyman Regular-Time Wages' + fmt(jRegWage) + '' + '  Journeyman Overtime Wages (1.5x)' + fmt(jOtWage) + '' + '  Journeyman Double-Time Wages (2.0x)' + fmt(jDtWage) + '' + '  Apprentice Regular-Time Wages' + fmt(aRegWage) + '' + '  Apprentice Overtime Wages (1.5x)' + fmt(aOtWage) + '' + '  Apprentice Double-Time Wages (2.0x)' + fmt(aDtWage) + '' + '  Total Base Wages' + fmt(totalBaseWages) + '' + '  (of which: Overtime/DT Premium)' + fmt(totalOtPremium) + '' +

'Fringe Benefits (all hours × ' + fmt(fringe) + '/hr)' + fmt(totalFringe) + '' +

'Gross Labor Cost (Wages + Fringe)' + fmt(grossLaborCost) + '' +

'Employer Payroll Taxes (' + payrollTaxRate.toFixed(2) + '% of base wages)' + fmt(payrollTaxes) + '' +

'✅ Total Project Labor Cost' + fmt(totalProjectCost) + '' +

'Cost per Worker (project total)' + fmt(costPerWorker) + '' + 'Effective Cost per Hour' + fmt(costPerHour) + '/hr' +

''; }

#### Formulas Used

Base Wage Cost per Worker Type:

Wage Cost = Workers × Weeks × [ (Regular Hrs × 1.0 × Base Wage) + (Overtime Hrs × 1.5 × Base Wage) + (Double-Time Hrs × 2.0 × Base Wage) ]

Fringe Benefits:

Fringe Cost = Total All Hours × Fringe Rate ($/hr) Total All Hours = Workers × (Reg + OT + DT Hrs/wk) × Weeks

Gross Labor Cost:

Gross Labor Cost = Total Base Wages + Total Fringe Benefits

Employer Payroll Taxes:

Payroll Taxes = Total Base Wages × (Payroll Tax Rate / 100)

Total Project Labor Cost:

Total Cost = Gross Labor Cost + Payroll Taxes

Effective Cost per Hour:

Cost/hr = Total Project Labor Cost / Total All Hours

#### Assumptions & References

More Calculators

Read Next

Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...

References