🛡️ Pakistan's #1 Certified Pest Management Partner |pestorbit.com |📞 +92 343 879 7046 |help@pestorbit.com |
🔬 ENTERPRISE PEST RISK INTELLIGENCE SYSTEM

Know Your Pest Risk.
By Industry. By Zone. By Score.

Pakistan's only industry-specific pest risk calculator. Select your sector — receive a fully scored, section-by-section assessment covering every operational zone, with a documented PDF/Word report and a tailored IPM service plan.

15
Industries
10+
Zones/Sections
100
Point Scale
HSE
Compliant
FREE
Assessment
Verified: ✅ ISO-Certified 🔒 Confidential 🏥 HACCP-Aligned ⚡ Instant Results 📊 PDF & Word Export ⏭️ Skip N/A Sections
HOW IT WORKS
1
Register Free
30-second profile. Fully confidential.
2
Pick Industry
15 sectors — tailors your section list.
3
Assess by Zone
Answer each section. Skip non-applicable with a reason.
4
Adaptive Score
Only answered sections score. Skipped N/A zones don't penalise.
5
Full Report
PDF + Word with scores, gaps, IPM plan, and CTA.
📋
Access My Reports
Retrieve completed assessments from this device or by email from any device
FREE
By Email — any device
Enter your registered email to retrieve reports stored on our server — works on any phone or computer.
💾 This Device — browser saved

🏭 Step 2 — Select Your Industry

Your industry tailors the exact assessment sections and IPM service schedule for your facility

🏭 No industry selected
⚠️

Common Pest Threats in Pakistan

German & American Cockroaches — primary food contamination vectors in kitchens and processing lines
Norway & Roof Rats — gnawing, electrical fire risk, Leptospirosis, Salmonella transmission
Subterranean Termites — silent structural destruction, billions in annual damage losses
Stored Product Insects — grain moths, flour beetles, weevils destroying inventory
Dengue Aedes Mosquitoes — active breeding in standing water; public health emergency
Pharaoh Ants — healthcare contamination, sterile field breaches in hospitals
📋

Regulatory & Compliance Context

PSQCA & WHO pest thresholds mandatory for all food-grade environments
HACCP PRPs require fully documented pest control records at all times
PFA & Sindh FDA conduct unannounced inspections with immediate closure authority
Healthcare: zero-pest tolerance under DRAP & infection control standards
Export-oriented facilities require BRC/IFS/SQF certified pest documentation
GxP-regulated sites: pest activity is a GDP/GMP deviation requiring CAPA
0
/100

Industry Assessment

📊

Section-by-Section Risk Breakdown

ZONE SCORES
📊

Score Tier Definitions & Classification

YOUR TIER HIGHLIGHTED
Low Risk
0–35
Defenses functioning. Maintain and monitor.
⚠️
Moderate
36–60
Vulnerabilities exist. 30-day intervention needed.
🔴
High Risk
61–80
Recurring infestations likely. Urgent IPM required.
🚨
Critical
81–100
Systemic failure. Emergency intervention mandatory.
📋

Executive Summary

ASSESSMENT

🐛

Primary Pest Threats

