Property Evaluation & Mortgage Modeling Guide
Purpose: Evaluate Tasmania properties for CVTas site selection and model different financing strategies.
Quick Start
1. Browse Properties
# View all properties (ordered by score)
GET /api/properties/properties/
# Filter by region
GET /api/properties/properties/?region=5
# Search by location
GET /api/properties/properties/?search=Huon
# Get property details
GET /api/properties/properties/12/
2. Check Affordability
POST /api/properties/properties/12/check_affordability/
{
"capital_available": "977000",
"max_lvr": "55.00", # 40%, 55%, or 60%
"has_foreign_ownership": false,
"interest_rate": "6.45", # Current rate
"term_years": 10 # We expect hyperinflation
}
Returns: Full breakdown of upfront costs, loan amounts, and repayments.
3. Compare Properties
POST /api/properties/properties/compare/
{
"property_ids": [12, 15, 23]
}
Key Concepts
Mortgage Modeling Philosophy
We don't import static loan scenarios. Instead, we calculate mortgages dynamically:
Why? - Flexibility: Model any property with any capital structure - Real-time: Adjust LVR, interest rate, term on the fly - Strategic: Compare conservative (40% LVR) vs aggressive (60% LVR) - Budget integration: Feed repayments into cash flow projections
Example:
from backend.finance.services import PropertyAffordabilityService
from decimal import Decimal
# Check if we can afford a $650k property with $977k capital
result = PropertyAffordabilityService.check_affordability(
property_price=Decimal('650000'),
capital_available=Decimal('977000'),
max_lvr=Decimal('55.00'),
has_foreign_ownership=False,
interest_rate=Decimal('6.45'),
term_years=10
)
print(f"Affordable: {result['affordable']}")
print(f"Monthly payment: ${result['repayments']['monthly']}")
print(f"Capital surplus: ${result['capital_surplus_or_deficit']}")
LVR (Loan-to-Value Ratio) Strategies
| Strategy | LVR | Use Case | Trade-off |
|---|---|---|---|
| Conservative | 40% | Low risk, max cash reserves | Higher upfront capital needed |
| Standard | 55% | Balanced approach | Default for planning |
| Aggressive | 60% | Maximize leverage | Higher monthly repayments |
Foreign Ownership: 60% max LVR, +8% stamp duty surcharge
Why 10-Year Fixed Mortgages?
We expect significant hyperinflation. Locking in today's interest rates for 10 years protects against future rate increases.
Property Data Model
Property Scoring System
Each property evaluated by 2+ evaluators (Wanasai, Pip) across 5 dimensions (1-10 scale): - Location: Regional suitability - Self-sustainability: Food production potential - Cost/value/opportunity: ROI assessment - Robustness: X-risk resilience - Glamor: Aesthetic/inspirational value
Overall Score: Composite 0-41 scale
Regional Analysis
10 Tasmania regions scored on 11 criteria (1-5 scale): - Land cost - Seismic risk - Fire risk - Climate/water - Agriculture viability - Internet connectivity - Renewables potential - Remoteness/access - Defensibility - Talent/airport proximity - Politics/regulation
Integration with Budget System
Linking Properties to Budget
from backend.finance.models import PropertyPurchase
from backend.properties.models import Property
# Create a property purchase linked to evaluated property
purchase = PropertyPurchase.objects.create(
property_id=12, # Link to Property from evaluation system
name="Huon Valley Farm",
purchase_price=650000,
has_mortgage=True,
mortgage_amount=357500,
mortgage_interest_rate=6.45,
mortgage_term_years=10,
status='UNDER_OFFER'
)
Cash Flow Impact
Mortgage repayments automatically feed into: - Monthly expense projections - Monte Carlo budget simulations - Capital reserve planning
API Endpoints Reference
| Endpoint | Method | Purpose |
|---|---|---|
/api/properties/properties/ |
GET | List properties (filtered, sorted) |
/api/properties/properties/{id}/ |
GET | Property detail + scores |
/api/properties/properties/{id}/check_affordability/ |
POST | Calculate affordability |
/api/properties/properties/compare/ |
POST | Side-by-side comparison |
/api/properties/regions/ |
GET | List regions with scores |
/api/properties/financial-scenarios/ |
GET | Example scenarios (reference) |
/api/properties/capital-contributions/ |
GET | Capital timeline |
Common Tasks
Find Top Affordable Properties
from backend.properties.models import Property
from backend.finance.services import PropertyAffordabilityService
from decimal import Decimal
capital = Decimal('977000')
affordable = []
for prop in Property.objects.filter(price_aud_high__isnull=False).order_by('-overall_score'):
result = PropertyAffordabilityService.check_affordability(
property_price=prop.price_aud_high,
capital_available=capital,
max_lvr=Decimal('55.00')
)
if result['affordable']:
affordable.append({
'property': prop.uuid,
'score': prop.overall_score,
'price': prop.price_aud_high,
'monthly': result['repayments']['monthly']
})
if len(affordable) >= 5:
break
Model Different LVR Scenarios
scenarios = [
('Conservative 40%', Decimal('40.00')),
('Standard 55%', Decimal('55.00')),
('Aggressive 60%', Decimal('60.00'))
]
for name, lvr in scenarios:
result = PropertyAffordabilityService.check_affordability(
property_price=Decimal('650000'),
capital_available=Decimal('977000'),
max_lvr=lvr
)
print(f"{name}:")
print(f" Loan: ${result['max_loan_amount']}")
print(f" Upfront: ${result['total_upfront_cost']}")
print(f" Monthly: ${result['repayments']['monthly']}")
Data Sources
Current Data
- 56 properties: Manually evaluated from realestate.com.au, Domain
- 10 regions: Tasmania regional analysis
- 2 evaluators: Wanasai, Pip
Import Commands
# Import regional scoring
python manage.py import_regions --file data/regions_10_tas_nz.csv
# Import properties (auto-links regions)
python manage.py import_properties --file data/site_property_scoring_tas.csv
# Import capital contributions
python manage.py import_capital_contributions --file data/capital_contributions.csv
Design Principles
- No-loss approach: All CSV fields preserved, nullable to handle incomplete data
- Dynamic calculations: Don't store what can be computed (mortgage payments)
- Flexible modeling: Support any financing scenario via parameters
- Budget integration: Property decisions flow into financial planning
- Real-time affordability: Check viability instantly with current capital
Future Enhancements
- [ ] GIS integration (PostGIS) for spatial analysis
- [ ] Property comparison dashboard UI
- [ ] Automated property scraping (realestate.com.au API)
- [ ] Climate risk overlay (fire, flood, sea level)
- [ ] Drive time calculations (to Hobart/Launceston)
- [ ] Permaculture suitability scoring per property
- [ ] Multi-property portfolio optimization
Questions?
See also:
- docs/planning/DAY5_PLAN.md - Technical implementation plan
- backend/finance/services.py - Mortgage calculator source
- backend/properties/models.py - Data model reference