Pension Calc — 城镇职工养老金测算
Overview
按延迟退休新政(2025-01-01 施行)与国发〔2005〕38 号计发月数表,测算城镇职工退休后的月养老金:
- 退休年龄推算:按出生年月套用渐进式延迟退休表(男职工 60→63,每 4 个月延迟 1 个月;女管理/技术岗 55→58,每 4 个月延迟 1 个月;女工人岗 50→55,每 2 个月延迟 1 个月)。
- 基础养老金 = 退休上年度社平工资 × (1 + 平均缴费指数) ÷ 2 × 累计缴费年限 × 1%
- 个人养老金 = 退休时个人账户储存额 ÷ 计发月数(50 岁 195 个月 ~ 63 岁 117 个月)
When to use this skill
触发场景:
- "我 XX 岁了,退休能拿多少钱"
- "延迟退休后我什么时候退休 / 几岁退休"
- "帮我算养老金 / 退休金"
- "个人账户里的钱退休后每月能领多少"
不要触发:城乡居民养老保险(缴费低、待遇低,公式不同)、机关事业单位、只问政策条文不需要计算、公积金。
Workflow
第 1 步:收集 6 个参数(缺什么问什么,每次只问缺的,问完即算)
提问形式(重要):向用户收集参数时必须用选择题,不要开放式文字提问。宿主有结构化提问/选项工具(如选择题、AskUserQuestion 类)时必须使用该工具;没有选项 UI 的宿主则在文本里用编号列表给出候选项让用户回复编号。每个问题给出候选项 + 推荐默认值,用户不想细答可以直接选默认。
一次性收集(一次提问里并列所有缺失项,不要挤牙膏式逐个追问),每项的选项:
| 参数 | CLI 选项 | 选择题选项设计 |
|---|---|---|
| 当前年龄 | --age |
开放数值(用户已给出则不问);可从"我是 1975 年的"推算 |
| 退休身份 | --identity |
选项:男职工 / 女职工·管理技术岗(原55退) / 女职工·工人岗(原50退),附一句岗位判断说明 |
| 上年度社平工资 | --salary |
选项:深圳 13730 / 上海 12307 / 北京 11761 / 广州 12500 / 全国均值 10000 / 我自己填(数值来自 references 的 salary_reference) |
| 平均缴费指数 | --index |
选项:按最低档交(0.6)/ 正常档(1.0,推荐)/ 较高档(1.5)/ 高薪(2.0~3.0),附一句"≈本人工资÷社平工资" |
| 已缴纳年限 | --years |
开放数值;"工作 20 年一直交着"→ 20 |
| 个人账户余额 | --balance |
选项:我去查一下(支付宝/社保APP-个人权益记录)/ 按公式帮我估(估≈社平×指数×8%×12×年限,选估算必须明确告知是估算) |
身份推断规则(用户已经说清楚时直接翻译,不要再问):
- 男 → male
- 女 + 工人岗 / 普通职工 / 一线 / 原本 50 岁退休 → female_worker
- 女 + 管理岗 / 技术岗 / 干部 / 干管理或技术工作 / 原本 55 岁退休 → female_cadre
- 女性用户分不清时才出现在选择题说明里:"管理/技术岗按 55 岁旧标准延迟,工人岗按 50 岁"(默认按 female_worker,50 岁类占比更大)
第 2 步:运行脚本(禁止心算)
禁止人工推算任何数值结果——延迟月份、多步乘除、计发月数查表,人工算必错。一律执行脚本,且默认带 --image 生成卡片(卡片是本 skill 的标准交付物):
python3 scripts/pension.py \
--age 48 --identity female_cadre \
--salary 13730 --index 1.0 --years 23 --balance 96000 \
--image /tmp/pension_<age>_<identity>.png
加 --json 得结构化结果。社平增长率非默认 1% 时加 --salary-growth 0.02。
出图规则:
- 首次计算 → 必须出图。这是视觉交付物,不是可选项
- 调整假设重算对比("要是按最低档呢""按上海社平呢")→ 中间过程只出文本对比,用户确定的最终方案再出图,避免刷屏
- 用户明确说"不用图/直接说结果" → 尊重,纯文本
- 图片生成失败(缺 Pillow 等)→ 不要中断,回退文本表格并说明可 pip install pillow 后重试出图
第 3 步:向用户呈现
- 引用 headline 数字:退休年龄(X 岁 + Y 个月) 和 合计 ¥Z / 月(基础 + 个人)
- 展示卡片(mandatory):宿主有
present_files类工具必须用它展示 PNG;没有的宿主把图片路径告诉用户。卡片=本次交付物,文本数字只是摘要 - 用一小段解释三个数各是什么(基础养老金 / 个人养老金)
- 必须主动说明本次使用的假设:社平工资取值、缴费指数默认值、账户余额是否为估算、社平按 1%/年增长推算
- 用户想改假设("要是按最低档交呢")→ 换
--index 0.6重跑再对比(见出图规则:中间不出图) - 结果以"实际以社保经办机构核定为准"收尾
Quick reference
延迟退休速查(脚本内部逻辑,供对话引用):
- 1965 年 1 月前出生的男职工:仍 60 岁退休,不受影响
- 越晚出生延迟越多:男职工 1976 年 9 月后出生 → 63 岁封顶
- 计发月数:50 岁 195 / 55 岁 170 / 60 岁 139 / 63 岁 117
边界处理(脚本自动校验,报错信息可原样转述给用户):
- 缴费指数必须在 0.6~3;已缴年限不能大于当前年龄;账户余额需 > 0
- 退休年龄触顶 63/58/55 后按上限算(结果带 retire_age_capped 标记)
Examples
例 1 — 48 岁女管理岗,深圳(首次计算,带卡片)
python3 scripts/pension.py --age 48 --identity female_cadre \
--salary 13730 --index 1.0 --years 23 --balance 96000 \
--image /tmp/pension_48_cadre.png
例 2 — 35 岁男,按最低档缴费
python3 scripts/pension.py --age 35 --identity male \
--salary 10000 --index 0.6 --years 10 --balance 30000 \
--image /tmp/pension_35_male.png
例 3 — 对比场景(中间过程不出图,纯文本)
python3 scripts/pension.py --age 48 --identity female_cadre \
--salary 13730 --index 0.6 --years 23 --balance 50000
用户选定方案后再补 --image 出最终卡片。
Updating the data
- 社平工资参考值每年 6~7 月更新:改
references/pension_rules.json的salary_reference.values与meta.updated - 延迟退休表/计发月数为国家标准,除非政策修订否则不动
- 改完 json 记得同步
scripts/pension.py顶部的EMBEDDED_RULES(兜底值)
Resources
scripts/
pension.py— 唯一入口。CLI 见--help;纯标准库,无第三方依赖;decimal.Decimal复刻 Java BigDecimal HALF_UP 精度。render_card.py— 被pension.py --image懒加载调用;也可单独运行(stdin 读 JSON)。需 Pillow;跨平台中文字体 fallback(macOS/Linux/Windows)。
references/
pension_rules.json— 权威规则(身份表/计发月数/公式/假设/社平参考值),脚本运行时读取。
assets/
logo.png— 公司 logo(透明底 PNG 佳)。存在时自动贴到卡片右下角;删除该文件则卡片无 logo,不影响运行。更换品牌只需替换此文件。