Loading data…
Property Security Assessment · Multi-Lender Comparison
← Back to Tools
📍 Property Location
Street name only — no street number needed
💡 Tip: Select your council zoning to get tailored LVR guidance
🏠 Property Category
Auto-saved ✓

Security Test

← Back to Tools
Property Security Assessment & Multi-Lender Comparison
Report Date: ${today}
Reference: OS-${Date.now().toString(36).toUpperCase()}

Security Assessment Report

Property Details

FieldDetails
Address${r.address} (${r.state})
Zoning${r.zoning === 'unknown' ? 'Not specified' : r.zoning}
Category${r.category}
Property Type${r.subtype}
Risk Level${(r.riskLevel || 'medium').toUpperCase()}
Loan Purpose${r.purpose.replace('-',' ').replace(/\\b\\w/g,c=>c.toUpperCase())}
Estimated Value$${r.propertyValue.toLocaleString()}
Proposed Loan$${r.loanAmount.toLocaleString()}
Loan to Value Ratio
${r.lvr.toFixed(1)}%
Primary Cap: ${r.primaryResult.policy.maxLVR}% (${r.primaryResult.lender.shortName})
${r.lmiAmount ? `
🛡️ Estimated LMI: $${r.lmiAmount.toLocaleString()}
` : ''} ${r.warning ? `
⚠️ Special Considerations: ${r.warning}
` : ''}

Multi-Lender Comparison

${lenderRows}
LenderMax LVRMax LoanStatusNotes

Summary

✅ Lenders within range${r.lenderResults.filter(l=>l.status==='pass').length}
⚠️ Lenders with conditions${r.lenderResults.filter(l=>l.status==='alert').length}
🛡️ Possible with LMI${r.lenderResults.filter(l=>l.status==='lmi').length}
❌ Exceeds cap${r.lenderResults.filter(l=>l.status==='fail').length}
⚠️ This tool is for informational purposes only and does not constitute financial advice. Please consult a licensed professional before making financial decisions.
`); pw.document.close(); setTimeout(() => pw.print(), 500); } // ===== Info Modal ===== function showInfo() { document.getElementById('infoModal').classList.add('show'); } function closeInfo() { document.getElementById('infoModal').classList.remove('show'); } document.getElementById('infoModal').addEventListener('click', function(e) { if (e.target === this) closeInfo(); }); // ===== Theme ===== // ===== Zoning Info ===== function updateZoningInfo() { const z = document.getElementById('zoning').value; const el = document.getElementById('zoningInfo'); if (z === 'unknown') { el.innerHTML = '💡 Tip: Select your council zoning to get tailored LVR guidance'; return; } const zone = DATA.zoning.zones[z]; if (zone) el.innerHTML = `💡 ${z}: ${zone.desc}`; } // ===== Google Places ===== let autocomplete = null, addressVerified = false; function initGoogleAutocomplete() { const input = document.getElementById('address'); if (!input) { setTimeout(initGoogleAutocomplete, 500); return; } document.getElementById('addressHelper').textContent = 'Start typing to search Australian streets'; try { autocomplete = new google.maps.places.Autocomplete(input, { types: ['address'], componentRestrictions: { country: 'au' }, fields: ['address_components', 'formatted_address'] }); autocomplete.addListener('place_changed', function() { const place = autocomplete.getPlace(); if (!place.address_components) { addressVerified = false; return; } document.getElementById('addressStatus').className = 'address-status verified'; document.getElementById('addressStatus').textContent = '✓ Verified'; addressVerified = true; for (const c of place.address_components) { if (c.types.includes('administrative_area_level_1')) { const sel = document.getElementById('state'); if (sel.querySelector(`option[value="${c.short_name}"]`)) sel.value = c.short_name; break; } } }); input.addEventListener('input', () => { if (addressVerified) { document.getElementById('addressStatus').className = 'address-status manual'; document.getElementById('addressStatus').textContent = 'Manual Entry'; addressVerified = false; } }); } catch(e) { document.getElementById('addressHelper').textContent = 'Enter street name manually'; } } // ===== Auto-Save ===== const SAVE_KEY = 'oney_save_security_v3'; let saveTimeout = null; function showAutoSaveToast() { const t = document.getElementById('autosaveToast'); if (!t) return; t.classList.add('show'); setTimeout(() => t.classList.remove('show'), 2000); } function autoSave() { clearTimeout(saveTimeout); saveTimeout = setTimeout(() => { const data = {}; document.querySelectorAll('#step1 input, #step1 select').forEach(el => { if (el.id && el.type !== 'checkbox') data[el.id] = el.value; }); document.querySelectorAll('#step1 input[type="checkbox"]').forEach(el => { if (el.id) data[el.id] = el.checked; }); data._cat = selectedCategory; data._sub = selectedSubtype; localStorage.setItem(SAVE_KEY, JSON.stringify(data)); showAutoSaveToast(); }, 500); } function restoreSaved() { const saved = localStorage.getItem(SAVE_KEY); if (!saved) return; try { const d = JSON.parse(saved); Object.keys(d).forEach(k => { if (k.startsWith('_')) return; const el = document.getElementById(k); if (!el) return; if (el.type === 'checkbox') el.checked = d[k]; else el.value = d[k]; }); if (d._cat && DATA.propertyTypes.categories[d._cat]) { selectCategory(d._cat); if (d._sub) { selectedSubtype = d._sub; setTimeout(() => { const btn = document.querySelector(`.subtype-btn[data-sub="${d._sub}"]`); if (btn) btn.classList.add('active'); }, 50); } } if (d.zoning) updateZoningInfo(); } catch(e) {} } function clearSavedData() { localStorage.removeItem(SAVE_KEY); reset(); } document.addEventListener('input', e => { if (e.target.matches('input, select')) autoSave(); }); document.addEventListener('change', e => { if (e.target.matches('input, select')) autoSave(); }); document.addEventListener('click', e => { if (e.target.closest('.type-btn') || e.target.closest('.subtype-btn')) setTimeout(autoSave, 100); }); // ===== Init ===== loadData();
⚠️ This tool is for informational purposes only and does not constitute financial advice. Please consult a licensed professional before making financial decisions.