Home Vulnerability Assessment Calculator
ANA›Life Services Authority›National Calculator Authority›Home Vulnerability Assessment Calculator
.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }
Home Vulnerability Assessment Calculator
Evaluate your home's overall vulnerability by answering questions across key risk categories. Each category is weighted to produce a composite risk score with actionable recommendations.
### 1. Structural & Age Factors
Home Age (years)
Roof Age (years)
Foundation Type
-- Select -- Reinforced concrete slab Poured concrete basement Concrete block / CMU Crawl space (pier & beam) Unreinforced masonry / rubble
Years Since Last Professional Inspection
### 2. Natural Disaster Exposure
Flood Zone
-- Select -- Zone X – Minimal risk Zone B/C – Moderate risk Zone AE – High risk (100-yr floodplain) Zone VE – Coastal high-hazard
Wind / Hurricane Exposure
-- Select -- Low (inland, sheltered) Moderate (occasional severe storms) High (hurricane-prone coast) Extreme (Category 4–5 corridor)
Seismic Zone
-- Select -- Zone 0 – Negligible Zone 1 – Minor Zone 2 – Moderate Zone 3–4 – High to Very High
Wildfire Risk
-- Select -- None / Urban core Low (some vegetation nearby) Moderate (WUI fringe) High (WUI / dense brush)
### 3. Security & Access Control
Door Lock Quality
-- Select -- Grade 1 deadbolts on all exterior doors Grade 2 deadbolts on most doors Basic knob locks only No deadbolts / hollow-core doors
Security System
-- Select -- Monitored alarm + cameras + motion sensors Self-monitored alarm or cameras only Basic door/window sensors, no monitoring No security system
Exterior Lighting
-- Select -- Motion-activated lights covering all entry points Some exterior lights, not motion-activated Minimal / only front porch light No exterior lighting
### 4. Fire Safety
Smoke Detectors
-- Select -- Interconnected detectors on every level + CO detectors Detectors on every level, not interconnected Only one or two detectors No working smoke detectors
Fire Extinguisher
-- Select -- Multiple extinguishers, inspected within 1 year One extinguisher, inspected within 1 year Extinguisher present but not recently inspected No fire extinguisher
Electrical System Age / Condition
-- Select -- Updated within 10 years, AFCI/GFCI protected 20–40 years old, no known issues 40+ years old or known issues (flickering, tripping) Knob-and-tube or aluminum wiring
### 5. Water & Moisture Risks
Plumbing Age (years)
Sump Pump / Water Mitigation
-- Select -- Sump pump with battery backup + water sensors Sump pump, no backup No sump pump but good drainage No mitigation, history of water intrusion
Roof Condition
-- Select -- Excellent – no missing shingles, recently inspected Good – minor wear, no active leaks Fair – some damage, minor leaks possible Poor – significant damage or active leaks
Calculate Vulnerability Score Fill in all fields above and click Calculate.
function homCalc() { const resultEl = document.getElementById('hom-result');
// ── Collect raw inputs ────────────────────────────────────────────────────── const homeAge = parseFloat(document.getElementById('hom-age').value); const roofAge = parseFloat(document.getElementById('hom-roof-age').value); const foundationVal = parseInt(document.getElementById('hom-foundation').value); const lastInspect = parseFloat(document.getElementById('hom-last-inspection').value); const floodVal = parseInt(document.getElementById('hom-flood-zone').value); const windVal = parseInt(document.getElementById('hom-wind-zone').value); const seismicVal = parseInt(document.getElementById('hom-seismic').value); const wildfireVal = parseInt(document.getElementById('hom-wildfire').value); const locksVal = parseInt(document.getElementById('hom-locks').value); const alarmVal = parseInt(document.getElementById('hom-alarm').value); const lightingVal = parseInt(document.getElementById('hom-lighting').value); const smokeVal = parseInt(document.getElementById('hom-smoke').value); const extVal = parseInt(document.getElementById('hom-extinguisher').value); const electricalVal = parseInt(document.getElementById('hom-electrical').value); const plumbingAge = parseFloat(document.getElementById('hom-plumbing-age').value); const sumpVal = parseInt(document.getElementById('hom-sump').value); const roofCondVal = parseInt(document.getElementById('hom-roof-condition').value);
// ── Validation ────────────────────────────────────────────────────────────── const errors = []; if (isNaN(homeAge) || homeAge 200) errors.push("Home age must be 0–200 years."); if (isNaN(roofAge) || roofAge 100) errors.push("Roof age must be 0–100 years."); if (!foundationVal) errors.push("Please select a foundation type."); if (isNaN(lastInspect)|| lastInspect 50) errors.push("Years since inspection must be 0–50."); if (!floodVal) errors.push("Please select a flood zone."); if (!windVal) errors.push("Please select a wind exposure level."); if (!seismicVal) errors.push("Please select a seismic zone."); if (!wildfireVal) errors.push("Please select a wildfire risk level."); if (!locksVal) errors.push("Please select a door lock quality."); if (!alarmVal) errors.push("Please select a security system option."); if (!lightingVal) errors.push("Please select an exterior lighting option."); if (!smokeVal) errors.push("Please select a smoke detector option."); if (!extVal) errors.push("Please select a fire extinguisher option."); if (!electricalVal) errors.push("Please select an electrical system option."); if (isNaN(plumbingAge) || plumbingAge 150) errors.push("Plumbing age must be 0–150 years."); if (!sumpVal) errors.push("Please select a water mitigation option."); if (!roofCondVal) errors.push("Please select a roof condition.");
if (errors.length > 0) { resultEl.innerHTML = 'Please fix the following:' + errors.join('') + ''; return; }
// ── Category Score Functions (each returns 0–100, higher = more vulnerable) ─ // All dropdown options are 1–4 where 1=best/safest, 4=worst/most vulnerable. // We normalise: score = (val - 1) / 3 * 100
function dropScore(val) { return (val - 1) / 3 * 100; }
// --- Structural (weight 20%) --- // Home age: 0 yrs → 0 pts, 100+ yrs → 100 pts (capped) const homeAgeScore = Math.min(homeAge / 100, 1) * 100; // Roof age: 0 yrs → 0 pts, 30+ yrs → 100 pts (typical lifespan ~25–30 yrs) const roofAgeScore = Math.min(roofAge / 30, 1) * 100; const foundationScore = dropScore(foundationVal); // Inspection: 0 yrs → 0 pts, 10+ yrs → 100 pts const inspectScore = Math.min(lastInspect / 10, 1) * 100; const structuralRaw = (homeAgeScore * 0.30) + (roofAgeScore * 0.25) + (foundationScore * 0.30) + (inspectScore * 0.15);
// --- Natural Disaster (weight 25%) --- const floodScore = dropScore(floodVal); const windScore = dropScore(windVal); const seismicScore = dropScore(seismicVal); const wildfireScore = dropScore(wildfireVal); const disasterRaw = (floodScore * 0.30) + (windScore * 0.30) + (seismicScore * 0.20) + (wildfireScore * 0.20);
// --- Security (weight 20%) --- const locksScore = dropScore(locksVal); const alarmScore = dropScore(alarmVal); const lightingScore = dropScore(lightingVal); const securityRaw = (locksScore * 0.40) + (alarmScore * 0.40) + (lightingScore * 0.20);
// --- Fire Safety (weight 20%) --- const smokeScore = dropScore(smokeVal); const extScore = dropScore(extVal); const electricalScore = dropScore(electricalVal); const fireRaw = (smokeScore * 0.35) + (extScore * 0.20) + (electricalScore * 0.45);
// --- Water & Moisture (weight 15%) --- // Plumbing age: 0 → 0 pts, 50+ yrs → 100 pts const plumbingScore = Math.min(plumbingAge / 50, 1) * 100; const sumpScore = dropScore(sumpVal); const roofCondScore = dropScore(roofCondVal); const waterRaw = (plumbingScore * 0.30) + (sumpScore * 0.35) + (roofCondScore * 0.35);
// ── Composite Vulnerability Index (0–100) ─────────────────────────────────── // Weights: Structural 20%, Disaster 25%, Security 20%, Fire 20%, Water 15% const composite = (structuralRaw * 0.20) + (disasterRaw * 0.25) + (securityRaw * 0.20) + (fireRaw * 0.20) + (waterRaw * 0.15);
// ── Risk Classification ───────────────────────────────────────────────────── let riskLabel, riskColor, riskEmoji, summary; if (composite
${label} (weight ${(weight*100).toFixed(0)}%) ${pct}/100
`; }
// ── Recommendations ───────────────────────────────────────────────────────── const recs = []; if (structuralRaw >= 40) recs.push("🏠 Structural: Schedule a professional home inspection. Consider foundation assessment if your home is 40+ years old."); if (roofAgeScore >= 60) recs.push("🏠 Roof: Roof is aging — obtain a roofing inspection and budget for replacement within 1–5 years."); if (disasterRaw >= 40) recs.push("🌪️ Natural Disasters: Review FEMA flood maps, consider flood insurance, and reinforce roof-to-wall connections if in a high-wind zone."); if (seismicScore >= 50) recs.push("🌍 Seismic: Consult a structural engineer about seismic retrofitting (cripple wall bracing, anchor bolts)."); if (wildfireScore >= 50) recs.push("🔥 Wildfire: Create a 30-ft defensible space, use ember-resistant vents, and clear gutters of debris."); if (securityRaw >= 40) recs.push("🔒 Security: Install Grade 1 deadbolts, a monitored alarm system, and motion-activated exterior lighting."); if (fireRaw >= 40) recs.push("🚒 Fire Safety: Install interconnected smoke/CO detectors on every level and have your electrical panel inspected."); if (electricalScore >= 60) recs.push("⚡ Electrical: Older or problematic wiring is a leading cause of house fires — consult a licensed electrician immediately."); if (waterRaw >= 40) recs.push("💧 Water/Moisture: Install a sump pump with battery backup, add water leak sensors, and inspect plumbing for corrosion."); if (plumbingScore >= 60) recs.push("🔧 Plumbing: Aging pipes (galvanized steel or polybutylene) are prone to failure — consider a plumbing inspection and re-pipe estimate."); if (recs.length === 0) recs.push("✅ No critical recommendations — continue regular maintenance and annual inspections.");
// ── Output ────────────────────────────────────────────────────────────────── resultEl.innerHTML = `
${riskEmoji} ${composite.toFixed(1)} / 100 ${riskLabel} ${summary}
#### Category Breakdown
${catBar("Structural & Age", structuralRaw, 0.20)} ${catBar("Natural Disaster Exposure", disasterRaw, 0.25)} ${catBar("Security & Access", securityRaw, 0.20)} ${catBar("Fire Safety", fireRaw, 0.20)} ${catBar("Water & Moisture", waterRaw, 0.15)}
#### Recommendations
${recs.map(r => ``).join('')}
⚠️ This assessment is for informational purposes only and does not replace a professional home inspection.
`; }
#### Formula
Composite Vulnerability Index (0–100) = (Structural Score × 0.20) + (Natural Disaster Score × 0.25) + (Security Score × 0.20) + (Fire Safety Score × 0.20) + (Water Score × 0.15)
Category scores are weighted averages of their sub-factors, each normalised to 0–100:
- Structural (20%): Home age (30%) + Roof age (25%) + Foundation type (30%) + Inspection recency (15%)
- Natural Disaster (25%): Flood zone (30%) + Wind exposure (30%) + Seismic zone (20%) + Wildfire risk (20%)
- Security (20%): Lock quality (40%) + Alarm system (40%) + Exterior lighting (20%)
- Fire Safety (20%): Smoke detectors (35%) + Fire extinguisher (20%) + Electrical condition (45%)
- Water & Moisture (15%): Plumbing age (30%) + Sump/drainage (35%) + Roof condition (35%)
Dropdown options are scored on a 1–4 scale (1 = best practice, 4 = highest risk). Normalised score = (option value − 1) / 3 × 100. Continuous inputs (age fields) are scaled against empirical thresholds (e.g., roof lifespan ≈ 30 years, plumbing lifespan ≈ 50 years).
Risk bands: 0–19 Very Low | 20–39 Low | 40–59 Moderate | 60–79 High | 80–100 Very High
#### Assumptions & References
More Calculators
- Roof Repair Cost Estimator
- Newton's Law of Gravitation Calculator
- Effluent Pump Flow Rate Calculator
- Rental Increase Notice Calculator
- Septic Pump Replacement Cost Estimator
- Wave Frequency and Wavelength Calculator
- Service Term Length & Commitment Hours Calculator
-
New Hampshire Sales Tax Calculator for Construction Materials
- New Jersey Contractor Insurance Cost Estimator
- New Jersey Permit Cost Estimator
- New Mexico Contractor License Fee Calculator
- New Jersey Commercial Contractor License Fee Calculator
- Commercial Project Overhead and Markup Calculator
Read Next
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...