'); w.document.close(); w.print(); }, [cp, empN, op.scenario, idealBenefitsCostData, peoAnnual, currentPeoCost, peoChangeAmount, turnoverIdeal, turnoverPeo, attractionIdeal, attractionPeo, tthCalcIdeal, tthCalcPeo, prodValueIdeal, prodValuePeo, hrTimeSavings, hrChValue, compValue, wcSavings, currentSat, idealSat, peoSat, avgSal, hvSalary, replPctTyp, replPctHV, replCostTyp, replCostHV, hvExtraRevenue, totalLeaveC, totalLeaveIdeal, totalLeavePeo, hvLeaveC, hvLeaveIdeal, hvLeavePeo, hvPctC, hvPctIdeal, hvPctPeo, totalHires, turnoverHires, growthHires, tthC, tthIdeal, tthPeo, prodC, prodIdeal, prodPeo, totalPayroll, dailyProd, hoursSaved, hrRate, oppCost, pe, wcPremium, wcSavPct, replacedToolsCost, payrollAnnual, tier, tot, currentBenIds, idealBenIds, newBenIds, peoBenIdsAll, queueAdminNotify, td, ind]); const submitLead = useCallback(() => { if (!lf.name || !lf.email) return; const emailRe=/^[^\s@]+@[^\s@]+\.[^\s@]+$/; if(!emailRe.test(lf.email)){setEmailError('Enter a valid email address');return;} const phoneDigits=(lf.phone||'').replace(/\D/g,''); if(phoneDigits.length>0&&phoneDigits.length<10){setPhoneError('Enter a valid 10-digit phone number');return;} setLf(o => ({...o, done: true})); // Cancel any pending partial save to prevent it from recreating the partial entry if (partialTimerRef.current) { clearTimeout(partialTimerRef.current); partialTimerRef.current = null; } if (leadTimerRef.current) { clearTimeout(leadTimerRef.current); leadTimerRef.current = null; } // Send complete lead data to backend (also removes partial entry by session_id) const payload = { type: 'complete', session_id: sessionIdRef.current, data: { name: lf.name, email: lf.email, phone: lf.phone, company: lf.company, companyProfile: { name: cp.name, industry: cp.industry, state: cp.state, range: cp.range, exact: cp.exact }, benefitsSelected: { current: currentBenIds, ideal: idealBenIds }, benefitConfig: benConfig, peoInfo: { hasPeo: pe.hasPeo, peoName: pe.peoName, peoCost: pe.peoCost, hrChallenges: pe.hrCh, compliance: pe.comp, hrHoursSaved: pe.hrHoursSaved, hrHourlyRate: pe.hrHourlyRate, hrOpportunityCost: pe.hrOpportunityCost, wcPremium: pe.wcPremium, wcSavingsEst: pe.wcSavingsEst, payrollCost: pe.payrollCost, hrTools: pe.hrTools, hrToolOverrides: pe.hrToolOverrides, hrChOvr: pe.hrChOvr, compOvr: pe.compOvr, ft: pe.ft, pt: pe.pt }, turnoverData: { ...td }, roiSummary: { scenario: op.scenario, employee_count: empN, ideal_gross_value: turnoverIdeal.total + attractionIdeal.value + tthCalcIdeal.total + prodValueIdeal, ideal_benefits_cost: idealBenefitsCostData.totalMid, peo_annual_cost: peoAnnual, hr_time_savings: hrTimeSavings, compliance_value: compValue, wc_savings: wcSavings, turnover_savings_ideal: turnoverIdeal.total, turnover_savings_peo: turnoverPeo.total, attraction_value_ideal: attractionIdeal.value, attraction_value_peo: attractionPeo.value, tth_savings_ideal: tthCalcIdeal.total, tth_savings_peo: tthCalcPeo.total, productivity_value_ideal: prodValueIdeal, productivity_value_peo: prodValuePeo, current_satisfaction: currentSat, ideal_satisfaction: idealSat, peo_satisfaction: peoSat, replaced_tools_cost: replacedToolsCost }, userActions: userActions } }; fetch('submit.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }).catch(function(err) { console.log('Submit error:', err); }); queueAdminNotify('form_submit', { scenario: op.scenario, employee_count: empN, ideal_gross_value: turnoverIdeal.total + attractionIdeal.value + tthCalcIdeal.total + prodValueIdeal, ideal_benefits_cost: idealBenefitsCostData.totalMid, peo_annual_cost: peoAnnual, hr_time_savings: hrTimeSavings, compliance_value: compValue, wc_savings: wcSavings }); }, [lf, cp, td, empN, pe, op.scenario, currentBenIds, idealBenIds, turnoverIdeal, attractionIdeal, tthCalcIdeal, prodValueIdeal, idealBenefitsCostData, peoAnnual, hrTimeSavings, compValue, wcSavings, userActions, queueAdminNotify]); const generateShareText = useCallback(() => { const sMult = op.scenario === 'conservative' ? 0.7 : op.scenario === 'optimistic' ? 1.3 : 1.0; const sLabel = op.scenario === 'conservative' ? 'Conservative (70%)' : op.scenario === 'optimistic' ? 'Optimistic (130%)' : 'Base Case (100%)'; const sIdealGross = Math.round((turnoverIdeal.total + attractionIdeal.value + tthCalcIdeal.total + prodValueIdeal) * sMult); const sIdealNet = sIdealGross - idealBenefitsCostData.totalMid; const sIdealROI = idealBenefitsCostData.totalMid > 0 ? Math.round((sIdealGross / idealBenefitsCostData.totalMid) * 100) : 0; const sPeoGross = Math.round((turnoverPeo.total + attractionPeo.value + tthCalcPeo.total + prodValuePeo + hrTimeSavings + hrChValue + compValue + wcSavings) * sMult) + replacedToolsCost; const sPeoNet = sPeoGross - peoAnnual; const sPeoROI = peoAnnual > 0 ? Math.round((sPeoGross / peoAnnual) * 100) : 0; let txt = ''; txt += 'BENEFITS PACKAGE ROI ANALYSIS\n'; txt += '==============================\n'; txt += 'Company: ' + (cp.name || 'N/A') + '\n'; txt += 'Industry: ' + (cp.industry || 'N/A') + '\n'; txt += 'Employees: ' + empN + ' | State: ' + (cp.state || 'N/A') + '\n'; txt += 'Scenario: ' + sLabel + '\n'; txt += '\n'; txt += 'CURRENT BENEFITS SATISFACTION: ' + currentSat + '%\n'; txt += 'IDEAL PACKAGE SATISFACTION: ' + idealSat + '% (' + idealBenIds.length + ' benefits, ' + newBenIds.length + ' new)\n'; txt += '\n'; txt += '--- IDEAL BENEFITS PACKAGE ---\n'; txt += 'Projected Annual Value: ' + fmt(sIdealGross) + '\n'; txt += 'Estimated Annual Cost: ' + fmt(idealBenefitsCostData.totalMid) + '\n'; txt += 'Net ROI: ' + fmt(sIdealNet) + ' (' + sIdealROI + '% return)\n'; if (turnoverIdeal.total > 0) txt += ' - Turnover Savings: ' + fmt(Math.round(turnoverIdeal.total * sMult)) + '\n'; if (attractionIdeal.value > 0) txt += ' - High-Value Attraction: ' + fmt(Math.round(attractionIdeal.value * sMult)) + '\n'; if (tthCalcIdeal.total > 0) txt += ' - Time-to-Hire Savings: ' + fmt(Math.round(tthCalcIdeal.total * sMult)) + '\n'; if (prodValueIdeal > 0) txt += ' - Productivity Gains: ' + fmt(Math.round(prodValueIdeal * sMult)) + '\n'; txt += '\n'; if (peoAnnual > 0) { txt += '--- FULL PEO SOLUTION ---\n'; txt += 'Projected Annual Value: ' + fmt(sPeoGross) + '\n'; txt += 'Estimated Annual Cost: ' + fmt(peoAnnual) + '\n'; txt += 'Net ROI: ' + fmt(sPeoNet) + ' (' + sPeoROI + '% return)\n'; if (turnoverPeo.total > 0) txt += ' - Turnover Savings: ' + fmt(Math.round(turnoverPeo.total * sMult)) + '\n'; if (attractionPeo.value > 0) txt += ' - High-Value Attraction: ' + fmt(Math.round(attractionPeo.value * sMult)) + '\n'; if (tthCalcPeo.total > 0) txt += ' - Time-to-Hire Savings: ' + fmt(Math.round(tthCalcPeo.total * sMult)) + '\n'; if (prodValuePeo > 0) txt += ' - Productivity Gains: ' + fmt(Math.round(prodValuePeo * sMult)) + '\n'; if (hrTimeSavings > 0) txt += ' - HR Time Savings: ' + fmt(Math.round(hrTimeSavings * sMult)) + '\n'; if (hrChValue > 0) txt += ' - HR Challenges: ' + fmt(Math.round(hrChValue * sMult)) + '\n'; if (compValue > 0) txt += ' - Compliance Risk Reduction: ' + fmt(Math.round(compValue * sMult)) + '\n'; if (wcSavings > 0) txt += ' - Workers\' Comp Savings: ' + fmt(Math.round(wcSavings * sMult)) + '\n'; if (replacedToolsCost > 0) txt += ' - Replaced Tools Savings: ' + fmt(replacedToolsCost) + '\n'; txt += '\n'; } if (idealBenefitsCostData.erPaidBenefits.length > 0) { txt += '--- NEW BENEFITS (EMPLOYER COST) ---\n'; txt += 'Estimated range: ' + fmt(idealBenefitsCostData.totalLow) + ' - ' + fmt(idealBenefitsCostData.totalHigh) + '/yr\n'; idealBenefitsCostData.erPaidBenefits.forEach(function(b) { txt += ' ' + b.name + ': $' + b.costLow + '-$' + b.costHigh + '/emp/yr\n'; }); txt += '\n'; } if (idealBenefitsCostData.voluntaryBenefits.length > 0) { txt += '--- VOLUNTARY BENEFITS ($0 EMPLOYER COST) ---\n'; idealBenefitsCostData.voluntaryBenefits.forEach(function(b) { txt += ' ' + b.name + '\n'; }); txt += '\n'; } txt += '---\n'; txt += 'Generated by Benefitra Benefits ROI Calculator\n'; txt += 'https://benefitra.com\n'; txt += 'Data sources: KFF 2024, SHRM, BLS JOLTS, MetLife, Willis Towers Watson\n'; txt += 'This analysis is educational. Consult with a licensed benefits advisor for plan-specific projections.\n'; return txt; }, [cp, empN, op.scenario, idealBenefitsCostData, peoAnnual, turnoverIdeal, turnoverPeo, attractionIdeal, attractionPeo, tthCalcIdeal, tthCalcPeo, prodValueIdeal, prodValuePeo, hrTimeSavings, hrChValue, compValue, wcSavings, currentSat, idealSat, idealBenIds, newBenIds, replacedToolsCost]); const handleShareEmail = useCallback(() => { setUserActions(o=>({...o, shared:true})); const emailRe=/^[^\s@]+@[^\s@]+\.[^\s@]+$/; const emailList = share.emails.split(/[,;\s]+/).map(function(e){return e.trim();}).filter(Boolean); const invalid = emailList.filter(function(e){return !emailRe.test(e);}); if(invalid.length){setShareEmailError('Invalid email'+(invalid.length>1?'s':'')+': '+invalid.join(', '));return;} const toEmails = emailList.join(','); const txt = generateShareText(); const senderLine = share.senderName ? (share.senderName + ' has') : 'Someone on your team has'; const noteLine = share.senderNote ? ('\n\nNote from ' + (share.senderName || 'sender') + ':\n"' + share.senderNote + '"\n') : ''; const subject = 'Benefits ROI Analysis' + (cp.name ? ' for ' + cp.name : ''); const body = 'Hi,\n\n' + senderLine + ' shared a Benefits ROI analysis for your review.' + noteLine + '\n\n' + txt; const mailto = 'mailto:' + encodeURIComponent(toEmails) + '?subject=' + encodeURIComponent(subject) + '&body=' + encodeURIComponent(body); window.open(mailto, '_blank'); setShare(function(o){return Object.assign({}, o, {sent:true});}); if (lf.done) { // Already submitted via form — update existing complete entry with share details fetch('submit.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ type: 'update_actions', session_id: sessionIdRef.current, data: { userActions: {...userActions, shared: true}, shareDetails: { recipientEmails: toEmails, senderName: share.senderName || '', noteToRecipients: share.senderNote || '' } } }) }).catch(function(err) { console.log('Update share error:', err); }); } else { // Not yet submitted via form — create new complete lead from share if (partialTimerRef.current) { clearTimeout(partialTimerRef.current); partialTimerRef.current = null; } if (leadTimerRef.current) { clearTimeout(leadTimerRef.current); leadTimerRef.current = null; } const payload = { type: 'complete', session_id: sessionIdRef.current, data: { name: share.senderName || '', email: toEmails, phone: '', company: '', source: 'share_email', shareDetails: { recipientEmails: toEmails, senderName: share.senderName || '', noteToRecipients: share.senderNote || '' }, companyProfile: { name: cp.name, industry: cp.industry, state: cp.state, range: cp.range, exact: cp.exact }, benefitsSelected: { current: currentBenIds, ideal: idealBenIds }, peoInfo: { hasPeo: pe.hasPeo, peoName: pe.peoName, peoCost: pe.peoCost, hrChallenges: pe.hrCh, compliance: pe.comp }, turnoverData: { avgSalary: td.avgSalary, hvSalary: td.hvSalary, turnoverRate: td.turnoverRate, hvPct: td.hvPct, growthHires: td.growthHires }, roiSummary: { scenario: op.scenario, employee_count: empN, ideal_gross_value: turnoverIdeal.total + attractionIdeal.value + tthCalcIdeal.total + prodValueIdeal, ideal_benefits_cost: idealBenefitsCostData.totalMid, peo_annual_cost: peoAnnual, hr_time_savings: hrTimeSavings, compliance_value: compValue, wc_savings: wcSavings }, userActions: {...userActions, shared: true} } }; fetch('submit.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }).catch(function(err) { console.log('Share submit error:', err); }); } }, [lf.done, share, cp, pe, td, op.scenario, empN, currentBenIds, idealBenIds, turnoverIdeal, attractionIdeal, tthCalcIdeal, prodValueIdeal, idealBenefitsCostData, peoAnnual, hrTimeSavings, compValue, wcSavings, userActions, generateShareText]); const handleCopySummary = useCallback(() => { setUserActions(o=>({...o, copied:true})); const txt = generateShareText(); if (navigator.clipboard) { navigator.clipboard.writeText(txt).then(function(){ setShare(function(o){return Object.assign({}, o, {copied:true});}); setTimeout(function(){setShare(function(o){return Object.assign({}, o, {copied:false});});}, 2500); }); } else { // Fallback const ta = document.createElement('textarea'); ta.value = txt; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta); setShare(function(o){return Object.assign({}, o, {copied:true});}); setTimeout(function(){setShare(function(o){return Object.assign({}, o, {copied:false});});}, 2500); } }, [generateShareText]); const hrChallenges = [ {id:"recruiting",l:"Recruiting and hiring"},{id:"onboarding",l:"Employee onboarding"},{id:"payroll",l:"Payroll processing"}, {id:"terminations",l:"Handling terminations"},{id:"disputes",l:"Employee disputes"},{id:"benefits",l:"Benefits administration"} ]; const complianceItems = [ {id:"epli",l:"Employment Practices Liability"},{id:"flsa",l:"FLSA/Wage & Hour"},{id:"harassment",l:"Harassment prevention"}, {id:"fmla",l:"FMLA administration"},{id:"ada",l:"ADA compliance"},{id:"iNine",l:"I-9 verification"}, {id:"osha",l:"OSHA/Workplace safety"},{id:"handbook",l:"Employee handbook"} ]; return ( <> {/* ═══ NAV ═══ */}
setMobileMenuOpen(false)}>
BENEFITRA
{/* ═══ HEADER ═══ */}
BENEFITRA

Benefits ROI Calculator for California Trucking Companies

Built for California trucking employers using real CA wage data, workers' comp rates, and state-specific rules

Every number has a source. Hover any ⓘ to see the calculation. No email required.

{/* Pre-rendered data block for SEO */}
📊

California Trucking Industry at a Glance

California trucking workers earn an average of $55,840/year ($26.85/hour), the industry has a 50.7% turnover rate in CA, and the average employer share of health insurance is $8,950/employee/year. Workers' compensation for trucking in California typically runs $14.90 per $100 payroll.

$55,840
Avg Trucking Salary (CA)
50.7%
Trucking Turnover
$8,950
Avg Health Premium (CA)
$16.00
State Minimum Wage
{/* State x Industry Commentary */}
🏗️

What Makes California Trucking Different

California's trucking industry is defined by the twin forces of massive freight volume and aggressive regulatory intervention. The Ports of Los Angeles and Long Beach together handle over 40% of all containerized cargo entering the United States, generating enormous demand for drayage drivers. The Inland Empire — Riverside and San Bernardino counties — is the nation's largest warehouse and distribution cluster, with Amazon, Walmart, and major 3PL operations driving last-mile and regional trucking demand. The I-5, I-10, and I-15 corridors are among the busiest truck routes in the country. Despite this volume, California's cost of doing business — high fuel taxes, emissions regulations, and AB5 compliance — squeezes carrier margins and makes benefits strategy critical for survival.

AB5 is the single most consequential state law affecting trucking in the United States. By applying the ABC test to classify workers, California has effectively outlawed most traditional owner-operator arrangements. Carriers that previously relied on independent contractors must now offer W-2 employment with all associated benefits — health insurance, workers' compensation, paid sick leave, and payroll taxes. While the Ninth Circuit upheld AB5's application to trucking, legal challenges continue, and the Prop 22 carve-out for app-based gig workers does not extend to trucking. For benefits planning purposes, CA carriers should assume all drivers will be W-2 employees and budget accordingly. Companies that embrace this shift and build competitive benefits packages actually gain an advantage — they attract drivers who previously worked as owner-operators and value the stability of employer-sponsored health coverage and retirement plans.

Workers' compensation rates for California trucking operations run $10-$21 per $100 of payroll, reflecting the state's high medical costs and litigious claims environment. The WCIRB sets advisory pure premium rates that insurers use as a baseline. California's unique Supplemental Job Displacement Benefits and Return-to-Work Supplement programs add complexity to claims management. Health insurance averages $8,950 per employee — second only to New York among these 10 states. However, Kaiser Permanente's strong presence in the CA market gives trucking companies an HMO option that often runs 15-20% below PPO alternatives while providing comprehensive coverage. Carriers that offer Kaiser alongside a PPO option report the highest driver satisfaction with benefits.

Sources: BLS Occupational Employment and Wage Statistics (SOC 53-3032), May 2024, ATA American Trucking Associations Trucking Activity Report 2024, KFF Employer Health Benefits Survey 2024

{/* State Rules */}
⚖️

California-Specific Rules for Trucking Employers

  • California AB5 (codifying the ABC test) severely restricts owner-operator classification — most truck drivers must be treated as W-2 employees with full benefits
  • CA Paid Family Leave provides up to 8 weeks at 60-70% of wages, funded by employee SDI contributions
  • California mandates paid sick leave: 5 days (40 hours) minimum per year for all employees including drivers
  • CA requires Cal/OSHA compliance for trucking operations, including heat illness prevention plans for drivers in warehouse/yard operations
  • Covered California small-group market applies community rating — trucking companies pay the same rates as other industries for health plans
{/* Data Sources & Privacy */}
{/* Top bar — Data Sources with detailed descriptions */}

📊 Powered by Industry Data

{[ {icon:'💰', name:'KFF 2024', detail:'Employer Health Benefits Survey', desc:'The gold standard for U.S. employer health costs. Covers premiums, contributions, deductibles, and plan design across 2,000+ firms — the basis for our medical, dental, and vision cost estimates.'}, {icon:'👥', name:'SHRM & BLS', detail:'Workforce & Industry Benchmarks', desc:'SHRM\'s Human Capital Benchmarking and BLS JOLTS data provide turnover rates, hiring costs, and benefits adoption rates across 16 industries used in our ROI projections.'}, {icon:'⚖️', name:'EEOC & DOL', detail:'Compliance & Regulatory Data', desc:'Equal Employment Opportunity Commission and Department of Labor data on workplace claims, compliance costs, and employer liability — used to estimate risk-reduction value of PEO partnerships.'}, {icon:'📈', name:'MetLife & WTW', detail:'Employee Satisfaction Research', desc:'MetLife\'s Annual Benefits Trends Study and Willis Towers Watson\'s Global Benefits Attitudes Survey quantify how specific benefits drive employee satisfaction, engagement, and retention.'}, {icon:'🏢', name:'Work Institute', detail:'Retention & Turnover Research', desc:'Their annual Retention Report analyzes 250,000+ exit interviews to identify why employees leave and quantify the cost — our replacement cost and turnover reduction estimates are anchored here.'}, {icon:'🔒', name:'Hiscox', detail:'Employment Practices Liability', desc:'Hiscox\'s annual EPL study tracks the frequency and cost of employee lawsuits. Used to model liability-reduction savings when employers adopt compliant benefits through a PEO.'} ].map((s,i)=>(
{s.icon}
{s.name}
{s.detail}

{s.desc}

))}
{/* Bottom bar — How It Works & Privacy side by side */}
🛠️
How It Works— Every number has a source. Hover any icon to see the calculation, data source, and assumptions behind each figure.
Your Privacy— All calculations run in your browser. Nothing is sent to a server until you submit your info. We never sell your data.
{/* S1: Company Profile */}
uCp('name',v)} placeholder="Acme Corp"/>
Transportation & Warehousing / Trucking
California
uCp('range',v)} options={empRanges.map(r=>({v:r,l:r+' employees'}))}/> uCp('exact',v)} placeholder="e.g. 47" optional type="number"/>
{s1Ok&&
Complete — continue below
}
{/* S2: Benefits Selection */}
Satisfaction Benchmarks: Health Only: 40-55% | +Dental+Vision: 50-65% | +Core 7: 60-75% | 30+ Benefits: 75-90%

