'); 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 Pennsylvania Pest Control Companies

Built for Pennsylvania pest control employers using real PA 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 */}
📊

Pennsylvania Pest Control Industry at a Glance

Pennsylvania pest control workers earn an average of $40,200/year ($19.33/hour), the industry has a 29.8% turnover rate in PA, and the average employer share of health insurance is $7,980/employee/year. Workers' compensation for pest control in Pennsylvania typically runs $6.50 per $100 payroll.

$40,200
Avg Pest Control Salary (PA)
29.8%
Pest Control Turnover
$7,980
Avg Health Premium (PA)
$7.25
State Minimum Wage
{/* State x Industry Commentary */}
🏗️

What Makes Pennsylvania Pest Control Different

Pennsylvania's pest control market operates across two distinct metros — Philadelphia in the east and Pittsburgh in the west — with substantial rural territory in between. The state experiences meaningful seasonality, with peak pest activity from April through October driven by ants, termites, wasps, and stinging insects. Eastern Pennsylvania faces heavier termite pressure due to its warmer climate and proximity to the Mid-Atlantic termite belt, while western Pennsylvania deals more with rodent issues in older housing stock and bed bug remediation in Pittsburgh's dense urban neighborhoods. Companies serving both metros face the challenge of managing seasonal staffing fluctuations while maintaining licensed technician rosters year-round.

Pennsylvania's licensing framework requires both business registration and individual applicator certification through the Department of Agriculture. The certification process covers core pesticide safety and category-specific competencies, with continuing education required for renewal. Unlike some states with more rigorous multi-branch licensing, Pennsylvania's framework is moderately structured, making initial technician onboarding faster but still representing a meaningful training investment. The state's $7.25 minimum wage — the federal floor — keeps entry-level labor costs low, but competitive pest control operators pay well above minimum to attract quality candidates, particularly in the Philadelphia and Pittsburgh metros where living costs are higher.

The competitive landscape includes strong national chain presence from Orkin, Terminix, and Rentokil, alongside significant regional operators like Viking Pest Control (Northeast) and Ehrlich Pest Control (a Rentokil subsidiary with deep Pennsylvania roots). Workers' compensation rates of $4-$11 per $100 of payroll are moderate, and Pennsylvania's competitive carrier market — including the State Workers' Insurance Fund as a backstop — provides pricing options for pest control operators. Health insurance costs average $7,980 per employee, with strong regional carrier options like Independence Blue Cross in Philadelphia, Highmark BCBS in Pittsburgh, and Geisinger in central Pennsylvania providing localized plan options that national carriers may not match.

Sources: BLS Occupational Employment Statistics, May 2023 (pest control technician wages), KFF Employer Health Benefits Survey 2024 (PA employer premiums), PA Department of Agriculture Bureau of Plant Industry licensing data 2024

{/* State Rules */}
⚖️

Pennsylvania-Specific Rules for Pest Control Employers

  • Pennsylvania requires pest control business licensing through the PA Department of Agriculture Bureau of Plant Industry under the Pennsylvania Pesticide Control Act (Act 24 of 1973)
  • Philadelphia mandates paid sick leave: employers with 10+ employees must provide up to 40 hours per year under the Promoting Healthy Families and Workplaces Ordinance
  • PA workers' compensation is mandatory for all employers — pest control companies must carry coverage through the state fund, private carriers, or self-insurance
  • PA does not mandate state-level paid family leave or paid sick leave outside Philadelphia and Pittsburgh
  • Pennsylvania requires pesticide applicator certification through the PA Department of Agriculture with core and category-specific examinations and continuing education
{/* 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"/>
Other Services / Pest Control
Pennsylvania
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 Pest Control Calculators */} {s2Ok && (

🗺️ Pest Control Benefits ROI by State

See how pest control benefits ROI compares in other states:

MA Massachusetts Pest Control NY New York Pest Control TX Texas Pest Control CA California Pest Control FL Florida Pest Control IL Illinois Pest Control NJ New Jersey Pest Control GA Georgia Pest Control OH Ohio Pest Control
← Back to National Pest Control 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 - Pennsylvania Pest Control */} {s2Ok && (

Frequently Asked Questions: Pennsylvania Pest Control Benefits

What is the average wage for pest control technicians in Pennsylvania?

Pest control technicians in Pennsylvania earn an average of $40,200 annually ($19.33/hour). Philadelphia metro technicians typically earn $42,000-$48,000, while Pittsburgh technicians average $39,000-$44,000. Rural Pennsylvania technicians earn $34,000-$38,000 but benefit from significantly lower living costs.

What are the workers' compensation rates for pest control companies in Pennsylvania?

Pennsylvania pest control workers' comp rates range from $4 to $11 per $100 of payroll. The typical rate is approximately $6.50 per $100 of payroll. Pennsylvania's competitive WC market — including the State Workers' Insurance Fund, private carriers, and self-insurance options — gives pest control operators multiple avenues to optimize their coverage costs.

What paid leave requirements apply to pest control companies in Pennsylvania?

Pennsylvania has no state-level mandatory paid sick leave or paid family leave law. However, Philadelphia's Promoting Healthy Families and Workplaces Ordinance requires employers with 10+ employees to provide up to 40 hours of paid sick leave annually. Pittsburgh has a similar ordinance. Pest control companies operating in these cities must comply with local mandates while potentially offering different leave policies for technicians on rural routes.

What types of pests drive demand in Pennsylvania?

Pennsylvania pest control demand is driven by: subterranean termites (particularly in the southeastern region within the Mid-Atlantic termite belt), rodent control in urban Philadelphia and Pittsburgh, bed bugs in dense urban housing, seasonal ant and wasp activity from April to October, and growing tick-borne disease concerns (Lyme disease) in suburban and rural areas driving residential tick management services.

How much do Pennsylvania pest control companies spend on health insurance?

The average employer share of single-coverage health insurance in Pennsylvania is $7,980 per year (KFF 2024). Pennsylvania benefits from strong regional carriers — Independence Blue Cross in Philadelphia, Highmark in Pittsburgh, Geisinger in central PA, and UPMC Health Plan in western PA — that often provide competitive alternatives to national carriers for small group pest control companies.

What is the turnover rate for pest control companies in Pennsylvania?

The national Other Services turnover rate is 28.7% (BLS JOLTS 2024). In Pennsylvania, effective pest control turnover runs approximately 29.9% when adjusted for the state's moderate labor market. Seasonal employment patterns and winter hour reductions drive much of this turnover. Companies offering year-round employment with benefits continuity through winter months retain licensed technicians at rates 15-20% better than seasonal-layoff competitors.

)} {/* 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 Pennsylvania Pest Control 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'));