延迟退休计算器 - 竞品调研 + PRD
项目信息
- 状态:PRD 完成,待开发
- 目标上线:2026年5月
- 类目:工具-效率(个人主体可发布)
- 变现方式:流量主广告
- 开发周期:≤ 2天(纯前端)
一、竞品调研简报
竞品概况
官方渠道:
- 人社部「法定退休年龄计算器」小程序(国务院客户端/人社部公众号/12333平台同步上线),2024年9月政策发布时推出,权威但体验一般
- 各地人社局官网也有在线计算器(如北京、上海人社局官网)
第三方小程序/App:
- 应用宝「延迟退休计算器」App,功能大杂烩(退休+个税+房贷+生育津贴),体验臃肿
- 东方财富退休计算器(H5),绑定金融产品导流
- CSDN 上有开源小程序源码(带广告变现),功能单一但可用
- V2EX 用户自建 Web 版(retirement-age-calculator.heyfe.org),蹭热度开发,存在计算 bug
- iOS App Store 上至少 2 个「退休年龄计算器」App
小程序特点:CSDN 开源项目显示市面上已有「看广告流量主」模式的退休计算器小程序,核心功能雷同——输入性别/出生年月/身份→输出退休年龄和延迟月数。
市场信号
- 政策 2025年1月1日实施,热度持续,知乎文章和 CSDN 开源项目在 2025-2026 年仍持续更新
- 知乎文章「AI 编程做退休计算工具」明确提出「1-2周就能拥有自己的变现小程序,在民生服务赛道中持续获取稳定流量与收益」
- 弹性退休制度 2025年1月起实施,用户需要了解弹性提前/延迟退休的规则
用户痛点
- 女性身份分不清:女工人(原50岁)vs 女干部(原55岁)是最大痛点。V2EX 上计算器开发者把两者搞反了;多地法院案例显示「管理岗 vs 非管理岗」认定标准模糊,用户根本不知道自己属于哪类
- 弹性退休不会算:提前最多3年、延迟最多3年,加上最低缴费年限逐步提高(2030年起15→20年),组合条件复杂,现有工具几乎不覆盖
- 广告太多体验差:V2EX 用户直接吐槽「小程序版一堆广告」,官方计算器被挤爆时第三方工具广告泛滥
- 界面难用:官方计算器入口深(需通过公众号/城市服务),第三方工具 UI 粗糙,V2EX 用户吐槽「界面一看就是 AI 写的」
差异化机会
- 弹性退休计算:市面上几乎没有工具支持弹性退休场景(提前/延迟),这是政策亮点,用户刚需
- 身份智能引导:帮用户判断自己属于哪类(管理岗/非管理岗),而不是让用户自己选一个不知道对不对的选项
- 简洁无干扰:计算工具,打开→输入→出结果,3步完成,不加多余功能
二、PRD
1. 产品概述
- 产品定位:最简洁准确的延迟退休计算器,3秒算出退休年龄
- 目标用户:20-55岁在职职工,尤其是不确定自己属于哪类退休人群的女性职工
- 核心价值:政策准确 + 弹性退休计算 + 身份引导,零学习成本
2. MVP 功能清单
| 功能 | 优先级 | 描述 | 前端/后端 | |------|--------|------|-----------| | 退休年龄计算 | P0 | 输入性别、出生年月、人员类型,计算改革后法定退休年龄 | 纯前端 | | 弹性退休计算 | P0 | 显示可提前退休的最早年龄、可延迟退休的最晚年龄 | 纯前端 | | 结果分享 | P0 | 生成分享卡片(退休年龄+延迟月数+弹性范围),支持分享给好友 | 纯前端 |
3. 页面结构
| 页面 | 功能 | 核心组件 | |------|------|----------| | 首页(计算页) | 输入信息 + 实时展示结果 + 分享 | 性别选择器、出生年月选择器、人员类型选择(附提示文案)、结果卡片、分享按钮 | | 政策说明页 | 延迟退休政策要点 + 对照表 | 折叠面板展示政策原文摘要,人员类型判定说明 |
共 2 个页面,tabBar 不需要,全部用 navigateTo。
人员类型选择说明:选项旁加提示文案「不确定可查看说明→」,点击跳转政策说明页,说明页中解释管理技术岗 vs 非管理岗的判定标准。
4. 数据模型
政策对照表数据(JSON,前端内置):
{
"policy": {
"effectiveDate": "2025-01-01",
"rules": {
"male": {
"originalAge": 60,
"targetAge": 63,
"delayInterval": "每4个月延迟1个月",
"startYear": 2025,
"transitionYears": 15
},
"femaleCadre": {
"originalAge": 55,
"targetAge": 58,
"delayInterval": "每4个月延迟1个月",
"startYear": 2025,
"transitionYears": 15
},
"femaleWorker": {
"originalAge": 50,
"targetAge": 55,
"delayInterval": "每2个月延迟1个月",
"startYear": 2025,
"transitionYears": 15
}
},
"elastic": {
"earlyMaxYears": 3,
"lateMaxYears": 3,
"minAge": { "femaleWorker": 50, "femaleCadre": 55, "male": 60 }
},
"minContribution": {
"currentYears": 15,
"targetYears": 20,
"increaseStart": "2030-01-01",
"increaseInterval": "每年增加6个月"
}
}
}
用户输入数据:
- 性别(男/女)
- 出生年月(年+月选择器)
- 人员类型(男职工 / 女职工-管理技术岗 / 女职工-非管理岗)
5. 用户流程
首次使用流程:
- 打开小程序 → 看到简洁计算界面
- 选择性别 → 选择出生年月
- 选择人员类型(女性时选项旁有提示文案)
- 实时展示结果卡片(法定退休年龄 + 延迟月数 + 弹性退休范围)
- 点击「分享给朋友」→ 生成分享卡片
日常使用流程:
- 打开小程序 → 修改输入 → 立即看到更新结果(实时计算)
- 分享给同事/家人
6. 退休年龄计算逻辑
政策依据:
- 《全国人民代表大会常务委员会关于实施渐进式延迟法定退休年龄的决定》(2024年9月13日通过)
- 《国务院关于渐进式延迟法定退休年龄的办法》
- 《实施弹性退休制度暂行办法》(2025年1月1日起施行)
男性职工:
- 原法定退休年龄:60周岁
- 改革后目标:63周岁
- 节奏:每4个月延迟1个月
- 过渡期:2025年1月 - 2039年12月(15年)
- 计算:
- 原退休月份 = 60 * 12 = 720
- 达到原退休年龄时的年月 = 出生年月 + 720个月
- 该年月距 2025年1月 的月数 = (达到原退休年龄年月 - 2025年1月)
- 延迟月数 = ceil(距2025年1月的月数 / 4)
- 但延迟月数上限 = (63 - 60) * 12 = 36个月
- 新退休年龄 = floor((60×12 + 延迟月数) / 12) 岁零 (延迟月数 % 12) 月
女性干部(管理技术岗):
- 原法定退休年龄:55周岁
- 改革后目标:58周岁
- 节奏:每4个月延迟1个月
- 过渡期:2025年1月 - 2039年12月(15年)
- 计算逻辑同男性,基准从60改55,上限从63改58
女性工人(非管理岗):
- 原法定退休年龄:50周岁
- 改革后目标:55周岁
- 节奏:每2个月延迟1个月(比男性/女干部更快)
- 过渡期:2025年1月 - 2039年12月(15年)
- 延迟月数上限 = (55 - 50) * 12 = 60个月
- 计算:延迟月数 = ceil(距2025年1月的月数 / 2)
具体算法(通用公式):
function calculate(birthYear, birthMonth, gender, type) {
const originalAge = { male: 60, femaleCadre: 55, femaleWorker: 50 }[type]
const targetAge = { male: 63, femaleCadre: 58, femaleWorker: 55 }[type]
const intervalMonths = type === 'femaleWorker' ? 2 : 4
const maxDelayMonths = (targetAge - originalAge) * 12
// 原退休年月
const originalRetireYear = birthYear + originalAge
const originalRetireMonth = birthMonth
// 距 2025年1月的月数(1-indexed:2025年1月=1)
const monthsSince2025 = (originalRetireYear - 2025) * 12 + originalRetireMonth
if (monthsSince2025 <= 0) {
// 2025年1月前已到原退休年龄,不受影响
return { retireAge: originalAge, delayMonths: 0, retireMonths: 0 }
}
// 延迟月数(向上取整)
const delayMonths = Math.min(
Math.ceil(monthsSince2025 / intervalMonths),
maxDelayMonths
)
// 新退休年龄(岁+月)
const newAgeMonths = originalAge * 12 + delayMonths
const newAge = Math.floor(newAgeMonths / 12)
const newAgeRemainder = newAgeMonths % 12
// 弹性退休范围
const elasticEarly = Math.max(originalAge, newAge - 3) // 不低于原退休年龄
const elasticLate = newAge + 3
return {
retireAge: newAge,
retireMonths: newAgeRemainder,
delayMonths,
originalAge,
elasticEarly,
elasticLate
}
}
弹性退休规则:
- 提前退休:达到最低缴费年限后,可自愿提前退休,最多提前3年,但退休年龄不得低于原法定退休年龄(男60/女管理岗55/女非管理岗50)
- 延迟退休:达到法定退休年龄后,与单位协商一致可延迟退休,最多延迟3年
- 不得违背职工意愿强制选择退休年龄
- 前提条件:弹性退休需满足所选退休时间对应年份的最低缴费年限(弹性退休暂行办法第7条)
- 不适用情形:2024年12月31日前已达到原法定退休年龄的人员不适用弹性退休(第14条);已在领取养老金的不适用(第10条)
最低缴费年限:
- 2025-2029年:15年不变
- 2030年1月起:每年提高6个月,逐步从15年提高至20年
7. 非功能需求
- 性能:计算即时完成,无网络请求
- 准确:计算结果与官方对照表完全一致,需用多组数据交叉验证
- 隐私:不收集任何用户数据,不联网(除广告 SDK)
- 体积:小程序包体 < 1MB
- 兼容:基础库 2.0+,覆盖 99%+ 用户
- 无障碍:大字体、高对比度,照顾中老年用户
8. 验收标准
- [ ] 输入任意出生年月 + 性别 + 人员类型,计算结果与官方对照表一致
- [ ] 弹性退休年龄范围显示正确(提前不超过3年且不低于原退休年龄,延迟不超过3年)
- [ ] 2025年1月前已达原退休年龄的用户显示「不受影响」
- [ ] 已过过渡期用户(如1976年9月及以后出生的男性)显示最终退休年龄(63岁)
- [x] 身份引导已砍掉,改为选项旁提示文案 + 政策说明页
- [ ] 结果可分享给微信好友
- [ ] 首页加载 < 1秒
- [ ] 无广告遮挡核心结果
PRD 评审报告
评审时间:2026-05-09 评审人:喵喵(独立评审)
评审结果:⚠️ 需修改
核心问题:JS 计算算法存在系统性偏差,所有结果延迟月数少算 1 个月,必须修正后才能开发。
退休年龄规则验证
权威来源
- 《全国人民代表大会常务委员会关于实施渐进式延迟法定退休年龄的决定》(2024年9月13日第十四届全国人民代表大会常务委员会第十一次会议通过)
- 全文来源:https://m.12371.gov.cn/content/2024-09/13/content_472894.html
- 国务院转载:https://www.gov.cn/yaowen/liebiao/202409/content_6974294.htm
- 《国务院关于渐进式延迟法定退休年龄的办法》(全国人大常委会批准,附于决定之后)
- 同上链接,包含附件1-4对照表
- 《实施弹性退休制度暂行办法》(人社部发〔2024〕94号,人社部、中组部、财政部联合印发)
- 全文来源:https://www.mohrss.gov.cn/SYrlzyhshbzb/shehuibaozhang/zcwj/202501/t20250101_533701.html
- 官方延迟退休对照表(人社部附件,12333平台同步发布)
- PDF 来源:https://file.m12333.cn/upfile/download/be4199a3-1a6a-448b-c286-4351c9ac8ce1.pdf(男职工)
- 对照表整理版:http://sh.bendibao.com/news/2024913/291108.shtm(含三类人群完整对照表)
规则对比
| 规则项 | PRD 描述 | 权威来源 | 是否一致 | |--------|---------|---------|--------| | 男性职工:原60→63岁 | ✅ 正确 | 决定第一条:男职工法定退休年龄每四个月延迟一个月,逐步延迟至六十三周岁 | ✅ 一致 | | 男性职工:每4个月延迟1个月 | ✅ 正确 | 同上 | ✅ 一致 | | 女性干部/管理岗:原55→58岁 | ✅ 正确 | 决定第一条:原法定退休年龄为五十五周岁的女职工,每四个月延迟一个月,逐步延迟至五十八周岁 | ✅ 一致 | | 女性工人/非管理岗:原50→55岁 | ✅ 正确 | 决定第一条:原法定退休年龄为五十周岁的女职工,每二个月延迟一个月,逐步延迟至五十五周岁 | ✅ 一致 | | 女性工人:每2个月延迟1个月 | ✅ 正确 | 同上 | ✅ 一致 | | 过渡期15年 | ✅ 正确 | 决定第一条:用十五年时间(2025-2039) | ✅ 一致 | | 弹性提前退休:最多3年 | ✅ 正确 | 决定第三条/弹性办法第一条:提前时间最长不超过三年 | ✅ 一致 | | 弹性提前退休:不低于原法定退休年龄 | ✅ 正确 | 决定第三条:退休年龄不得低于女职工五十周岁、五十五周岁及男职工六十周岁的原法定退休年龄 | ✅ 一致 | | 弹性延迟退休:最多3年 | ✅ 正确 | 弹性办法第四条:延迟时间距法定退休年龄最长不超过3年 | ✅ 一致 | | 弹性延迟退休:需协商一致 | ✅ 正确 | 决定第三条/弹性办法第四条:所在单位与职工协商一致 | ✅ 一致 | | 最低缴费年限:2025-2029年15年 | ✅ 正确 | 决定第二条:从2030年1月1日起... | ✅ 一致 | | 最低缴费年限:2030年起每年+6个月→20年 | ✅ 正确 | 决定第二条:每年提高六个月 | ✅ 一致 | | 人员类型分类(管理技术岗/非管理岗) | ✅ 基本准确 | 政策原文用「原法定退休年龄为五十/五十五周岁」,实践中按岗位划分。东方财富等参考源也用「管理技术岗/非管理岗」表述 | ✅ 可接受 |
算法验证(17 组测试用例)
关键发现:PRD 中的 JS 算法存在系统性偏差,所有非边界结果延迟月数少算 1 个月。
错误根因:PRD 使用 0-indexed 计算距 2025 年 1 月的月数(origRetireMonth - 1),并使用 floor 除法。但官方对照表的实际规则是 1-indexed(2025年1月 = 第 1 个月),应使用 ceil 除法。
具体差异:
- PRD:
monthsSince2025 = (year - 2025) * 12 + (month - 1),然后floor(ms / interval) - 正确:
monthsSince2025 = (year - 2025) * 12 + month,然后ceil(ms / interval)(当 ms > 0 时)
| # | 测试用例 | 输入 | PRD 算法结果 | 官方对照表结果 | 是否一致 | |---|---------|------|-------------|---------------|--------| | 1 | 男性 1970年1月 | male, 1970-01 | 61岁3个月(延迟15) | 61岁4个月(延迟16) | ❌ 差1月 | | 2 | 男性 1975年6月 | male, 1975-06 | 62岁7个月(延迟31) | 62岁8个月(延迟32) | ❌ 差1月 | | 3 | 男性 1965年1月 | male, 1965-01 | 60岁0个月(不受影响) | 60岁1个月(延迟1) | ❌ 差1月 | | 4 | 男性 1964年12月 | male, 1964-12 | 60岁0个月(不受影响) | 60岁(不受影响) | ✅ 一致 | | 5 | 男性 1976年9月 | male, 1976-09 | 62岁11个月(延迟35) | 63岁(延迟36) | ❌ 差1月 | | 6 | 女管理岗 1975年6月 | femaleCadre, 1975-06 | 56岁4个月(延迟16) | 56岁5个月(延迟17) | ❌ 差1月 | | 7 | 女管理岗 1981年9月 | femaleCadre, 1981-09 | 57岁11个月(延迟35) | 58岁(延迟36) | ❌ 差1月 | | 8 | 女管理岗 1970年1月 | femaleCadre, 1970-01 | 55岁0个月(不受影响) | 55岁1个月(延迟1) | ❌ 差1月 | | 9 | 女工人 1975年1月 | femaleWorker, 1975-01 | 50岁0个月(不受影响) | 50岁1个月(延迟1) | ❌ 差1月 | | 10 | 女工人 1980年3月 | femaleWorker, 1980-03 | 52岁7个月(延迟31) | 52岁8个月(延迟32) | ❌ 差1月 | | 11 | 女工人 1984年11月 | femaleWorker, 1984-11 | 54岁11个月(延迟59) | 55岁(延迟60) | ❌ 差1月 | | 12 | 女工人 1974年11月 | femaleWorker, 1974-11 | 50岁(不受影响) | 50岁(不受影响) | ✅ 一致 | | 13 | 女工人 1976年11月 | femaleWorker, 1976-11 | 50岁(不受影响) | 51岁(延迟12) | ❌ 差12月 | | 14 | 男性 1970年9月 | male, 1970-09 | 61岁5个月(延迟17) | 61岁6个月(延迟18) | ❌ 差1月 | | 15 | 女工人 1975年9月 | femaleWorker, 1975-09 | 50岁4个月(延迟4) | 50岁5个月(延迟5) | ❌ 差1月 | | 16 | 男性 1968年9月 | male, 1968-09 | 60岁11个月(延迟11) | 61岁(延迟12) | ❌ 差1月 | | 17 | 女工人 1975年5月 | femaleWorker, 1975-05 | 50岁2个月(延迟2) | 50岁3个月(延迟3) | ❌ 差1月 |
统计:17 组测试中仅 2 组一致(恰好是不受影响的边界情况),15 组错误。所有错误均为延迟月数少算 1 个月。
修正后的正确算法:
function calculate(birthYear, birthMonth, gender, type) {
const originalAge = { male: 60, femaleCadre: 55, femaleWorker: 50 }[type]
const targetAge = { male: 63, femaleCadre: 58, femaleWorker: 55 }[type]
const intervalMonths = type === 'femaleWorker' ? 2 : 4
const maxDelayMonths = (targetAge - originalAge) * 12
const originalRetireYear = birthYear + originalAge
const originalRetireMonth = birthMonth
// 1-indexed: 2025年1月 = 1, 2025年2月 = 2, ...
const monthsSince2025 = (originalRetireYear - 2025) * 12 + originalRetireMonth
if (monthsSince2025 <= 0) {
return { retireAge: originalAge, delayMonths: 0, retireMonths: 0 }
}
// 向上取整:每 intervalMonths 个月延迟 1 个月
const delayMonths = Math.min(
Math.ceil(monthsSince2025 / intervalMonths),
maxDelayMonths
)
const newAgeMonths = originalAge * 12 + delayMonths
const newAge = Math.floor(newAgeMonths / 12)
const newAgeRemainder = newAgeMonths % 12
const elasticEarly = Math.max(originalAge, newAge - 3)
const elasticLate = newAge + 3
return {
retireAge: newAge,
retireMonths: newAgeRemainder,
delayMonths,
originalAge,
elasticEarly,
elasticLate
}
}
修正后的算法经 17 组测试全部通过 ✅
其他评审
| # | 严重程度 | 问题 | 建议 |
|---|---------|------|------|
| 1 | 🔴 严重 | JS 算法系统性偏差,所有延迟月数少算 1 个月 | 使用上述修正算法,将 floor 改为 ceil,将月数计算改为 1-indexed |
| 2 | 🟡 中等 | 弹性退休规则遗漏「最低缴费年限」前提条件 | 弹性退休暂行办法第 7 条明确要求:弹性提前退休须达到所选退休时间对应年份的最低缴费年限。建议在结果展示中增加提示 |
| 3 | 🟡 中等 | PRD 未提及「已退休人员」的弹性退休适用限制 | 弹性退休暂行办法第 14 条:2024年12月31日前已达到原法定退休年龄的人员不适用弹性退休。已在领取养老金的也不适用(第 10 条) |
| 4 | 🟡 中等 | 验收标准「1977年1月后出生的男性显示63岁」表述不够精确 | 正确应为「1976年9月及以后出生的男性」。1976年9月是第一个达到63岁的男性出生月份 |
| 5 | 🟢 低 | 过渡期描述「2025年1月 - 2039年12月」略不精确 | 过渡期实际从退休日期看是 2025年2月(第一人延迟退休)到 2039年12月(最后一批过渡完成)
| 6 | 🟢 低 | 人员类型叫法「管理技术岗 / 非管理岗」基本准确,但政策原文不直接使用这些词汇 | 政策原文用「原法定退休年龄为五十/五十五周岁的女职工」。实际判定标准由各地执行。建议政策说明页引用政策原文表述 |
| 7 | 🟢 低 | 分享卡片未设计具体的视觉方案 | 建议补充分享卡片的 mockup 或设计要点(如包含计算时间戳、免责声明等) |
| 8 | 🟢 低 | PRD 中「目标上线:2025年5月」已过期 | 应更新为实际目标时间 |
| 9 | 🟢 低 | 缺少「特殊工种提前退休」的说明 | 政策第八条涉及特殊工种提前退休(井下、高空、高温等),PRD 可在政策说明页简要提及 |
修改建议
-
【必须】替换 JS 算法:将 PRD 第 6 节中的计算函数替换为上述修正版本。核心改动两处:
monthsSince2025 = (originalRetireYear - 2025) * 12 + originalRetireMonth(去掉-1)Math.ceil(monthsSince2025 / intervalMonths)(floor改为ceil)
-
【建议】补充弹性退休前提条件:在弹性退休规则说明中增加「需满足最低缴费年限」的要求,并可在结果展示中加一行小字提示。
-
【建议】修正验收标准:将「1977年1月后出生的男性」改为「1976年9月及以后出生的男性」。
-
【建议】更新目标上线时间:将「2025年5月」更新为实际计划时间。
PRD 复审报告(第二轮)
复审时间:2026-05-09 复审人:喵喵(独立复审)
复审结果:⚠️ 需微调(算法核心已修复,文字描述有一处笔误)
算法验证
验证方法:用修正后的 PRD 算法(ceil + 1-indexed)计算,与官方对照表逐条对比。官方对照表来源:人社部附件(上海本地宝转载版 http://sh.bendibao.com/news/2024913/291108.shtm),交叉验证沈阳人社局权威解答(shenyang.gov.cn)。
必测用例(10组):
| # | 测试用例 | 输入 | PRD 算法结果 | 官方对照表结果 | 是否一致 | |---|---------|------|-------------|---------------|--------| | 1 | 男性 1964年12月(不受影响) | male, 1964-12 | 60岁(延迟0) | 60岁(不受影响) | ✅ | | 2 | 男性 1965年1月(第一个受影响) | male, 1965-01 | 60岁1月(延迟1) | 60岁1个月(延迟1) | ✅ | | 3 | 男性 1970年1月 | male, 1970-01 | 61岁4月(延迟16) | 61岁4个月(延迟16) | ✅ | | 4 | 男性 1976年9月(第一个达63岁) | male, 1976-09 | 63岁(延迟36) | 63岁(延迟36) | ✅ | | 5 | 男性 1976年10月(稳定63岁) | male, 1976-10 | 63岁(延迟36) | 63岁(延迟36) | ✅ | | 6 | 女管理岗 1970年1月 | femaleCadre, 1970-01 | 55岁1月(延迟1) | 55岁1个月(延迟1) | ✅ | | 7 | 女管理岗 1981年9月(第一个达58岁) | femaleCadre, 1981-09 | 58岁(延迟36) | 58岁(延迟36) | ✅ | | 8 | 女工人 1974年11月(不受影响) | femaleWorker, 1974-11 | 50岁(延迟0) | 50岁(不受影响) | ✅ | | 9 | 女工人 1975年1月(第一个受影响) | femaleWorker, 1975-01 | 50岁1月(延迟1) | 50岁1个月(延迟1) | ✅ | | 10 | 女工人 1984年11月(第一个达55岁) | femaleWorker, 1984-11 | 55岁(延迟60) | 55岁(延迟60) | ✅ |
额外抽样验证(20组):
| # | 输入 | PRD 结果 | 官方结果 | 是否一致 | |---|------|---------|---------|--------| | 1 | male, 1965-05 | 60岁2月(延迟2) | 60岁2个月(延迟2) | ✅ | | 2 | male, 1966-01 | 60岁4月(延迟4) | 60岁4个月(延迟4) | ✅ | | 3 | male, 1968-05 | 60岁11月(延迟11) | 60岁11个月(延迟11) | ✅ | | 4 | male, 1968-09 | 61岁(延迟12) | 61岁(延迟12) | ✅ | | 5 | male, 1972-09 | 62岁(延迟24) | 62岁(延迟24) | ✅ | | 6 | male, 1975-05 | 62岁8月(延迟32) | 62岁8个月(延迟32) | ✅ | | 7 | male, 1976-05 | 62岁11月(延迟35) | 62岁11个月(延迟35) | ✅ | | 8 | femaleCadre, 1970-05 | 55岁2月(延迟2) | 55岁2个月(延迟2) | ✅ | | 9 | femaleCadre, 1973-09 | 56岁(延迟12) | 56岁(延迟12) | ✅ | | 10 | femaleCadre, 1977-09 | 57岁(延迟24) | 57岁(延迟24) | ✅ | | 11 | femaleCadre, 1981-05 | 57岁11月(延迟35) | 57岁11个月(延迟35) | ✅ | | 12 | femaleWorker, 1975-03 | 50岁2月(延迟2) | 50岁2个月(延迟2) | ✅ | | 13 | femaleWorker, 1975-09 | 50岁5月(延迟5) | 50岁5个月(延迟5) | ✅ | | 14 | femaleWorker, 1976-11 | 51岁(延迟12) | 51岁(延迟12) | ✅ | | 15 | femaleWorker, 1978-11 | 52岁(延迟24) | 52岁(延迟24) | ✅ | | 16 | femaleWorker, 1980-11 | 53岁(延迟36) | 53岁(延迟36) | ✅ | | 17 | femaleWorker, 1982-11 | 54岁(延迟48) | 54岁(延迟48) | ✅ | | 18 | femaleWorker, 1984-09 | 54岁11月(延迟59) | 54岁11个月(延迟59) | ✅ | | 19 | femaleWorker, 1976-03 | 50岁8月(延迟8) | 50岁8个月(延迟8) | ✅ | | 20 | femaleWorker, 1979-09 | 52岁5月(延迟29) | 52岁5个月(延迟29) | ✅ |
结论:算法核心逻辑(ceil + 1-indexed)已修复,全部 30 组测试用例与官方对照表一致。✅
第一轮修正验证
| 修改项 | 状态 | 备注 |
|--------|------|------|
| JS 算法 floor → ceil | ✅ 已修复 | 第198行 Math.ceil(monthsSince2025 / intervalMonths) |
| JS 算法 month - 1 → month | ✅ 已修复 | 第191行 (originalRetireYear - 2025) * 12 + originalRetireMonth,无 -1 |
| 文字描述中两处 ceil(延迟月数计算) | ✅ 已修复 | 第157行男性、第174行女工人均用 ceil |
| 弹性退休补充最低缴费年限前提 | ✅ 已修复 | 第226行:「前提条件:弹性退休需满足所选退休时间对应年份的最低缴费年限(弹性退休暂行办法第7条)」 |
| 弹性退休补充不适用情形 | ✅ 已修复 | 第227行:「不适用情形:2024年12月31日前已达到原法定退休年龄的人员不适用弹性退休(第14条);已在领取养老金的不适用(第10条)」 |
| 验收标准 1977年1月 → 1976年9月 | ✅ 已修复 | 第247行:「已过过渡期用户(如1976年9月及以后出生的男性)显示最终退休年龄(63岁)」 |
| 目标上线时间 2025 → 2026 | ✅ 已修复 | 第5行:「目标上线:2026年5月」 |
新发现问题
| # | 严重程度 | 问题 | 建议 |
|---|---------|------|------|
| 1 | 🟡 中等 | 第159行文字描述「新退休年龄 = 60 + ceil(延迟月数 / 12) 岁」表述有误。当延迟月数=13时,60 + ceil(13/12) = 62,但实际应为 61岁1个月(floor(733/12) = 61)。JS代码本身是正确的(Math.floor(newAgeMonths / 12)),仅文字描述与代码不一致 | 将第159行改为「新退休年龄 = floor((60×12 + 延迟月数) / 12) 岁,余数为月数」。同理检查女干部/女工人部分是否有类似描述 |
| 2 | 🟢 低 | 不受影响的人(monthsSince2025 <= 0),JS 代码返回值不含 elasticEarly / elasticLate 字段,与受影响时的返回值结构不一致。虽然前端可以根据 status: "不受影响" 判断不显示弹性退休,但建议统一返回值结构(或明确在 PRD 中标注此行为) | 在 PRD 算法代码中,不受影响的分支也返回 elasticEarly: originalAge, elasticLate: originalAge + 3,保持结构一致。或者在前端逻辑中明确「不受影响时不展示弹性退休范围」 |
| 3 | 🟢 低 | 弹性退休范围展示:PRD 算法中 elasticEarly = Math.max(originalAge, newAge - 3) 是正确的(与沈阳人社局官方解答一致),但 PRD 未明确「前端如何展示弹性退休范围」。建议在 MVP 功能清单或页面结构中补充 | 在结果卡片中展示「弹性退休范围:XX岁 ~ YY岁」,并标注「需满足最低缴费年限」 |
其他维度检查
| 维度 | 状态 | 备注 |
|------|------|------|
| MVP 范围 | ✅ 合理 | 3个P0功能(退休年龄计算、弹性退休计算、结果分享),纯前端,≤2天 |
| 页面结构 | ✅ 自洽 | 2个页面(首页+政策说明页),navigateTo,无需 tabBar |
| 数据模型 | ✅ 完整 | 政策数据 JSON 定义清晰,用户输入明确 |
| 验收标准 | ✅ 覆盖 | 算法准确性、弹性退休、不受影响边界、过渡期终点、分享、性能、无广告 |
| 边界条件 monthsSince2025 <= 0 | ✅ 正确 | 1964年12月男性(ms=0)、1974年11月女工人(ms=-1)、1964年12月女管理岗(ms=-60)均正确判定为不受影响 |
| 弹性退休 elasticEarly | ✅ 正确 | max(originalAge, newAge - 3) 与沈阳人社局官方解答一致:男性63岁→60~66岁、女管理岗58岁→55~61岁、女工人55岁→52~58岁 |
| newAgeRemainder 边界 | ✅ 正确 | 1968年9月男性(延迟12月→61岁0月)、1976年9月男性(延迟36月→63岁0月)、1984年11月女工人(延迟60月→55岁0月)均正确 |
总结
核心算法已修复:第一轮发现的系统性偏差(floor → ceil,0-indexed → 1-indexed)已全部正确修正,30组测试用例与官方对照表完全一致。
需要微调一处:第159行文字描述「新退休年龄 = 60 + ceil(延迟月数 / 12)」应改为 floor((60×12 + 延迟月数) / 12),与 JS 代码保持一致。这不影响开发(JS代码是正确的),但影响 PRD 的准确性。
建议:修正文字描述后即可进入开发。