| import numpy as np |
| from typing import Dict, Any |
|
|
| def calculate_tax_comparison(income: float, mortgage_interest: float, property_tax: float, |
| charitable_donations: float, state_local_tax: float, |
| child_tax_credit: float = 2000) -> Dict[str, Any]: |
| |
| |
| pass |
|
|
| def should_buy_house(income: float, down_payment: float, home_price: float, |
| interest_rate: float, property_tax_rate: float, |
| maintenance_rate: float, rent: float, |
| expected_appreciation: float, time_horizon: int) -> Dict[str, Any]: |
| """ |
| Determine if buying a house is financially beneficial compared to renting. |
| |
| Parameters: |
| income: Annual household income |
| down_payment: Available down payment |
| home_price: Price of the house |
| interest_rate: Annual mortgage interest rate (as a decimal) |
| property_tax_rate: Annual property tax rate (as a decimal) |
| maintenance_rate: Annual maintenance cost as a percentage of home value (as a decimal) |
| rent: Monthly rent if not buying |
| expected_appreciation: Expected annual home value appreciation rate (as a decimal) |
| time_horizon: Number of years planning to stay in the house |
| |
| Returns: A dictionary with the analysis results |
| """ |
| |
| loan_amount = home_price - down_payment |
| monthly_mortgage_rate = interest_rate / 12 |
| num_payments = time_horizon * 12 |
| monthly_mortgage = loan_amount * (monthly_mortgage_rate * (1 + monthly_mortgage_rate)**num_payments) / ((1 + monthly_mortgage_rate)**num_payments - 1) |
| |
| |
| annual_mortgage = monthly_mortgage * 12 |
| annual_property_tax = home_price * property_tax_rate |
| annual_maintenance = home_price * maintenance_rate |
| annual_housing_cost = annual_mortgage + annual_property_tax + annual_maintenance |
| |
| |
| mortgage_interest = loan_amount * interest_rate |
| tax_comparison = calculate_tax_comparison(income, mortgage_interest, annual_property_tax, 0, 0) |
| tax_savings = tax_comparison['Difference'] if tax_comparison['Better Option'] == 'Itemized Deduction' else 0 |
| |
| |
| total_buy_cost = (annual_housing_cost - tax_savings) * time_horizon |
| total_rent_cost = rent * 12 * time_horizon |
| |
| |
| final_home_value = home_price * (1 + expected_appreciation)**time_horizon |
| |
| |
| net_buy_cost = total_buy_cost + down_payment - (final_home_value - loan_amount) |
| |
| return { |
| "Buy House": net_buy_cost < total_rent_cost, |
| "Net Cost of Buying": net_buy_cost, |
| "Total Rent Cost": total_rent_cost, |
| "Difference": total_rent_cost - net_buy_cost, |
| "Annual Tax Savings": tax_savings, |
| "Expected Home Value After {} Years".format(time_horizon): final_home_value |
| } |
|
|
| |
| result = should_buy_house( |
| income=250000, |
| down_payment=100000, |
| home_price=500000, |
| interest_rate=0.06, |
| property_tax_rate=0.01, |
| maintenance_rate=0.01, |
| rent=3000, |
| expected_appreciation=0.03, |
| time_horizon=10 |
| ) |
|
|
| print(result) |
|
|