Use real figures with confidence. This calculator doesn’t store, track, or share your data - results are calculated instantly and visible only to you.

Analyzing Project Leaks...

Benchmarking AU/NZ industry standard rates

Project Profitability Diagnostic

Calculate the true economic drain of stalled or delayed AV projects.

1. Financial Liquidity
2. Resource Drag (Daily Presence)
Technicians
Commissioners
Programmers
3. Management & Overheads
Total Economic Drain $0

Direct margin loss since project deadline.

💰 Final Handover Gap i $0 The unpaid portion of the contract value that is currently 'stuck' behind minor tasks or bugs.
💸 Loaded Labor Leakage i $0 Daily cost of staff on-site including wages, 28% on-costs, and travel/fuel overheads.
📈 Opportunity Cost i $0 The lost revenue potential of your team. While fixing a 'stuck' project, they aren't generating new billable revenue.
🏦 Liquidity & PM Drain i $0 The cost of capital for unpaid values combined with PMs spending non-billable hours 'firefighting'.

Practical Completion is a fixed-price call away.

Zapperr AV specializes in rescuing stalled projects. We turn your stuck WIP back into banked profit.

Speak with an Engineer Now
`); printWindow.document.close(); }function triggerDiagnostic() { const loader = document.getElementById('z-loader'); const results = document.getElementById('z-results'); // Clear NaN/Empty const inputs = document.querySelectorAll('#zapperr-calc-wrapper input[type="number"]'); inputs.forEach(input => { if(input.value === "" || isNaN(input.value)) input.value = 0; });loader.style.display = 'flex'; results.style.display = 'none';const data = calculateData();// Webhook logic if (WEBHOOK_URL) { fetch(WEBHOOK_URL, { method: 'POST', mode: 'no-cors', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }).catch(e => console.log("Webhook skip")); }setTimeout(() => { loader.style.display = 'none'; displayResults(data); results.style.display = 'block'; results.scrollIntoView({ behavior: 'smooth', block: 'start' }); }, 1500); }function calculateData() { const f = (id) => parseFloat(document.getElementById(id).value) || 0; const v_total = f('v_total'); const v_percent = f('v_percent'); const v_days = f('v_days'); const v_wacc = f('v_wacc') / 100; const v_oncosts = f('v_oncosts') / 100; const v_travel = f('v_travel'); const v_pm_hrs = f('v_pm_hrs');const roles = [ { q: f('q_tech'), r: f('r_tech'), opp: 1100 }, { q: f('q_comm'), r: f('r_comm'), opp: 1400 }, { q: f('q_prog'), r: f('r_prog'), opp: 1800 } ];const stuckCash = v_total * (1 - (v_percent / 100));let laborLeak = 0; let oppCost = 0; roles.forEach(role => { if(role.q > 0) { const dailyLoaded = (role.r * 8 * (1 + v_oncosts)) + v_travel; laborLeak += (dailyLoaded * role.q * v_days); oppCost += (role.opp * role.q * v_days); } });const interestLoss = (stuckCash * v_wacc / 365) * v_days; const pmCost = (v_pm_hrs / 7 * v_days) * 140; const adminDrain = interestLoss + pmCost;const totalDrain = laborLeak + oppCost + adminDrain;return { projectName: document.getElementById('v_projname').value || "Unnamed Project", totalDrain, stuckCash, laborLeak, oppCost, adminDrain, timestamp: new Date().toLocaleString() }; }function displayResults(data) { document.getElementById('res_total').innerText = '$' + Math.round(data.totalDrain).toLocaleString(); document.getElementById('res_stuck').innerText = '$' + Math.round(data.stuckCash).toLocaleString(); document.getElementById('res_labor').innerText = '$' + Math.round(data.laborLeak).toLocaleString(); document.getElementById('res_opp').innerText = '$' + Math.round(data.oppCost).toLocaleString(); document.getElementById('res_admin').innerText = '$' + Math.round(data.adminDrain).toLocaleString(); }
Scroll to Top