
def calculate_pension_and_medical_v2( base_salary7500, # 起始社平工资元/月请替换为石狮市实际全口径月平均工资 years_paid20, # 养老保险实际缴费年限年 years_until_retirement30, # 从开始缴费到退休的总年限年例如30岁开始交60岁退休总年限为30年 average_index0.6, # 养老保险平均缴费指数最低档为0.6最高为3.0 medical_base_index0.6, # 医疗保险缴费基数指数最低档为0.6最高为3.0 medical_years_paid20, # 医疗保险实际缴费年限年可与养老缴费年限不同 annual_growth_rate0.04, # 社平工资年增长率假设为4% individual_interest_rate0.04, # 个人账户记账利率本次设为4%近年实际约4%左右 discount_rate0.02, # 折现率用于计算缴费在退休时的货币时间价值仅作参考不影响实际缴费总额 months_to_pay139, # 养老金计发月数60岁退休对应139个月 individual_ratio0.08, # 养老保险个人账户计入比例灵活就业人员为8% pension_contribution_ratio0.20, # 灵活就业人员养老保险总缴费比例20% medical_contribution_ratio0.08 # 灵活就业人员医疗保险缴费比例8%各地可能不同 ): 计算灵活就业人员养老保险、医疗保险的缴费情况和退休后养老金。 核心逻辑 1. 退休时上年度社平工资 起始社平工资 × (1 社平工资年增长率) ** (总年限 - 1) 因为从开始缴费到退休共 years_until_retirement 年退休时上年度社会平均工资按 total years 增长。 2. 基础养老金 退休时上年度社平工资 × (1 平均缴费指数) / 2 × 缴费年限 × 1% 3. 个人账户储存额第 year 年缴费计入个人账户的金额按复利累积到退休。 剩余年限 years_until_retirement - year - 1 每年计入金额 当年缴费基数 × 8% × 12 当年缴费基数 当年社平工资 × 平均缴费指数 到退休时的本利和 每年计入金额 × (1 个人账户记账利率) ** 剩余年限 4. 个人账户养老金 个人账户储存额 / 计发月数 5. 总养老金 基础养老金 个人账户养老金 6. 实际缴费总额按每年实际缴纳的养老和医保费用累加。 # 参数合理性校验避免过大或过小的输入 # 养老缴费指数限制在0.6到3.0之间 if average_index 0.6 or average_index 3.0: average_index max(0.6, min(3.0, average_index)) # 医保缴费指数限制在0.6到3.0之间 if medical_base_index 0.6 or medical_base_index 3.0: medical_base_index max(0.6, min(3.0, medical_base_index)) # 实际缴费年限不能超过总年限 if years_paid years_until_retirement: years_paid years_until_retirement # 医保缴费年限不能超过养老缴费年限这里假设医保和养老同时缴纳实际可不同 if medical_years_paid years_paid: medical_years_paid years_paid # 1. 计算退休时上年度社平工资 # 注意这里是按“从开始缴费到退休的总年限”计算而不是只按缴费年限。 # 例如缴费20年后停缴再过10年退休总年限30年社平工资按30年增长。 social_wage_at_retirement base_salary * (1 annual_growth_rate) ** (years_until_retirement - 1) # 2. 计算基础养老金 # 基础养老金公式退休时上年度社平工资 × (1 本人平均缴费指数) ÷ 2 × 缴费年限 × 1% # 缴费年限仍然是实际缴费年限 years_paid而不是总年限。 basic_pension (social_wage_at_retirement * (1 average_index) / 2) * years_paid * 0.01 # 3. 初始化用于累加的变量 individual_account_total 0.0 # 个人账户储存额到退休时的本利和 pension_pay_actual 0.0 # 养老保险实际缴费总额不考虑时间价值 pension_pay_future_value 0.0 # 养老保险缴费在退休时的折现终值可选参考 medical_pay_actual 0.0 # 医疗保险实际缴费总额不考虑时间价值 medical_pay_future_value 0.0 # 医疗保险缴费在退休时的折现终值可选参考 # 4. 逐年计算缴费、个人账户累积 # 循环范围前 years_paid 年实际缴费 for year in range(years_paid): # 4.1 计算当年社平工资 social_wage_year base_salary * (1 annual_growth_rate) ** year # ---- 养老保险缴费部分 ---- # 当年养老缴费基数 当年社平工资 × 养老缴费指数 contribution_base_pension social_wage_year * average_index # 当年实际缴纳养老保险费 缴费基数 × 缴费比例 × 12个月 annual_pension_actual contribution_base_pension * pension_contribution_ratio * 12 pension_pay_actual annual_pension_actual # 累加养老实际缴费总额 # ---- 个人账户计入部分 ---- # 当年计入个人账户的金额 缴费基数 × 个人账户比例 × 12 # 灵活就业人员虽然缴纳20%但只有8%进入个人账户其余进入统筹基金。 annual_individual contribution_base_pension * individual_ratio * 12 # 这笔钱要复利累积到退休。 # 剩余年限 从次年到退休前一年的年数 years_until_retirement - year - 1 # 例如第1年缴费year0总年限30年剩余29年计息29次。 remaining_years years_until_retirement - year - 1 # 个人账户储存额累加当年计入金额 × (1记账利率)^剩余年限 individual_account_total annual_individual * (1 individual_interest_rate) ** remaining_years # ---- 养老保险缴费的折现终值参考用不影响实际总额 ---- # 把每年实际缴纳的金额按折现率换算到退休时点的价值。 pension_pay_future_value annual_pension_actual * (1 discount_rate) ** (years_until_retirement - year - 1) # ---- 医疗保险缴费部分 ---- # 医疗保险通常只在缴费期间缴纳且停缴期间不享受医保待遇。 # 这里假设医保缴费年限为 medical_years_paid可能等于或少于养老缴费年限。 if year medical_years_paid: # 当年医保缴费基数 当年社平工资 × 医保基数指数 contribution_base_medical social_wage_year * medical_base_index # 当年实际缴纳医保费 缴费基数 × 医保缴费比例 × 12 annual_medical_actual contribution_base_medical * medical_contribution_ratio * 12 medical_pay_actual annual_medical_actual # 医保缴费的折现终值参考用 medical_pay_future_value annual_medical_actual * (1 discount_rate) ** ( years_until_retirement - year - 1) # 5. 计算个人账户养老金 # 个人账户养老金 个人账户储存额 ÷ 计发月数 individual_pension individual_account_total / months_to_pay # 6. 汇总结果 total_pension basic_pension individual_pension # 退休后每月总养老金 total_social_security_actual pension_pay_actual medical_pay_actual # 社保总实际投入养老医保 total_social_security_future_value pension_pay_future_value medical_pay_future_value # 总投入折现终值 # 7. 返回所有计算结果 return { social_wage_at_retirement: social_wage_at_retirement, # 退休时上年度社平工资 basic_pension: basic_pension, # 基础养老金 individual_pension: individual_pension, # 个人账户养老金 total_pension: total_pension, # 总养老金 pension_pay_actual: pension_pay_actual, # 养老实际缴费总额 pension_pay_future_value: pension_pay_future_value, # 养老缴费折现终值 medical_pay_actual: medical_pay_actual, # 医保实际缴费总额 medical_pay_future_value: medical_pay_future_value, # 医保缴费折现终值 total_social_security_actual: total_social_security_actual, # 社保总实际投入 total_social_security_future_value: total_social_security_future_value, # 社保总投入折现终值 individual_account_total: individual_account_total # 个人账户储存额退休时 } # 调用示例 if __name__ __main__: # 假设条件 # - 起始社平工资 7500 元/月请替换为石狮市公布的2025年全口径月平均工资 # - 30岁开始缴费缴满20年后停缴再过10年到60岁退休总年限30年 # - 养老和医保均按最低档0.6缴纳 # - 社平工资年增长率4% # - 个人账户记账利率4% result calculate_pension_and_medical_v2( base_salary10000, # 请替换为石狮市最新全口径月平均工资 years_paid10, # 实际缴费20年 years_until_retirement30, # 从开始缴费到退休共30年 average_index3, # 养老最低档 medical_base_index3, # 医保最低档 medical_years_paid20, # 医保也缴费20年注意退休时可能年限不足需另行考虑 annual_growth_rate0.04, # 社平工资年增长率4% individual_interest_rate0.04, # 个人账户记账利率4% pension_contribution_ratio0.20, # 灵活就业养老缴费比例20% medical_contribution_ratio0.08, # 灵活就业医保缴费比例8% months_to_pay139 # 60岁退休计发月数 ) # 输出结果 print( 养老金测算结果 ) print(f退休时上年度社平工资{result[social_wage_at_retirement]:,.2f} 元/月) print(f基础养老金{result[basic_pension]:,.2f} 元/月) print(f个人账户养老金{result[individual_pension]:,.2f} 元/月) print(f总养老金{result[total_pension]:,.2f} 元/月) print() print(f养老实际缴费总额{result[pension_pay_actual]:,.2f} 元) print(f医保实际缴费总额{result[medical_pay_actual]:,.2f} 元) print(f养老缴费总额折现价值{result[pension_pay_future_value]:,.2f} 元) print(f医保缴费总额折现价值{result[medical_pay_future_value]:,.2f} 元) print(f社保总投入养老医保{result[total_social_security_actual]:,.2f} 元) print() print(f个人账户储存额退休时含停缴期间利息{result[individual_account_total]:,.2f} 元)