⏭️
Skip This Section Please select a reason. This will be noted in your assessment report.
Select Reason
🚫 Not applicable to my facility type
🔒 Area not accessible / not under my responsibility
🔧 Area under renovation / not operational
📅 Will complete in a separate assessment
📝 Other reason
Confirm Skip & Continue →
← Go back & answer this section
🛡️
Access the Pest Risk Intelligence System Pakistan's most advanced industry-specific pest risk assessment tool. Free — takes under 60 seconds.
🔒 100% Confidential ⚡ Instant Access 📊 Free Assessment
Personal Information
Organisation Details
🔒 Your information is strictly confidential and used only to personalise your assessment. PestOrbit's specialist team may follow up with tailored recommendations. We never share data with third parties. By proceeding you agree to our Privacy Policy .
🔬 Start My Free Industry Assessment 📊
My Saved Assessment Reports Reports are automatically saved on this device after each completed assessment.
Close
🔬 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.
Verified:
✅ ISO-Certified
🔒 Confidential
🏥 HACCP-Aligned
⚡ Instant Results
📊 PDF & Word Export
⏭️ Skip N/A Sections
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.
👋 Welcome Back — Your Reports Are Here
You have completed assessments saved on this device. Pick up where you left off or start fresh.
📊 View All My Reports
➕ New Assessment
📋
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.
🔍 Find Reports
💾
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
▶ Begin Industry Assessment
⚠️
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
🔍 Assessment Answer each risk dimension for your facility
Section 1 of N
📍 Assessment Sections — click to navigate
⏭️ This section has been skipped
↩ Unskip & Answer This Section
📊
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 Section Risk Factor Your Answer Assessment Note Level Score 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.
📕 Export PDF
📘 Export Word
🖨️ Print Report
📊 My Saved Reports
↺ New Assessment
`;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 = `
🖨️ Print / Save as PDF
✕ Close
🛡 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 Section / Zone Score ${secRows}
Diagnostic Factor Breakdown Zone Factor Answer Level Score ${diagRows} TOTAL NORMALISED RISK SCORE ${score}/100
Recommended Action Plan Seasonal Pest Forecast \u2014 ${forecast.label} Active Pest Threats
Seasonal Actions Required
Physical Gap & Exclusion Checklist 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.
📊 View My Reports
✕
`;
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 ? `📊 View Report ` : ''}
${canLoad ? `🗑 Delete ` : ''}
`;
}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 = `
💾 This Device ${sessions.length}
📧 Retrieve by Email
${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.
⏳ Fetching your reports from the server...
`;
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 ? `View → ` : ''}
`;
}).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 ? `Open → ` : '— '}
`;
}).join('') +
`
📊 View All (${completed.length}) Saved Reports `;
} 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;
});
});
});