mytest2_app / utils /retirement.py
cryman38's picture
Upload 14 files
aaa66d0 verified
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