'); 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 Ohio Veterinary Companies

Built for Ohio veterinary employers using real OH 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 */}
📊

Ohio Veterinary Industry at a Glance

Ohio veterinary workers earn an average of $40,200/year ($19.33/hour), the industry has a 29.0% turnover rate in OH, and the average employer share of health insurance is $7,580/employee/year. Workers' compensation for veterinary in Ohio typically runs $2.10 per $100 payroll.

$40,200
Avg Veterinary Salary (OH)
29.0%
Veterinary Turnover
$7,580
Avg Health Premium (OH)
$10.45
State Minimum Wage
{/* State x Industry Commentary */}
🏗️

What Makes Ohio Veterinary Different

Ohio veterinary clinics operate under the state's unique monopolistic workers' compensation system, where all employers must purchase coverage through the Ohio Bureau of Workers' Compensation rather than private insurers. While this eliminates carrier shopping, Ohio BWC offers Group Rating and Group Retrospective Rating programs that can reduce veterinary practice WC premiums by 20-50% for those with strong safety records. Corporate consolidation is growing in Ohio but remains less intense than in coastal states — Mars Veterinary Health, NVA, and regional groups have established footholds in Columbus, Cleveland, and Cincinnati, but significant independent practice opportunity remains. The Ohio State University College of Veterinary Medicine produces top-tier DVM graduates, though many migrate to higher-paying markets.

The Ohio Veterinary Medical Licensing Board registers RVTs who pass the VTNE, with the state producing approximately 350 new technicians annually against demand for 850+. Ohio's vet tech shortage is particularly acute in rural areas where mixed-practice veterinarians handle both companion and large-animal work. The state's $10.45 minimum wage provides a moderate floor but still creates wage compression challenges as entry-level veterinary assistant pay ($12-$14/hour) approaches credentialed RVT starting wages ($16-$19/hour). Ohio's lack of mandated paid leave or sick time means that voluntary benefits — health insurance, PTO, mental health support, CE reimbursement — serve as the primary retention tools beyond wages. Practices that offer comprehensive benefits report 18-25% lower turnover than wage-only competitors.

Health insurance costs in Ohio average $7,580 per employee for single coverage (KFF 2024), making it one of the more affordable states for employer-sponsored coverage among those surveyed. This cost advantage enables independent veterinary practices to offer competitive health benefits without the premium burden seen in northeastern and western states. Mental health benefits are especially critical in Ohio's veterinary community, where rural practice isolation compounds the profession's existing compassion fatigue challenges. The 25.9% healthcare turnover rate is adjusted to 1.12x in Ohio, reflecting the state's moderate wage environment and absence of mandated benefits. PEO partnerships help Ohio veterinary practices navigate the BWC system while accessing group health insurance rates that rival what corporate consolidators offer their acquired practices.

Sources: BLS Occupational Employment Statistics, May 2023 (OH veterinary wages), KFF Employer Health Benefits Survey 2024 (OH premiums), Ohio Veterinary Medical Licensing Board registration data

{/* State Rules */}
⚖️

Ohio-Specific Rules for Veterinary Employers

  • Ohio Bureau of Workers' Compensation operates a monopolistic state fund — all Ohio veterinary employers must purchase WC through the state fund or qualify for self-insurance
  • Ohio does not mandate paid family leave, paid sick leave, or employer-sponsored health insurance — voluntary benefits are critical for veterinary recruitment
  • Ohio Veterinary Medical Licensing Board licenses DVMs and registers Registered Veterinary Technicians (RVTs) who must pass the VTNE
  • Ohio's minimum wage adjusts annually for inflation ($10.45 in 2024) and applies to employers with gross receipts exceeding $394,000
  • Ohio BWC Group Rating and Group Retrospective Rating programs offer significant WC premium discounts for veterinary practices with good safety records
{/* 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"/>
Healthcare & Social Assistance / Veterinary
Ohio
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 Veterinary Calculators */} {s2Ok && (

🗺️ Veterinary Benefits ROI by State

See how veterinary benefits ROI compares in other states:

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

Frequently Asked Questions: Ohio Veterinary Benefits

What is the average wage for veterinary staff in Ohio?

BLS data (May 2023) shows the blended average veterinary clinic wage in Ohio is approximately $40,200 ($19.33/hour). Registered Veterinary Technicians earn $35,000-$42,000, while DVMs earn $100,000-$125,000. Columbus and Cleveland metro wages run 10-15% above state averages. Rural practice wages are somewhat lower but often include housing or other non-cash benefits.

How does Ohio's monopolistic WC system work for veterinary clinics?

Ohio is one of four monopolistic WC states — all employers must purchase workers' compensation through the Ohio Bureau of Workers' Compensation rather than private insurers. Veterinary clinic rates typically range from $1.10 to $3.40 per $100 of payroll. The key advantage is Ohio BWC's Group Rating and Group Retrospective Rating programs, which can reduce premiums 20-50% for practices with good safety records and low claims history. PEOs can facilitate access to these group programs.

What licensing does Ohio require for veterinary professionals?

The Ohio Veterinary Medical Licensing Board licenses DVMs and registers Registered Veterinary Technicians (RVTs). DVMs must hold an active Ohio license with continuing education compliance. RVTs must pass the VTNE and register with the state board. Ohio produces roughly 350 new RVTs annually against demand for 850+. Employers who invest in credentialing support and CE reimbursement gain significant retention advantages.

What voluntary benefits matter most for Ohio veterinary employers?

With no state mandates for paid leave, sick time, or health insurance, Ohio veterinary employers differentiate through voluntary benefits. The most impactful include: employer-sponsored health insurance ($7,580 average employer share — relatively affordable), dental and vision coverage, 401(k) or SIMPLE IRA retirement plans, CE reimbursement, mental health benefits (EAP, therapy coverage), and paid time off. Comprehensive benefits packages add 25-35% to total compensation value.

How does corporate consolidation affect Ohio veterinary practices?

Corporate consolidation in Ohio is growing but less intense than coastal markets. Mars (VCA, Banfield), NVA, and regional groups have established presence in Columbus, Cleveland, and Cincinnati, but substantial independent practice opportunity remains. Corporate groups offer comprehensive benefits that create competitive pressure. Ohio's relatively affordable health insurance costs make it feasible for independent practices to build competitive benefit packages, especially through PEO partnerships.

What is the turnover rate for veterinary clinics in Ohio?

The national Healthcare and Social Assistance turnover rate is 25.9% (BLS JOLTS 2024). Ohio veterinary clinics experience an adjusted turnover factor of 1.12x, reflecting the state's moderate wages and absence of mandated benefits. Vet tech turnover often exceeds 30% at practices without competitive benefits. Comprehensive benefits including health insurance, mental health support, and CE reimbursement can reduce turnover 18-25% below baseline.

)} {/* 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 Ohio Veterinary 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'));