Give Your Investigators Their Time Back
Every hour on a report is an hour off a case. Use our AI ROI calculator to see how much investigative capacity your department could get back with Rev.
Every hour on a report is an hour off a case. Use our AI ROI calculator to see how much investigative capacity your department could get back with Rev.
tag" section (or in a Custom Embed element at the bottom of the page). ============================================================ */ (function () { // ─── Assumptions (from spreadsheet Tab 2) ────────────────────── var AVG_REPORT_TIME_BEFORE = 2; // hours per report, before Rev var AVG_REPORT_TIME_AFTER = 0.5; // hours per report, after Rev var BENEFITS_OVERHEAD_MULTIPLIER = 1.3; var SUBSCRIPTION_COST_PER_USER_PER_YR = 1440; // USD / user / year var WORK_HOURS_PER_YEAR = 2080; // ─── Input elements ──────────────────────────────────────────── var inputReports = document.getElementById('Case-Reports'); var inputInvest = document.getElementById('Number-of-Investigators'); var inputSalary = document.getElementById('Average-Annual-Salary'); // ─── Output elements (targeted via custom calculate attribute) ── var outHours = document.querySelector('[calculate="hours-per-year"]'); var outValue = document.querySelector('[calculate="recovered-capacity-value"]'); var outBreakEven = document.querySelector('[calculate="breaks-even-months"]'); // ─── Core calculation ─────────────────────────────────────────── function runCalc() { var reports = parseFloat(inputReports.value) || 0; var investors = parseFloat(inputInvest.value) || 0; var salary = parseFloat(inputSalary.value) || 0; // annual USD // 1. Investigative hours recovered per year // = reports/person/month × investigators × time-saved-per-report × 12 months var timeSaved = AVG_REPORT_TIME_BEFORE - AVG_REPORT_TIME_AFTER; // 1.5 hrs var hoursRecovered = reports * investors * timeSaved * 12; // 2. Annual value of recovered investigative capacity // = hours recovered × hourly-rate × benefits multiplier var hourlyRate = salary / WORK_HOURS_PER_YEAR; var annualValue = hoursRecovered * hourlyRate * BENEFITS_OVERHEAD_MULTIPLIER; // 3. Break-even in months // = (subscription cost for all users / annual value) × 12 var totalSubCost = SUBSCRIPTION_COST_PER_USER_PER_YR * investors; var breakEven = (annualValue > 0) ? (totalSubCost / annualValue) * 12 : 0; // ─── Update the DOM ───────────────────────────────────────── outHours.textContent = fmt(hoursRecovered, 0); outValue.textContent = '$' + fmt(annualValue, 2); outBreakEven.textContent = fmt(breakEven, 2); } // ─── Number formatter ─────────────────────────────────────────── function fmt(n, decimals) { if (!isFinite(n) || isNaN(n) || n === 0) { return decimals > 0 ? (0).toFixed(decimals) : '0'; } return n.toLocaleString('en-US', { minimumFractionDigits: decimals, maximumFractionDigits: decimals }); } // ─── Wire up listeners ───────────────────────────────────────── [inputReports, inputInvest, inputSalary].forEach(function (el) { el.addEventListener('input', runCalc); el.addEventListener('change', runCalc); // catches paste & autofill }); // Run once on load so outputs start clean runCalc(); })();