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