Key Risk Factors
${category}
`;
for (const key in appData[category]) {
formHtml += createFormGroup(key, appData[category][key], category);
}
formHtml += '
';
content.innerHTML = formHtml;
}
tabContentsContainer.appendChild(content);
tabContents.push(content);
});
updateTabs();
calculateAll();
setupEventListeners();
}
function calculateAll() {
const econ = appData['Economic Indicators'];
const market = appData['Real Estate Market Health'];
const afford = appData['Affordability Metrics'];
let riskScore = 0;
const riskFactors = [];
// Interest Rate Risk
const interestRate = parseFloat(econ.interest_rate.value) || 0;
if (interestRate > 7) { riskScore += 25; riskFactors.push('High mortgage rates straining affordability.'); }
else if (interestRate > 5.5) { riskScore += 10; }
// Unemployment Risk
const unemployment = parseFloat(econ.unemployment_rate.value) || 0;
if (unemployment > 5) { riskScore += 25; riskFactors.push('Elevated unemployment could lead to defaults.'); }
else if (unemployment > 4) { riskScore += 10; }
// Inventory Risk
const inventory = parseFloat(market.inventory_months.value) || 0;
if (inventory < 3) { riskScore += 15; riskFactors.push('Low inventory is driving prices up unsustainably.'); }
else if (inventory > 6) { riskScore += 15; riskFactors.push('High inventory suggests weakening demand.'); }
// Bidding War Risk
const aboveAsking = parseFloat(market.sales_above_asking.value) || 0;
if (aboveAsking > 50) { riskScore += 15; riskFactors.push('High percentage of homes selling above ask indicates market froth.'); }
// Affordability Risk
const homePrice = parseFloat(afford.median_home_price.value) || 0;
const income = parseFloat(afford.median_income.value) || 0;
const priceToIncome = income > 0 ? homePrice / income : 100;
if (priceToIncome > 5) { riskScore += 20; riskFactors.push('Price-to-income ratio is historically high.'); }
else if (priceToIncome > 4) { riskScore += 10; }
riskScore = Math.min(100, riskScore);
updateDashboard(riskScore, riskFactors);
}
function updateDashboard(score, factors) {
const riskTextEl = document.getElementById('risk-level-text');
const riskFactorsList = document.getElementById('risk-factors-list');
let level = '';
let color = '';
if (score < 30) { level = 'Low'; color = '#22c55e'; }
else if (score < 50) { level = 'Moderate'; color = '#facc15'; }
else if (score < 75) { level = 'Elevated'; color = '#f97316'; }
else { level = 'High'; color = '#ef4444'; }
riskTextEl.textContent = level;
riskTextEl.style.color = color;
riskFactorsList.innerHTML = '';
if (factors.length > 0) {
factors.forEach(f => {
const li = document.createElement('li');
li.textContent = f;
riskFactorsList.appendChild(li);
});
} else {
riskFactorsList.innerHTML = 'Market Crash Risk Analysis
${document.getElementById('risk-level-text').textContent} Risk
Key Risk Factors
${document.getElementById('risk-factors-list').outerHTML}`; for (const category in appData) { if (category === 'Dashboard') continue; html += `${category}
| ${item.label}: | ${item.value}${item.suffix || ''} |