SPECIES RISK
    ⚖️

    Regulatory & Compliance Implications

    HSE / HACCP
      💡

      Industry-Specific Suggestions & Best Practices

      SMART RECOMMENDATIONS

      Prioritised Action Plan — HSE-Compliant

      STEP-BY-STEP
        🔬

        Diagnostic Breakdown — All Assessed Factors

        FACTOR ANALYSIS
        SectionRisk FactorYour AnswerAssessment NoteLevelScore
        TOTAL NORMALISED RISK SCORE
        TAKE ACTION NOW

        Connect with PestOrbit Specialists

        Our certified IPM professionals are ready to help eliminate your risk.

        📄

        Export & Save Your Risk Assessment Report

        For compliance documentation, HSE files, or board presentations. Report auto-saved to this device.

        ℹ️ This tool is an indicative screening instrument based on self-reported parameters. It is not a substitute for a professional on-site inspection. © PestOrbit — pestorbit.com | help@pestorbit.com | +92 343 879 7046
        `;const blob=new Blob(['\ufeff',html],{type:'application/msword'}); const a=document.createElement('a'); a.href=URL.createObjectURL(blob); a.download=`PestOrbit_${(selectedIndustry||'').toUpperCase()}_Risk_${score}pts.doc`; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(a.href); }// ============================================= // PRINT // ============================================= function printReport(){ const ind = INDUSTRIES.find(i=>i.id===selectedIndustry)||{name:'Assessment',icon:'🏭'}; const profile = RISK_PROFILES[finalResults.tierKey||'low']; const score = finalResults.finalScore||0; const tierKey = finalResults.tierKey||'low'; const skipLabels = {not_applicable:'Not applicable',no_access:'Not accessible',under_renovation:'Under renovation',will_complete_later:'Later assessment',other:'Other'};const TIER_COLORS = { low: {bg:'#1a7a3e', light:'#d4edda', text:'#1a7a3e'}, moderate: {bg:'#b07a00', light:'#fff3cd', text:'#b07a00'}, high: {bg:'#c85000', light:'#fde8d8', text:'#c85000'}, critical: {bg:'#b91c1c', light:'#fde8e8', text:'#b91c1c'}, }; const tc = TIER_COLORS[tierKey] || TIER_COLORS.low;function lvlColor(lvl){ return lvl==='Critical'?'#b91c1c':lvl==='High'?'#c85000':lvl==='Moderate'?'#b07a00':lvl==='Low'?'#1a7a3e':'#6b7280'; } function lvlBg(lvl){ return lvl==='Critical'?'#fde8e8':lvl==='High'?'#fde8d8':lvl==='Moderate'?'#fff3cd':lvl==='Low'?'#d4edda':'#f3f4f6'; }const forecast = _getPestForecastKey(); const guideRows = profile.guidelines.map((g,i)=>` ${i+1} ${g.title}
        ${g.desc}`).join('');const secRows = (finalResults.sectionScores||[]).map((ss,i)=>`${ss.sec.icon||''} ${ss.sec.name} ${ss.status==='skipped' ? `${skipLabels[ss.skipReason]||'Skipped'}` : `${ss.pct}%`}`).join('');const diagRows = (finalResults.diagRows||[]).map(row=>`${row.sec}${row.q.label} ${row.skipped ? (skipLabels[row.skipReason]||'Skipped') : row.opt.text} ${row.lvl} ${row.skipped ? '—' : `${row.opt.val}/${row.q.max}`}`).join('');const forecastThreats = (forecast.threats||[]).map(t=>` ${t}`).join('');const forecastActions = (forecast.actions||[]).map((a,i)=>` ${i+1}.${a}`).join('');const gapsRows = COMMON_GAPS_CHECKLIST.map((g,i)=>` ${g.icon}${g.item}`).join('');// Build full report HTML — standalone, no app chrome const reportHTML = `
        🛡 PestOrbit \u2014 Industry Pest Risk Assessment Report
        ${ind.name.replace(/\n/,' ')}  |  ${userData.city}  |  ${new Date().toLocaleDateString('en-GB',{day:'2-digit',month:'long',year:'numeric'})}  |  pestorbit.com
        Client Name
        ${userData.firstName} ${userData.lastName}
        Organisation
        ${userData.org}
        Role
        ${userData.role}
        City & Facility Size
        ${userData.city}  |  ${userData.fsize}
        Email
        ${userData.email}
        Phone
        ${userData.phone}
        ${score}
        ${tierKey.toUpperCase()} RISK  \u2014  ${score}/100
        ${ind.name.replace(/\n/,' ')}  |  Session: ${userData.sessionId}

        Zone-by-Zone Score Breakdown

        ${secRows}
        Section / ZoneScore

        Diagnostic Factor Breakdown

        ${diagRows}
        ZoneFactorAnswerLevelScore
        TOTAL NORMALISED RISK SCORE${score}/100

        Recommended Action Plan

        ${guideRows}

        Seasonal Pest Forecast \u2014 ${forecast.label}

        Active Pest Threats
        ${forecastThreats}
        Seasonal Actions Required
        ${forecastActions}

        Physical Gap & Exclusion Checklist

        ${gapsRows}
        PestOrbit Pakistan \u2014 Free On-Site Risk Inspection
        Our certified IPM professionals provide a FREE on-site pest risk inspection and written report for all facility types across Pakistan. No obligation. Fully confidential.
        +92 343 879 7046  |  help@pestorbit.com  |  pestorbit.com
        WhatsApp: wa.me/923438797046  |  Book: pestorbit.com/contact-us
        PestOrbit | pestorbit.com | help@pestorbit.com | +92 343 879 7046 | Session: ${userData.sessionId}
        This assessment is an indicative screening tool based on self-reported parameters. Not a substitute for a professional on-site inspection. © PestOrbit ${new Date().getFullYear()}.
        `;// Open dedicated print window — avoids all blank-page issues with printing live app const pw = window.open('', '_blank', 'width=900,height=700'); if (!pw) { alert('Popup blocked. Please allow popups for this site and try again.'); return; } pw.document.open(); pw.document.write(reportHTML); pw.document.close(); // Auto-print after render — use onload on the new window's document pw.addEventListener('load', function(){ pw.focus(); pw.print(); }); }// ============================================= // REPORT SAVED NOTICE — toast after completion // ============================================= function _showReportSavedNotice(){ const existing = document.getElementById('report-saved-toast'); if(existing) return; const toast = document.createElement('div'); toast.id = 'report-saved-toast'; toast.style.cssText = ` position:fixed;bottom:20px;right:20px;z-index:9998; background:#004b87;color:#fff; border-radius:12px;padding:14px 18px; box-shadow:0 8px 32px rgba(0,75,135,.35); max-width:320px;font-family:'Segoe UI',sans-serif; animation:toastIn .4s cubic-bezier(.34,1.56,.64,1); `; toast.innerHTML = `
        💾
        Report Saved to This Device
        Your assessment report is stored on this device. Use My Reports to access it anytime.
        `; document.body.appendChild(toast); // Auto-dismiss after 12 seconds setTimeout(()=>{ if(toast.parentNode) toast.remove(); }, 12000); }// ============================================= // REPORT RETRIEVAL DASHBOARD // ============================================= function openReportDashboard(defaultTab){ const sessions = _loadAllSessions(); const modal = document.getElementById('report-dash-modal'); const body = document.getElementById('report-dash-body'); if(!modal||!body) return;const activeTab = defaultTab || 'local'; const TIER_COLORS = { low: {bg:'#1a7a3e',light:'#d4edda',label:'Low Risk'}, moderate: {bg:'#b07a00',light:'#fff3cd',label:'Moderate'}, high: {bg:'#c85000',light:'#fde8d8',label:'High Risk'}, critical: {bg:'#b91c1c',light:'#fde8e8',label:'Critical'}, };function buildSessionCard(s, canLoad){ const tc = TIER_COLORS[s.tier] || {bg:'#718096',light:'#f3f4f6',label:'Incomplete'}; const scored = s.completed || s.score; return `
        ${s.org}
        ${s.name} · ${s.city} · ${s.tsDisplay||s.ts?.slice(0,10)||'—'}
        ${scored ? `${tc.label}: ${s.score}/100` : `Incomplete`}
        Industry: ${s.industryName||'—'}  |  Session: ${s.sessionId}
        ${canLoad && scored ? `` : ''} ${canLoad ? `` : ''}
        `; }const localHtml = sessions.length ? sessions.slice().reverse().map(s=>buildSessionCard(s,!!_loadSession(s.sessionId))).join('') : `
        📋
        No saved reports on this device
        Complete an assessment to auto-save your report.
        `;body.innerHTML = `
        ${localHtml}
        ℹ️ Saved in your browser on this device. To access from any device, use the Retrieve by Email tab.
        Enter the exact email address you used during your assessment registration. Your reports will be retrieved from the PestOrbit server — accessible from any device, any browser.
        `; modal.classList.remove('hidden'); const savedToast = document.getElementById('report-saved-toast'); if(savedToast) savedToast.remove(); }// ============================================= // EMAIL RETRIEVAL — fetch from WP backend // ============================================= async function fetchReportsByEmail(){ const emailEl = document.getElementById('retrieve-email-input'); const errEl = document.getElementById('retrieve-error'); const loadEl = document.getElementById('retrieve-loading'); const resEl = document.getElementById('retrieve-results'); const cardsEl = document.getElementById('retrieve-cards'); const countEl = document.getElementById('retrieve-count-lbl');const email = emailEl?.value?.trim(); if(!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)){ if(errEl){ errEl.textContent='⚠️ Please enter a valid email address.'; errEl.style.display='block'; } return; } if(errEl) errEl.style.display='none'; if(loadEl) loadEl.style.display='block'; if(resEl) resEl.style.display='none';const TIER_COLORS = { low: {bg:'#1a7a3e',light:'#d4edda',label:'Low Risk'}, moderate: {bg:'#b07a00',light:'#fff3cd',label:'Moderate'}, high: {bg:'#c85000',light:'#fde8d8',label:'High Risk'}, critical: {bg:'#b91c1c',light:'#fde8e8',label:'Critical'}, };try { const url = BACKEND_RETRIEVE_URL + '?email=' + encodeURIComponent(email); const resp = await fetch(url, { method:'GET', headers:{'Content-Type':'application/json','X-PestOrbit-Request':'1'} });if(loadEl) loadEl.style.display='none';if(resp.status === 404){ if(errEl){ errEl.textContent='No reports found for this email address. Please check the email and try again.'; errEl.style.display='block'; } return; } if(!resp.ok){ if(errEl){ errEl.textContent='Server error ('+resp.status+'). Please try again in a moment.'; errEl.style.display='block'; } return; }const data = await resp.json(); const reports = data.reports || data || [];if(!reports.length){ if(errEl){ errEl.textContent='No completed assessments found for '+email+'. Ensure you used this exact email during registration.'; errEl.style.display='block'; } return; }if(countEl) countEl.textContent = reports.length+' report'+(reports.length>1?'s':'')+' found for '+email; if(cardsEl){ cardsEl.innerHTML = reports.map(r=>{ const tc = TIER_COLORS[r.tier] || {bg:'#718096',light:'#f3f4f6',label:'—'}; const dt = r.completed_at ? new Date(r.completed_at).toLocaleString('en-GB') : r.ts ? r.ts.slice(0,10) : '—'; return `
        ${r.org||r.organisation||'—'}
        ${r.name||r.first_name+' '+r.last_name||'—'} · ${r.city||'—'} · ${dt}
        ${tc.label}: ${r.score}/100
        Industry: ${r.industry_name||r.industry||'—'}  |  Session: ${r.session_id||r.sessionId||'—'}
        📧 Email Full Report →
        `; }).join(''); } if(resEl) resEl.style.display='block';} catch(err) { if(loadEl) loadEl.style.display='none'; if(errEl){ errEl.textContent='Unable to connect to the server. Check your internet connection and try again.'; errEl.style.display='block'; } } }function closeReportDashboard(){ const m = document.getElementById('report-dash-modal'); if(m) m.classList.add('hidden'); }function loadSavedSession(sessionId){ const full = _loadSession(sessionId); if(!full){ alert('Session data not found. It may have been cleared.'); return; } closeReportDashboard();// Restore state userData = full.userData; selectedIndustry = full.selectedIndustry; finalResults = full.finalResults;// Restore industry sections list so rendering works const secIds = INDUSTRY_SECTIONS[selectedIndustry] || []; industrySections = secIds.map(sid=>SECTION_POOL[sid]).filter(Boolean); sectionStates = full.sectionStates;// Update user strip const initials = (userData.firstName[0]+userData.lastName[0]).toUpperCase(); document.getElementById('us-avatar').textContent = initials; document.getElementById('us-name').textContent = userData.firstName+' '+userData.lastName; document.getElementById('us-org').textContent = userData.org+' · '+userData.email; document.getElementById('us-role').textContent = userData.role; document.getElementById('us-city').textContent = userData.city; const ind = INDUSTRIES.find(i=>i.id===selectedIndustry)||{name:''}; document.getElementById('us-industry-tag').textContent = ind.name.replace(/\n/,' '); document.getElementById('user-strip').style.display = 'flex';// Hide registration modal if showing document.getElementById('reg-modal').classList.add('hidden');// Re-render results _renderResults( finalResults.finalScore, finalResults.tierKey, finalResults.sectionScores, finalResults.diagRows );// Hide assessment engine, show results document.getElementById('assessment-engine').style.display = 'none'; document.getElementById('ind-selector').style.display = 'none'; document.getElementById('results-section').style.display = 'block'; setTimeout(()=>document.getElementById('results-section').scrollIntoView({behavior:'smooth',block:'start'}),80); }function deleteSession(sessionId, btn){ if(!confirm('Delete this saved report? This cannot be undone.')) return; try{ const sessions = _loadAllSessions().filter(s=>s.sessionId!==sessionId); localStorage.setItem(SESSIONS_KEY, JSON.stringify(sessions)); localStorage.removeItem('po_full_'+sessionId); localStorage.removeItem('po_lead_'+sessionId); localStorage.removeItem('po_score_'+sessionId); }catch(e){} // Refresh dashboard openReportDashboard(); }// ============================================= // LANDING PAGE — RETURNING USER DETECTION // ============================================= function scrollToNewAssessment() { const el = document.getElementById('ind-selector'); if (el) el.scrollIntoView({ behavior: 'smooth', block: 'start' }); }function _initReturningUserPanel() { const sessions = _loadAllSessions(); const completed = sessions.filter(s => s.completed || s.score); const panel = document.getElementById('returning-user-panel'); const myRepBtn = document.getElementById('my-reports-btn'); const TC = { low:'#1a7a3e', moderate:'#b07a00', high:'#c85000', critical:'#b91c1c' };// ── Returning-user welcome banner (top blue panel) ────────── if (completed.length > 0 && panel) { panel.style.display = 'block';// populate the compact preview inside the blue banner const bannerPreview = document.getElementById('returning-sessions-preview'); if (bannerPreview) { bannerPreview.innerHTML = completed.slice(-3).reverse().map(s => { const col = TC[s.tier] || '#718096'; const canLoad = !!_loadSession(s.sessionId); return `
        ${s.org||'Assessment'}
        ${s.industryName||'—'} · ${s.tsDisplay||s.ts?.slice(0,10)||'—'}
        ${(s.tier||'').toUpperCase()}: ${s.score}/100 ${canLoad ? `` : ''}
        `; }).join(''); } } else if (panel) { panel.style.display = 'none'; }// ── Device reports column inside "Access My Reports" card ─── const devicePreview = document.getElementById('device-reports-preview'); if (devicePreview) { if (completed.length > 0) { devicePreview.innerHTML = completed.slice(-5).reverse().map(s => { const col = TC[s.tier] || '#718096'; const canLoad = !!_loadSession(s.sessionId); return `
        ${s.org||'Assessment'}
        ${s.industryName||'—'} · ${s.tsDisplay||s.ts?.slice(0,10)||'—'}
        ${(s.tier||'').toUpperCase()} ${s.score}/100 ${canLoad ? `` : ''}
        `; }).join('') + ``; } else { devicePreview.innerHTML = `
        📭 No reports saved on this device yet.
        Complete an assessment below and your report will appear here automatically.
        `; } }// ── Navbar "My Reports" button ─────────────────────────────── if (myRepBtn) { if (completed.length > 0) { myRepBtn.style.display = 'flex'; const cnt = myRepBtn.querySelector('.rep-count'); if (cnt) cnt.textContent = completed.length; } else { myRepBtn.style.display = 'none'; } } }async function landingEmailRetrieve() { await _emailRetrieveAndShow( document.getElementById('landing-email-input'), document.getElementById('landing-retrieve-err') ); }async function firstTimeEmailRetrieve() { await _emailRetrieveAndShow( document.getElementById('first-time-email-input'), document.getElementById('first-time-err') ); }async function _emailRetrieveAndShow(emailEl, errEl) { const email = emailEl?.value?.trim(); if (!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { if (errEl) { errEl.textContent = '⚠️ Please enter a valid email address.'; errEl.style.display = 'block'; } return; } if (errEl) errEl.style.display = 'none'; const orig = emailEl.value; emailEl.disabled = true; emailEl.value = '⏳ Checking...'; try { const resp = await fetch(BACKEND_RETRIEVE_URL + '?email=' + encodeURIComponent(email), { headers:{'X-PestOrbit-Request':'1'} }); emailEl.disabled = false; emailEl.value = orig; const data = await resp.json(); const reports = data.reports || []; if (!reports.length) { if (errEl) { errEl.textContent = 'No completed reports found for ' + email + '. Start a new assessment below.'; errEl.style.display = 'block'; } return; } openReportDashboard('email'); setTimeout(() => { const din = document.getElementById('retrieve-email-input'); if (din) { din.value = email; fetchReportsByEmail(); } }, 200); } catch (e) { emailEl.disabled = false; emailEl.value = orig; if (errEl) { errEl.textContent = 'Unable to connect. Check internet and try again.'; errEl.style.display = 'block'; } } }// ============================================= // INIT // ============================================= document.addEventListener('DOMContentLoaded', () => { buildIndustryGrid(); _initReturningUserPanel(); document.querySelectorAll('.skip-reason-btn').forEach(btn => { btn.addEventListener('click', function () { document.querySelectorAll('.skip-reason-btn').forEach(b => b.classList.remove('active')); this.classList.add('active'); selectedSkipReason = this.dataset.reason; document.getElementById('skip-confirm-btn').disabled = false; }); }); });