Spaces:
Sleeping
Sleeping
from utils.css import load_css | |
def retirement_planning_tool(current_age, retirement_age, current_investment, monthly_investment, pre_retirement_roi, post_retirement_roi, pre_retirement_dividend_yield, post_retirement_dividend_yield, reinvest_dividends, life_expectancy): | |
# NoneTypeμΌ λ 0μΌλ‘ μ²λ¦¬ | |
current_age = current_age if current_age is not None else 0 | |
retirement_age = retirement_age if retirement_age is not None else 0 | |
current_investment = current_investment if current_investment is not None else 0 | |
monthly_investment = monthly_investment if monthly_investment is not None else 0 | |
pre_retirement_roi = pre_retirement_roi if pre_retirement_roi is not None else 0 | |
post_retirement_roi = post_retirement_roi if post_retirement_roi is not None else 0 | |
pre_retirement_dividend_yield = pre_retirement_dividend_yield if pre_retirement_dividend_yield is not None else 0 | |
life_expectancy = life_expectancy if life_expectancy is not None else 0 | |
# μν΄ μ νμ λ μ κ³μ° | |
years_to_retirement = retirement_age - current_age | |
post_retirement_years = life_expectancy - retirement_age | |
# νμ¬ ν¬μμ‘μΌλ‘ μ΄κΈ° ν¬μ μ€μ | |
total_investment = current_investment | |
# μν΄ μ μκ° μ΄μμ¨ | |
# μ°κ° μμ΅λ₯ μ μκ° μμ΅λ₯ λ‘ λ³ν: (1 + μ°κ° μμ΅λ₯ )^(1/12) - 1 | |
monthly_return_pre = (1 + pre_retirement_roi / 100) ** (1/12) - 1 | |
# μν΄ μμ μ ν¬μ κ³μ° | |
for year in range(years_to_retirement): | |
for month in range(12): | |
total_investment = (total_investment + monthly_investment) * (1 + monthly_return_pre) | |
if reinvest_dividends: | |
total_investment += total_investment * (pre_retirement_dividend_yield / 100 / 12) | |
# μν΄ μμ μμ μ μ΄ ν¬μμ‘κ³Ό μ°κ° λ°°λΉ μμ΅ μ μ₯ | |
investment_at_retirement = total_investment | |
annual_dividend_at_retirement = investment_at_retirement * (pre_retirement_dividend_yield / 100) | |
monthly_dividend_at_retirement = annual_dividend_at_retirement / 12 | |
# μν΄ ν μκ° μ΄μμ¨ | |
# μ°κ° μμ΅λ₯ μ μκ° μμ΅λ₯ λ‘ λ³ν: (1 + μ°κ° μμ΅λ₯ )^(1/12) - 1 | |
monthly_return_post = (1 + post_retirement_roi / 100) ** (1/12) - 1 | |
# μν΄ ν ν¬μ λͺ©λ‘ μ΄κΈ°ν | |
post_retirement_investments = [(retirement_age, investment_at_retirement, annual_dividend_at_retirement, monthly_dividend_at_retirement)] | |
# μν΄ ν κ° λ λμ ν¬μ λ° λ°°λΉ μμ΅ κ³μ° | |
for year in range(1, post_retirement_years + 1): | |
total_investment *= (1 + post_retirement_roi / 100) # μν΄ ν μμ΅λ₯ μ μ© | |
annual_dividend_income = total_investment * (post_retirement_dividend_yield / 100) # μ°κ° λ°°λΉ μμ΅ κ³μ° | |
monthly_dividend_income = annual_dividend_income / 12 # μκ° λ°°λΉ μμ΅ κ³μ° | |
post_retirement_investments.append((retirement_age + year, total_investment, annual_dividend_income, monthly_dividend_income)) | |
# style.cssμμ CSS μ½κΈ° | |
css = load_css() | |
# μν΄ κ³νμ λν HTML κ²°κ³Ό μμ± | |
result_html = css + f""" | |
<div class="wrap-text" style="box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1); border-radius: 0.5rem; padding: 3rem; position: relative; width: 100%; padding: 1.5rem;"> | |
<div> | |
<div style="margin-bottom: 1.5rem;"> | |
<div style="font-size: 1.5rem; margin-top: 1.5rem; margin-bottom: 1.5rem;">Total investment at retirement:</div> | |
<div style="font-size: 1.5rem; font-weight: bold; color: #1c75bc;"> | |
<span style='color: #1678fb'>{investment_at_retirement:,.0f}</span> | |
</div> | |
<hr style="margin: 1.5rem 0;"> | |
</div> | |
</div> | |
<div> | |
<div style="margin-bottom: 1.5rem;"> | |
<div style="font-size: 1.5rem; margin-top: 1.5rem; margin-bottom: 1.5rem;">Dividend income at retirement:</div> | |
<span style='font-size: 1.5rem; font-weight: bold; color: #1678fb'>{annual_dividend_at_retirement:,.0f}</span> | |
Annual | |
<p></p> | |
<span style='font-size: 1.5rem; font-weight: bold; color: #1678fb'>{monthly_dividend_at_retirement:,.0f}</span> | |
Monthly | |
<hr style="margin: 1.5rem 0;"> | |
</div> | |
</div> | |
<div> | |
</div> | |
</div> | |
<h3>Dividend Income After Retirement</h3> | |
<div class='table-container'> | |
<table style='border-collapse: collapse; width: 100%;'> | |
<thead> | |
<tr> | |
<th style='border: 1px solid #ddd; padding: 0.5rem;'>Age</th> | |
<th style='border: 1px solid #ddd; padding: 0.5rem;'>Total</th> | |
<th style='border: 1px solid #ddd; padding: 0.5rem;'>Annual</th> | |
<th style='border: 1px solid #ddd; padding: 0.5rem;'>Monthly</th> | |
</tr> | |
</thead> | |
<tbody> | |
""" | |
for age, investment, annual_dividend_income, monthly_dividend_income in post_retirement_investments: | |
result_html += f""" | |
<tr> | |
<td style='border: 1px solid #ddd; padding: 0.5rem;'>{age}</td> | |
<td style='border: 1px solid #ddd; padding: 0.5rem;'>{investment:,.0f}</td> | |
<td style='border: 1px solid #ddd; padding: 0.5rem;'>{annual_dividend_income:,.0f}</td> | |
<td style='border: 1px solid #ddd; padding: 0.5rem;'>{monthly_dividend_income:,.0f}</td> | |
</tr> | |
""" | |
result_html += """ | |
</tbody> | |
</table> | |
</div> | |
<p style="padding: 10px; border: 1px solid; border-radius: 5px; text-align: center; max-width: 400px; margin: 20px auto;"> | |
<strong>Note:</strong> No additional investments or reinvestment of dividends after retirement. | |
</p> | |
""" | |
return result_html | |