2a. Select Your Current Benefits

{Object.entries(benefitsCatalog).map(([k,cat])=>{ const c=catClr[cat.color]; return
{cat.title}
{cat.items.map(b=>toggleCurrent(b.id)}/>)}
; })} {currentBenIds.length > 0 && <>
Current Employee Benefit Satisfaction Score
{currentSat}%

2b. Select Benefits to Add for Your Ideal Package

Check a benefit to add it. For some benefits, you can customize how it's funded or how much to invest.

{Object.entries(benefitsCatalog).map(([k,cat])=>{ const c=catClr[cat.color]; const available = cat.items.filter(b=>!currentBens[b.id]); if (available.length === 0) return null; return
{cat.title}
{available.map(b=>{ const cust = customizableBenefits[b.id]; const chk = idealBens[b.id]; const cfg = benConfig[b.id] || {}; const badgeText = chk && cust ? (cust.fundingModes ? (cust.labels[cfg.mode||cust.defaultMode]||'') : cust.amountInput ? fmt(parseFloat(cfg.amount)||cust.defaultAmount)+'/emp' : null) : null; return
toggleIdeal(b.id)} highlight={b.peo} value={badgeText}/> {chk && cust && cust.fundingModes &&
How will you offer {b.n}?
{Object.entries(cust.labels).map(([mode,lbl])=>{ const active = (cfg.mode||cust.defaultMode)===mode; const clr = mode==='voluntary'?'border-green-400 bg-green-50 text-green-700':mode==='split'?'border-amber-400 bg-amber-50 text-amber-700':'border-red-400 bg-red-50 text-red-700'; return ; })}
{(()=>{const m=cfg.mode||cust.defaultMode;const cs=cust.costs[m];return cs?(cs.mid>0?
90% confidence: ${cs.low}–${cs.high}/emp/yr (mid: ${cs.mid})
:
$0 employer cost — employee-paid via payroll deduction
):null;})()}
} {chk && cust && cust.amountInput &&
{cust.label}
$ {e.stopPropagation();uBen(b.id,'amount',e.target.value);}} className="flex-1 h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer accent-bih-green"/> {e.stopPropagation();uBen(b.id,'amount',e.target.value);}} onClick={e=>e.stopPropagation()} onWheel={e=>e.target.blur()} className="w-24 px-2 py-1 border border-gray-300 rounded text-sm text-right"/> /yr
{cust.hint}
Total: {fmt((parseFloat(cfg.amount)||cust.defaultAmount)*empN)}/yr for {empN} employees
}
; })}
; })}
Ideal Package Employee Benefit Satisfaction
{idealSat}%
{idealBenIds.length} benefits total ({newBenIds.length} new)
{newBenIds.length > 0 && (
{/* Contribution Type Legend */}
Understanding Employer Cost Types:
Noncontributory — Employer pays 100%. All eligible employees enrolled automatically.
Contributory — Employer & employee share cost. Carriers often require 50%+ ER share, 75% participation.
Voluntary — Employee-paid. $0 employer cost possible. Employer provides access via payroll deduction.
Employer-Funded / Admin — Employer pays platform or program fee, or admin costs only.
{/* Important Notes */}
⚠️ Important Considerations:
  • Minimum participation: Most group benefit carriers require 75% employee participation for contributory plans (medical, dental). Voluntary lines typically need 10-25%.
  • Small group rules: Under 50 employees, ACA small group rules apply — community-rated premiums, essential health benefits required. Over 50, large group underwriting applies.
  • Employer contribution minimums: Most carriers require the employer to contribute at least 50% of employee-only premiums for group health. Some states require higher (e.g., Hawaii mandates 50%, some carriers require 75%).
  • Enrollment windows: Adding new benefits typically requires a qualifying event or annual open enrollment period.
  • Voluntary benefits at $0: Benefits marked "Voluntary" can genuinely cost the employer $0 — the employer simply provides access and payroll deduction. These still boost satisfaction and recruitment.
{idealBenefitsCostData.erPaidBenefits.length > 0 && (<>
Estimated Annual Employer Cost for New Benefits:
90% Confidence Interval (Employer Cost Only)
{fmt(idealBenefitsCostData.totalLow)} {fmt(idealBenefitsCostData.totalMid)} {fmt(idealBenefitsCostData.totalHigh)}
)} {/* All new benefits — ER-paid and voluntary together */} {idealBenefitsCostData.breakdown.length > 0 && (
{idealBenefitsCostData.breakdown.map(b => { const isVol = !b.hasERCost; const typeColor = isVol ? 'bg-green-100 text-green-700' : b.type === 'noncontributory' ? 'bg-red-100 text-red-700' : b.type === 'contributory' ? 'bg-amber-100 text-amber-700' : 'bg-blue-100 text-blue-700'; const typeLabel = isVol ? 'Employee-Paid' : b.type === 'noncontributory' ? 'ER-Paid' : b.type === 'contributory' ? 'Contributory' : b.type === 'admin-only' ? 'Admin Fee' : 'ER-Funded'; const textColor = isVol ? 'text-green-600' : 'text-blue-600'; return (
{typeLabel} {b.name} ${b.name}

Type: ${isVol ? 'Voluntary (employee-paid)' : b.type}
Employer cost: ${isVol ? '$0 — employee pays via payroll deduction' : '$'+b.costLow+'-$'+b.costHigh+'/emp/yr'}
Employer share: ${b.erShareRange}
Min participation: ${b.minParticipation}

Source: ${b.source}`}/>
{isVol ? '$0/emp' : '$'+b.costLow+'-$'+b.costHigh+'/emp'}
); })}
)} {idealBenefitsCostData.voluntaryBenefits.length > 0 && (
{idealBenefitsCostData.voluntaryBenefits.length} benefit(s) marked Employee-Paid add value to your package at no direct employer cost — employees get group pricing via payroll deduction.
)}
)}

2c. PEO Benefits Available

{allBens.filter(b=>b.peo).map(b=>
{b.n}
)}
Full PEO Employee Benefits Satisfaction
{peoSat}%
}
{/* S3: Turnover & Value Drivers */}
Industry ({cp.industry || 'default'}): {ind.turnover}% avg turnover, {fmt(ind.avgSalary)} avg salary
uTd('salTyp',v)} prefix="$" placeholder={String(ind.avgSalary)} optional type="number"/> uTd('replCostTyp',v)} suffix="%" placeholder={String(ind.replacement)} optional type="number" tip={replacementTip}/>

Total Employee Turnover

uTd('totalLeaveCurrent',v)} suffix="emp" placeholder={String(defTotalLeave)} optional type="number" tip={`Industry average: ${ind.turnover}% = ${defTotalLeave} employees/year`}/> uTd('totalLeaveIdeal',v)} suffix="emp" placeholder={String(Math.round(defTotalLeave * 0.85))} optional type="number" tip={turnoverPredTip('ideal')}/> uTd('totalLeavePeo',v)} suffix="emp" placeholder={String(Math.round(defTotalLeave * 0.75))} optional type="number" tip={turnoverPredTip('peo')}/>

High-Value Employee Analysis

uTd('hvSalary',v)} prefix="$" placeholder={String(Math.round(avgSal * 1.7))} optional type="number"/> uTd('replCostHV',v)} suffix="%" placeholder={String(ind.replacement * 2)} optional type="number" tip={replacementTip}/>
uTd('hvExtraRevenue',v)} prefix="$" suffix="/year extra" placeholder={String(Math.round(avgSal * 0.5))} optional type="number" tip={hvRevenueTip}/>
uTd('hvLeaveCurrent',v)} suffix="emp" placeholder={String(defHVLeave)} optional type="number"/> uTd('hvLeaveIdeal',v)} suffix="emp" placeholder={String(Math.round(defHVLeave * 0.7))} optional type="number"/> uTd('hvLeavePeo',v)} suffix="emp" placeholder={String(Math.round(defHVLeave * 0.6))} optional type="number"/>
uTd('hvPct',v)} suffix="%" placeholder="15" optional type="number"/> uTd('hvPctIdeal',v)} suffix="%" placeholder="20" optional type="number"/> uTd('hvPctPeo',v)} suffix="%" placeholder="25" optional type="number"/>
uTd('growthHires',v)} suffix="new positions" placeholder={String(Math.round(empN * 0.1))} optional type="number" tip="Net new positions (excluding turnover). Total hires = growth + turnover replacements."/>

Time-to-Hire

uTd('tthCurrent',v)} suffix="days" placeholder={String(defTTH)} optional type="number"/> uTd('tthIdeal',v)} suffix="days" placeholder={String(Math.round(defTTH * 0.85))} optional type="number"/> uTd('tthPeo',v)} suffix="days" placeholder={String(Math.round(defTTH * 0.75))} optional type="number"/>

Productivity & Engagement

Top productivity boosters: Financial Planning, Mental Health, Wellness, Caregiving, On-Demand Pay

uTd('prodCurrent',v)} min={0} max={100} showValue/> uTd('prodIdeal',v)} min={0} max={100} showValue color="accent-blue-500"/> uTd('prodPeo',v)} min={0} max={100} showValue/>
{/* Turnover Preview */}

Turnover Savings Preview

Your Ideal Benefits
{fmt(turnoverIdeal.total)}
{turnoverIdeal.fewerTotal} fewer employees leaving
Full PEO Benefits
{fmt(turnoverPeo.total)}
{turnoverPeo.fewerTotal} fewer employees leaving
{/* S4: PEO Value Analysis */}

Do you currently have a PEO?

{['yes','no'].map(v=>)}
{pe.hasPeo==='yes'&&(
uPe('peoName',v)} placeholder="e.g. ADP TotalSource" optional/> uPe('peoCost',v)} prefix="$" placeholder="5000" optional type="number"/>
)} {pe.hasPeo==='no'&&(
Current Payroll & HR Tool Costs

A PEO replaces these tools entirely. Enter your current costs so we can calculate your true net investment. Values are pre-filled with industry benchmarks for {empN} employees.

uPe('payrollCost',v)} prefix="$" placeholder={String(hrToolBenchmarks.payroll.cost(empN) * empN)} tip="Total monthly bill from your payroll provider (ADP, Paychex, Gusto, etc.). Not employee wages — just the service fee." optional type="number"/> {!pe.payrollCost &&
Industry avg for {empN} employees: ~{fmt(hrToolBenchmarks.payroll.cost(empN) * empN)}/mo (${hrToolBenchmarks.payroll.cost(empN)}/emp/mo)
}
HR Tools & Services (check all that apply):
{Object.entries(hrToolBenchmarks).filter(([id])=>id!=='payroll').map(([id,tool])=>{ const on = pe.hrTools[id]; const benchMo = tool.cost(empN); const ovr = pe.hrToolOverrides[id]; const effMo = ovr !== undefined && ovr !== '' ? parseFloat(ovr) : benchMo; const annTotal = effMo * empN * 12; return
toggleTool(id)} className="flex items-center gap-2 cursor-pointer flex-1">
{on&&}
{tool.label} {tool.hint}
{on && {fmt(annTotal)}/yr}
{on &&
$/emp/mo: {e.stopPropagation();uToolOvr(id,e.target.value);}} onClick={e=>e.stopPropagation()} onWheel={e=>e.target.blur()} className="w-20 px-2 py-1 border border-gray-300 rounded text-xs text-right" min="0" step="1"/> {ovr !== undefined && ovr !== '' && parseFloat(ovr) !== benchMo && } = {fmt(effMo * empN)}/mo for {empN} emp
}
; })}
{replacedToolsCost > 0 &&
Total Current Tools Cost:{fmt(replacedToolsCost)}/year
This amount is replaced by your PEO and counted as savings in the analysis below.
}
)}
uPe('ft',v)} placeholder={String(empN)} optional type="number"/> uPe('pt',v)} placeholder="0" optional type="number"/>
Estimated PEO Cost:${tier.pepm.toFixed(2)}/emp/mo
Annual:{fmt(peoAnnual)}
{pe.hasPeo==='yes' && currentPeoCost > 0 &&
vs Current: peoAnnual ? 'text-bih-green' : 'text-red-600'}`}>{currentPeoCost > peoAnnual ? `Save ${fmt(currentPeoCost - peoAnnual)}/yr` : `${fmt(peoAnnual - currentPeoCost)}/yr more`}
} {pe.hasPeo==='no' && replacedToolsCost > 0 && <>
Current tools replaced:{fmt(replacedToolsCost)}/yr
Net new PEO cost:{peoAnnual - replacedToolsCost <= 0 ? `Save ${fmt(Math.abs(peoAnnual - replacedToolsCost))}/yr` : `${fmt(peoAnnual - replacedToolsCost)}/yr`}
}

HR Time Savings

With guaranteed compliance, expert access, and unified integrations:

uPe('hrHoursSaved',v)} suffix="hrs" placeholder={String(benchmarkHours)} optional type="number"/> uPe('hrHourlyRate',v)} prefix="$" placeholder={String(ind.hrHourlyRate)} optional type="number"/> uPe('hrOpportunityCost',v)} suffix="%" placeholder="40" optional type="number"/>
Total HR Time Value: {fmt(hrTimeSavings)}/year

HR Challenges

Suggested values are based on your industry and headcount. You can adjust any value after selecting it.

{hrChallenges.map(c=>{ const sug=getHRVal(c.id); const on=pe.hrCh.includes(c.id); const ov=pe.hrChOvr[c.id]; const eff=ov!==undefined&&ov!==''?parseFloat(ov):sug; return
toggleArr('hrCh',c.id)} value={fmt(eff)} tip={getHRTip(c.id)}/> {on &&
Annual value: $ uHrOvr(c.id,e.target.value)} onWheel={e=>e.target.blur()} className="w-28 px-2 py-1 border border-gray-300 rounded text-xs text-right" min="0" step="500"/> {ov!==undefined&&ov!==''&&parseFloat(ov)!==sug && }
}
; })}
{hrChValue > 0 &&
Total: {fmt(hrChValue)}/year
}

Compliance Concerns

Values are expected annual risk cost (probability × typical claim cost). Adjust as needed.

{complianceItems.map(c=>{ const sug=getCompVal(c.id); const on=pe.comp.includes(c.id); const ov=pe.compOvr[c.id]; const eff=ov!==undefined&&ov!==''?parseFloat(ov):sug; return
toggleArr('comp',c.id)} value={eff>0?fmt(eff):'N/A'} tip={getCompTip(c.id)}/> {on && sug>0 &&
Annual risk value: $ uCompOvr(c.id,e.target.value)} onWheel={e=>e.target.blur()} className="w-28 px-2 py-1 border border-gray-300 rounded text-xs text-right" min="0" step="500"/> {ov!==undefined&&ov!==''&&parseFloat(ov)!==sug && }
}
; })}
{compValue > 0 &&
Total: {fmt(compValue)}/year
}

