File size: 5,980 Bytes
aaa66d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
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