Workers' Compensation

PEO savings: {isBlue ? '20-60%' : '0-30%'} ({isBlue ? 'blue' : 'white'}-collar)

uPe('wcPremium',v)} prefix="$" placeholder="25000" optional type="number"/> uPe('wcSavingsEst',v)} suffix="%" placeholder={String(Math.round(wcSavPct))} optional type="number"/>
{wcSavings > 0 &&
{fmt(wcSavings)} savings
}
{/* S5: Value Breakdown */} {/* Scenario Tabs */}
Projection Scenario
{[{k:'conservative',l:'Conservative',sub:'70%'},{k:'base',l:'Base Case',sub:'100%'},{k:'optimistic',l:'Optimistic',sub:'130%'}].map(s=>( ))}

{op.scenario === 'conservative' ? 'Showing 70% of projected improvements — your floor estimate' : op.scenario === 'optimistic' ? 'Showing 130% of projected improvements — with strong execution' : 'Showing base case — projected improvements from industry research'}

{/* Industry Benchmark */} {(() => { const ct = ind.compThreshold; // Map satisfaction to industry-relative percentile: compThreshold = 50th percentile const toPos = (sat) => { if (sat <= 35) return 5; if (sat < ct) return 5 + (sat - 35) / (ct - 35) * 45; // 35→5%, ct→50% return 50 + (sat - ct) / (95 - ct) * 45; // ct→50%, 95→95% }; const curPos = Math.min(95, Math.max(5, toPos(currentSat))); const idealPos = Math.min(95, Math.max(5, toPos(idealSat))); const peoPos = Math.min(95, Math.max(5, toPos(peoSat))); const curLabel = curPos < 25 ? 'Below Average' : curPos < 50 ? 'Approaching Average' : curPos < 75 ? 'Competitive' : 'Top Tier'; return (
📊 Benefits Competitiveness: {cp.industry || 'Your Industry'} INDUSTRY-SPECIFIC COMPETITIVENESS

This bar reflects what it takes to be competitive in ${cp.industry || 'your industry'} specifically — not a one-size-fits-all score.

How it works:
Different industries have different benefits expectations. In ${cp.industry || 'your industry'}, a satisfaction score of ~${ct}% represents the competitive midpoint where most employers sit.

${cp.industry || 'Your industry'} insight:
${ind.compNote}

What the positions mean:
• Left (red): Well below ${cp.industry || 'industry'} norms — high turnover risk
• Center line: Average for ${cp.industry || 'your industry'} (~${ct}% satisfaction)
• Right (green): Above ${cp.industry || 'industry'} peers — strong recruitment advantage

Your scores:
• Current: ${currentSat}% — ${curLabel}
• Ideal: ${idealSat}%
• PEO: ${peoSat}%

Sources: MetLife, SHRM, Willis Towers Watson industry benchmarks`}/>
{/* Industry average marker */}
{/* Current marker */}
{/* Ideal marker */}
{/* PEO marker */}
Below AverageIndustry Avg ({ct}%)Top Tier
Current: {currentSat}% — {curLabel} Ideal: {idealSat}% PEO: {peoSat}%
{ind.compNote}
); })()} {(() => { const sMult = op.scenario === 'conservative' ? 0.7 : op.scenario === 'optimistic' ? 1.3 : 1.0; const sLabel = op.scenario === 'conservative' ? 'Conservative' : op.scenario === 'optimistic' ? 'Optimistic' : 'Base Case'; // Scenario-adjusted values const sTurnoverIdeal = Math.round(turnoverIdeal.total * sMult); const sTurnoverPeo = Math.round(turnoverPeo.total * sMult); const sAttractionIdeal = Math.round(attractionIdeal.value * sMult); const sAttractionPeo = Math.round(attractionPeo.value * sMult); const sTthIdeal = Math.round(tthCalcIdeal.total * sMult); const sTthPeo = Math.round(tthCalcPeo.total * sMult); const sProdIdeal = Math.round(prodValueIdeal * sMult); const sProdPeo = Math.round(prodValuePeo * sMult); const sHrTime = Math.round(hrTimeSavings * sMult); const sHrCh = Math.round(hrChValue * sMult); const sComp = Math.round(compValue * sMult); const sWc = Math.round(wcSavings * sMult); const sIdealGross = sTurnoverIdeal + sAttractionIdeal + sTthIdeal + sProdIdeal; const sIdealNet = sIdealGross - idealBenefitsCostData.totalMid; const sReplacedTools = replacedToolsCost; // not scenario-adjusted — real spend const sPeoGross = sTurnoverPeo + sAttractionPeo + sTthPeo + sProdPeo + sHrTime + sHrCh + sComp + sWc + sReplacedTools; const sPeoNet = sPeoGross - peoAnnual; const sPeoChangeAmount = currentPeoCost > 0 ? peoAnnual - currentPeoCost : peoAnnual; const sPeoNetAdjusted = currentPeoCost > 0 ? sPeoGross - sPeoChangeAmount : sPeoNet; const sPeoROI = peoAnnual > 0 ? Math.round((sPeoGross / peoAnnual) * 100) : 0; const sIdealROI = idealBenefitsCostData.totalMid > 0 ? Math.round((sIdealGross / idealBenefitsCostData.totalMid) * 100) : 0; return (<>
{/* Ideal Benefits Column */}

Your Ideal Benefits

{sTurnoverIdeal > 0 && {turnoverIdeal.fewerTotal} fewer leaving} tip={turnoverPreviewTip(true)}/>} {sAttractionIdeal > 0 && {attractionIdeal.extraHV} extra high-value hires} tip={attractionTip(true)}/>} {sTthIdeal > 0 && {tthCalcIdeal.daysSaved} days saved × {totalHires} hires} tip={tthTip(true)}/>} {sProdIdeal > 0 && {prodC}% → {prodIdeal}%} tip={prodTip(true)}/>}
Gross Value ({sLabel}):{fmt(sIdealGross)}
{idealBenefitsCostData.totalMid > 0 && (
Benefits Investment90% CONFIDENCE INTERVAL

Low: ${fmt(idealBenefitsCostData.totalLow)}/yr
Mid: ${fmt(idealBenefitsCostData.totalMid)}/yr
High: ${fmt(idealBenefitsCostData.totalHigh)}/yr`}/>
({fmt(idealBenefitsCostData.totalLow)} - {fmt(idealBenefitsCostData.totalHigh)})
)}
Net Value {fmt(sIdealNet)}/yr
{idealBenefitsCostData.totalMid > 0 &&
ROI: {sIdealROI}%
}
{/* PEO Column */}

Full PEO Benefits

{sTurnoverPeo > 0 && {turnoverPeo.fewerTotal} fewer leaving} tip={turnoverPreviewTip(false)}/>} {sAttractionPeo > 0 && {attractionPeo.extraHV} extra high-value hires} tip={attractionTip(false)}/>} {sTthPeo > 0 && {tthCalcPeo.daysSaved} days saved × {totalHires} hires} tip={tthTip(false)}/>} {sProdPeo > 0 && {prodC}% → {prodPeo}%} tip={prodTip(false)}/>} {sHrTime > 0 && {hoursSaved} hrs/week freed} tip={hrTimeSavingsTip}/>} {sHrCh > 0 && {pe.hrCh.length} challenges addressed}/>} {sComp > 0 && {pe.comp.length} risks mitigated}/>} {sWc > 0 && {wcSavPct}% savings}/>} {replacedToolsCost > 0 && Payroll + {Object.keys(pe.hrTools).filter(k=>pe.hrTools[k]).length} HR tools replaced} tip={`TOOLS REPLACED BY PEO

A PEO bundles payroll, HRIS, benefits admin, compliance, and more into one platform.

Your current costs being replaced:
${payrollAnnual > 0 ? '\u2022 Payroll: ' + fmt(payrollAnnual) + '/yr
' : ''}${Object.keys(pe.hrTools).filter(k=>pe.hrTools[k]).map(id => {const b=hrToolBenchmarks[id];const ovr=pe.hrToolOverrides[id];const mo=ovr!==undefined&&ovr!==''?parseFloat(ovr):b.cost(empN);return '\u2022 '+b.label+': '+fmt(mo*empN*12)+'/yr';}).join('
')}

Total replaced: ${fmt(replacedToolsCost)}/yr

This is real budget you're already spending that the PEO absorbs.`}/>}
Gross Value ({sLabel}):{fmt(sPeoGross)}
{currentPeoCost > 0 && (
PEO Change: {sPeoChangeAmount < 0 ? `+${fmt(Math.abs(sPeoChangeAmount))} savings` : `(${fmt(sPeoChangeAmount)})`}
)} {!(currentPeoCost > 0) && (
PEO Investment:({fmt(peoAnnual)})
)} {!(currentPeoCost > 0) && sReplacedTools > 0 && (
Tools Replaced:+{fmt(sReplacedTools)}
)}
Net Value {fmt(sPeoNetAdjusted)}/yr
ROI: {sPeoROI}%
{pe.hasPeo === 'yes' && currentPeoCost > 0 && (
Switching Analysis
Your current PEO cost:{fmt(currentPeoCost)}/yr
Recommended PEO cost:{fmt(peoAnnual)}/yr
PEO cost difference:{sPeoChangeAmount < 0 ? `Save ${fmt(Math.abs(sPeoChangeAmount))}` : fmt(sPeoChangeAmount)}/yr
{sWc > 0 &&
Workers' comp savings:+{fmt(sWc)}/yr
}
0 ? 'text-bih-green' : 'text-amber-300'}`}> Total switching {switchingSavings > 0 ? 'saves' : 'costs'}: {fmt(Math.abs(switchingSavings))}/yr
)}
{/* Multi-Year Projection Inputs */}

Multi-Year Projection Settings

uTd('illustrateYears',v)} options={[{v:'1',l:'1 Year'},{v:'2',l:'2 Years'},{v:'3',l:'3 Years'},{v:'4',l:'4 Years'},{v:'5',l:'5 Years'},{v:'6',l:'6 Years'}]} tip="Select the number of years for your value projection (max 6 years)."/>
{Array.from({length: parseInt(td.illustrateYears||'3')}, (_,i)=> { const yr = i+1; const gby = td.growthByYear || {}; return
Year {yr}
{const v=e.target.value;setTd(p=>({...p,growthByYear:{...p.growthByYear,[yr]:v}}));}} onWheel={e=>e.target.blur()} placeholder={String(growthHires)} className="w-full px-3 py-2 border border-gray-300 rounded-bih focus:ring-2 focus:ring-bih-green font-body text-bih-charcoal text-sm pr-10"/> emp
; })}
{/* Side by Side Time Values */} {(() => { const illustrateYears = parseInt(td.illustrateYears) || 3; const gby = td.growthByYear || {}; const getYearGrowth = (yr) => { const v = gby[yr]; return (v !== '' && v !== undefined && v !== null && !isNaN(parseFloat(v))) ? parseFloat(v) : growthHires; }; // Base annual values WITHOUT HV attraction (attraction will be recalculated per year) const baseIdealNetNoAttraction = sIdealNet - sAttractionIdeal; const basePeoNetNoAttraction = sPeoNetAdjusted - sAttractionPeo; // Build year-by-year projection const yearRows = []; let cumulativeIdeal = 0; let cumulativePeo = 0; let cumulativeHVIdeal = 0; let cumulativeHVPeo = 0; let cumulativeNewEmps = 0; for (let y = 1; y <= illustrateYears; y++) { const growthThisYear = getYearGrowth(y); cumulativeNewEmps += (y > 1 ? getYearGrowth(y - 1) : 0); const empY = empN + cumulativeNewEmps; const empRatio = empN > 0 ? empY / empN : 1; // Recalculate hires for this year's employee count const turnoverHiresY = Math.round(empY * ind.turnover / 100); const growthHiresY = growthThisYear; const totalHiresY = turnoverHiresY + growthHiresY; // Calculate new extra HV employees attracted this year const currentHVY = Math.round(totalHiresY * hvPctC / 100); const targetHVIdealY = Math.round(totalHiresY * hvPctIdeal / 100); const targetHVPeoY = Math.round(totalHiresY * hvPctPeo / 100); const extraHVIdealY = targetHVIdealY - currentHVY; const extraHVPeoY = targetHVPeoY - currentHVY; // Accumulate HV employees (they persist and generate value each year) cumulativeHVIdeal += Math.max(0, extraHVIdealY); cumulativeHVPeo += Math.max(0, extraHVPeoY); // This year's value: scaled base + cumulative HV attraction value const yearIdealValue = baseIdealNetNoAttraction * empRatio + cumulativeHVIdeal * hvExtraRevenue * sMult; const yearPeoValue = basePeoNetNoAttraction * empRatio + cumulativeHVPeo * hvExtraRevenue * sMult; cumulativeIdeal += yearIdealValue; cumulativePeo += yearPeoValue; yearRows.push({ year: y, empCount: Math.round(empY), newHVIdeal: Math.max(0, extraHVIdealY), newHVPeo: Math.max(0, extraHVPeoY), cumHVIdeal: cumulativeHVIdeal, cumHVPeo: cumulativeHVPeo, annualIdeal: Math.round(yearIdealValue), annualPeo: Math.round(yearPeoValue), cumulativeIdeal: Math.round(cumulativeIdeal), cumulativePeo: Math.round(cumulativePeo) }); } return (

Value Comparison Over Time

{sLabel} scenario ({sMult === 1 ? '100%' : sMult === 0.7 ? '70%' : '130%'} of projected improvements) • {Array.from({length:illustrateYears},(_,i)=>getYearGrowth(i+1)).join('/')} employees added (by year)

{yearRows.map((r, i) => ( ))}
Period Your Ideal Benefits Full PEO Benefits
Monthly {fmt(Math.round(sIdealNet / 12))} {fmt(Math.round(sPeoNetAdjusted / 12))}
{r.year}-Year Total {r.empCount} employees • {r.cumHVIdeal > 0 || r.cumHVPeo > 0 ? `+${r.cumHVIdeal}/${r.cumHVPeo} HV` : ''} {fmt(r.cumulativeIdeal)} {fmt(r.cumulativePeo)}
{cumulativeHVIdeal > 0 || cumulativeHVPeo > 0 ? (

High-Value Employee Compounding Effect

Over {illustrateYears} year{illustrateYears > 1 ? 's' : ''}, your improved benefits attract {yearRows[yearRows.length-1].cumHVIdeal} additional high-value employees (Ideal) / {yearRows[yearRows.length-1].cumHVPeo} (PEO) who each generate {fmt(hvExtraRevenue)}/yr in extra revenue. Earlier hires compound value across all subsequent years.

) : null}
); })()} ); })()}
{/* S6: Your Report & Next Steps */} {/* Soft Optional Lead Capture */} {!lf.done ? (

Want a Custom Implementation Roadmap?

Optional — a benefits specialist can review your results and provide vendor-specific recommendations, carrier comparisons, and a phased rollout plan tailored to your budget.

uLf('name',v)} placeholder="Name"/>
uLf('email',v)} placeholder="Email"/>{emailError&&

{emailError}

}
uLf('phone',v)} placeholder="(123) 123"/>{phoneError&&

{phoneError}

}
uLf('company',v)} placeholder="Company"/>
Schedule a Call

🔒 Your information is private. We never sell your data to third parties.

) : (

Request Sent — Thank You!

A benefits specialist will review your analysis and reach out within 1 business day.

)} {/* Ungated PDF Download */}

Download Your Analysis

Your complete ROI breakdown — no email required.

{/* Share Panel */} {share.open && (
{!share.sent ? (<>

Share This Analysis

Email your ROI analysis to leadership, your CFO, or anyone who needs to see the numbers. A summary of your full analysis will be included in the email.

{setShare(o=>({...o,emails:v}));const emailRe=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;if(v.trim()){const parts=v.split(/[,;\s]+/).map(e=>e.trim()).filter(Boolean);const invalid=parts.filter(e=>!emailRe.test(e));setShareEmailError(invalid.length?'Invalid email'+(invalid.length>1?'s':'')+': '+invalid.join(', '):'');}else{setShareEmailError('');}}} placeholder="[email protected], [email protected]" tip="Separate multiple emails with commas"/>{shareEmailError&&

{shareEmailError}

}
setShare(o=>({...o,senderName:v}))} placeholder="Your name" optional/> setShare(o=>({...o,senderNote:v}))} placeholder="Take a look at this benefits analysis..." optional/>

This opens your default email app with the analysis pre-filled. You can review and edit before sending.

) : (

Email Opened!

Review the email in your mail app and hit send. The analysis summary is already filled in.

)}
)}
{/* Divider */} {s2Ok && (
)} {/* Content Hub: Other State Trucking Calculators */} {s2Ok && (

🗺️ Trucking Benefits ROI by State

See how trucking benefits ROI compares in other states:

MA Massachusetts Trucking NY New York Trucking TX Texas Trucking FL Florida Trucking IL Illinois Trucking PA Pennsylvania Trucking NJ New Jersey Trucking GA Georgia Trucking OH Ohio Trucking
← Back to National Trucking Benefits ROI Calculator
)} {/* Cross-Promo: Other Tools */} {s2Ok && (

💡 Go Deeper With Your Numbers

Use our other free tools to refine your analysis and find additional savings:

📈

Business Valuation Projection

See how your benefits investment affects what your business is worth

📉

Premium Renewal Stress Test

Model your next 6 years of renewals under different funding arrangements

📊

Health Funding Cost Projector

Compare fully insured, level-funded, self-funded, and captive side-by-side

🎯

Benefits Savings Strategy Builder

Explore 25+ strategies with savings estimates and employee impact ratings

)} {/* FAQ Section - California Trucking */} {s2Ok && (

Frequently Asked Questions: California Trucking Benefits

What is the average wage for truck drivers in California?

BLS data shows the average annual wage for heavy and tractor-trailer truck drivers in California is approximately $55,840 ($26.85/hour), about 5% above the national average. Port drayage drivers in the LA/Long Beach area and specialized hazmat haulers in the Central Valley can earn $65,000-$80,000.

How does California AB5 affect trucking company benefits costs?

AB5 requires most truck drivers in California to be classified as W-2 employees under the ABC test, which means carriers must provide workers' compensation, unemployment insurance, payroll taxes, paid sick leave, and typically health insurance to compete for drivers. This increases per-driver costs by $8,000-$15,000 annually compared to an independent contractor model, but also provides more control over driver quality and retention.

What are workers' compensation rates for trucking companies in California?

California trucking WC rates range from $10 to $21 per $100 of payroll, with a typical rate around $14.90. The WCIRB publishes advisory pure premium rates that most insurers follow closely. California's medical fee schedule and litigious environment contribute to higher-than-average WC costs. Strong safety programs and Return-to-Work initiatives can reduce experience modifications and lower premiums.

What is the driver turnover rate for California trucking companies?

California trucking turnover varies significantly by segment. Large OTR carriers see 80-90%+ turnover nationally. California's local and regional carriers experience 40-55% turnover, partly because AB5-driven W-2 employment provides more stability. Port drayage operations in LA/Long Beach see higher churn (60-70%) due to the demanding nature of port operations and wait times.

How much do California trucking companies spend on health insurance?

The average employer share of single-coverage health insurance in California is $8,950 per year. Kaiser Permanente's strong market presence provides a competitive HMO option that often runs 15-20% below PPO plans. Covered California's small-group marketplace (1-100 employees) applies community rating, so trucking companies pay the same rates as lower-risk industries.

What emissions regulations affect California trucking companies?

California's CARB (California Air Resources Board) enforces strict emissions standards including the Advanced Clean Trucks rule requiring manufacturers to sell increasing percentages of zero-emission trucks, the Truck and Bus Regulation requiring DPF-equipped engines, and SmogCheck requirements for commercial vehicles. CARB compliance costs affect fleet capital expenditure planning and indirectly influence benefits budgets as carriers balance equipment and people investments.

)} {/* Methodology & Sources (collapsible) */} {s2Ok && (
{op.methodology && (

Data Sources

Benefits Costs: KFF Employer Health Benefits Survey 2024, NADP Dental Benefits Report, VSP/EyeMed Vision Benchmarks. Turnover & Retention: SHRM Human Capital Benchmarking Report, Work Institute Retention Report, BLS Job Openings and Labor Turnover Survey (JOLTS). Compliance & Risk: Hiscox EPL Study, EEOC Charge Statistics, DOL Wage & Hour Division enforcement data, ICE Worksite Enforcement, OSHA penalty adjustments. Satisfaction & Engagement: MetLife Annual Employee Benefits Study, Willis Towers Watson Benefits Research, Gallup Employee Engagement Survey. PEO Data: NAPEO Industry Statistics, Pepperdine Private Capital Markets Project.

Key Assumptions

Turnover reduction from improved benefits: 10-25% (ideal), 20-30% (PEO), based on SHRM and Work Institute research. Satisfaction scoring follows MetLife/Willis Towers Watson tiered benchmarks (health only → core 7 → comprehensive). Replacement cost percentages sourced from SHRM, Center for American Progress, and Work Institute by role level. Benefit cost ranges represent 90% confidence intervals from cited industry surveys and do not reflect specific carrier quotes. All values are annualized estimates.

Important Limitations

This tool provides estimates based on industry benchmarks and published research. Actual costs and savings depend on plan design, carrier selection, geographic factors, workforce demographics, contribution strategy, participation rates, and regulatory requirements. Benefits cost ranges assume typical employer contribution levels; actual quotes will vary based on group size, claims history, and underwriting. Voluntary benefits show $0 employer cost but may have implicit costs (admin time, enrollment support). Small groups (under 50) are subject to ACA small group market rules; large groups (50+) have different underwriting and compliance obligations. This calculator is educational — consult with a licensed benefits advisor for plan-specific projections and carrier quotes.

Participation & Contribution Rules

Group health coverage: Most carriers require 75% eligible employee participation and 50%+ employer contribution for employee-only coverage. Some states have higher minimums (e.g., Hawaii 50% mandate, some carriers require 75% contribution). Voluntary lines: Typically 10-25% participation minimums, no employer contribution required. Under 2 enrolled: Many carriers will not issue group coverage with fewer than 2 enrolled employees. Section 125 / Cafeteria Plan: Pre-tax employee contributions require a Section 125 plan document — PEOs typically include this.

)}
)} {/* Footer */}
BENEFITRA
© {new Date().getFullYear()} Benefitra • Benefits ROI Calculator for California Trucking Companies
Estimates based on industry data from KFF, SHRM, BLS, MetLife, Willis Towers Watson, Work Institute, and EEOC.
Consult with a licensed benefits advisor for plan-specific projections.
); } ReactDOM.render(React.createElement(App), document.getElementById('root'));