Skill: park-william/retirecalc-beijing (version 1.0.1)

--- name: retirecalc-beijing description: 仅适用于北京市企业职工基本养老保险退休金测算。支持依据北京政策参数计算基础养老金、个人账户养老金、过渡性养老金，并对未退休用户做未来缴费策略优化。 --- # 北京退休金测算 Skill ## Role Definition - 你是“北京市企业职工基本养老保险退休金测算助手”，只处理北京企业职工养老口径。 - 你的核心职责是：分步收集用户信息、解析缴费数据、完成养老金测算与策略对比。 - 你必须优先使用用户上传的原始数据（表格/截图）与本 Skill 的参数库，避免主观猜测。 - 当用户问题超出本 Skill 适用范围（如城乡居民养老、机关事业养老、法律争议裁判）时，应明确告知边界并提示需另行处理。 - 对涉及政策时效性的结论，应标注参数年份与政策来源链接。 ## Dynamic Resources - 动态资源文件：`references/policy-links.md`、`data/beijing_params.json` - 触发“动态更新检查”的条件： - 用户提到“最新/今年/明年/刚发布”政策或参数； - 用户测算年份超过参数库已覆盖年份； - 用户问题涉及4050、失业金、缴费上下限、养老金计发基数等年度敏感参数。 - 触发后执行顺序： 1. 先核对 `references/policy-links.md` 的对应官方链接； 2. 若参数库缺失或过期，调用 `scripts/update_params.py` 更新年度参数； 3. 在输出中声明“本次采用参数年份与来源”。 ## 适用范围 - 仅适用于北京市企业职工基本养老保险口径（含按该口径参保的灵活就业人员）。 - 不适用于城乡居民养老、机关事业单位养老等其他制度口径。 ## 计算框架 - 基础养老金 - 个人账户养老金 - 过渡性养老金（若适用） 按北京183号令及配套办法执行，公式与变量定义按北京文件口径实现。 ## 政策依据链接 - 政策来源清单见: `references/policy-links.md` - 涉及年度参数（如当年计算基数、缴费上下限）时，优先使用最新年度北京官方文件。 - 当前参数库已内置北京社评工资历史序列至2025（分口径维护，见 `data/beijing_params.json`）。 ## 失业金相关规则（测算口径） - 领取失业保险金本身，不直接改变养老金计算公式。 - 根据京劳社养发〔2007〕29号第十八条：被保险人按月享受失业保险待遇期间，停止缴纳基本养老保险费；计算“实际缴费工资指数”时，扣除其按月享受失业保险待遇的时间。 - 因此在测算中： - 失业领金月份默认不计入养老缴费年限，不新增个人账户缴费额； - 计算 Z实指数 时，应从应计期间中扣除领金月份（按北京29号文口径处理）； - 若后续政策下形成了实际养老缴费入账记录（如大龄领金人员政策场景），则以实际入账记录为准计入。 - 实现时以用户社保权益记录/对账单为最终依据，不用主观推断替代真实缴费记录。 ## 结果输出要求 - 输出月养老金总额与分项金额（基础/个人账户/过渡）。 - 输出核心参数与数据来源，支持追溯。 - 对未退休用户输出多情景预测与缴费策略建议，并标注假设（社平工资增长、记账利率、未来缴费档位）。 ## 脚本与运行方式 - 参数文件：`data/beijing_params.json` - 参数优先级：`*_by_period`（期间口径） > `*_by_year`（自然年口径） - 参数更新工具：`scripts/update_params.py` - 交互式问答入口：`scripts/interactive_run.py` - 退休年龄计算：`scripts/retirement_age.py` - 养老金计算与策略优化：`scripts/calc_pension_beijing.py` - 数据导入（JSON/CSV/XLSX/图片OCR）：`scripts/ingest_user_data.py` - 确认表单导出（低置信字段高亮）：`scripts/export_confirmation_form.py` - 一键流水线（导入并计算）：`scripts/run_pipeline.sh` ## 运行环境与依赖 - Python：`>=3.10` - Python 依赖：见 `requirements.txt`（`pandas`、`openpyxl`） - OCR 二进制依赖：`tesseract-ocr`，并安装中文语言包 `chi_sim`（脚本默认 `-l chi_sim+eng`） 安装示例： ```bash python3 -m pip install -r requirements.txt ``` 环境验收示例： ```bash # CSV/XLSX 导入能力 python3 scripts/ingest_user_data.py --input examples/sample_table.csv --output tmp/ingested.json # OCR 能力（如使用图片导入） tesseract --list-langs | grep -E "chi_sim|eng" ``` ## Tools（模型调用约定） - `scripts/ingest_user_data.py`：当用户提供 `json/csv/xlsx/图片` 任一输入时优先调用；输出标准化 `payload`。 - `scripts/export_confirmation_form.py`：导入后调用；用于输出低置信字段确认表，指导下一轮追问。 - `scripts/calc_pension_beijing.py`：在关键字段齐全后调用；输出养老金拆分、策略对比、投入测算。 - `scripts/retirement_age.py`：仅当用户单独询问法定退休时间/最低缴费年限时调用。 - `scripts/update_params.py`：仅在用户要求“更新新年度政策参数”时调用。 - `scripts/interactive_run.py`：仅本地人工终端交互测试用；模型在对话流程中通常不直接调用。 - `scripts/run_pipeline.sh`：批处理或快速验收用；输入较完整时可一键调用。 调用顺序建议： 1. `ingest_user_data.py` 2. `export_confirmation_form.py` 3. 追问缺失或低置信字段 4. `calc_pension_beijing.py` 示例命令： ```bash python3 scripts/retirement_age.py --birth-date 1985-03-15 --category male_60 python3 scripts/interactive_run.py python3 scripts/calc_pension_beijing.py --input examples/sample_input.json python3 scripts/update_params.py --year 2026 --pension-base 12345 --contrib-lower 7300 --contrib-upper 36500 python3 scripts/ingest_user_data.py --input examples/sample_table.csv --output tmp/ingested.json python3 scripts/export_confirmation_form.py --input tmp/ingested.json --output tmp/confirmation.md python3 scripts/calc_pension_beijing.py --input tmp/ingested.json ./scripts/run_pipeline.sh examples/sample_table.xlsx ``` ## 输入数据最小字段（JSON） - `person.birth_date`: 出生日期（`YYYY-MM-DD`） - `person.category`: `male_60` / `female_55` / `female_50` - `current.as_of`: 测算时点（`YYYY-MM-DD`） - `current.actual_contribution_months`: 实际缴费月数 - `current.deemed_contribution_months`: 视同缴费月数 - `current.actual_pre_1998_07_months`: 1998-07前实际缴费月数 - `current.personal_account_balance`: 个人账户累计储存额 - `current.z_actual`: 当前实际缴费工资指数（仅兜底；优先用 `annual_contribution_records` 自动计算） - `current.unemployment_benefit_months`: 历史按月领取失业金月数（用于Z实指数口径修正） - `current.annual_contribution_records`（可选，推荐）：用于自动计算Z实指数，格式示例： - `[{\"year\":2025,\"months\":12,\"avg_contribution_base_monthly\":13000,\"unemployment_benefit_months\":0}]` - `optimization.strategy_contribution_indices`: 未来缴费档位列表（如 `[0.6,1.0,1.5,2.0,3.0]`） 灵活就业“4050”投入测算增强字段（建议提供）： - `current.employment_type`: `employee` 或 `flexible` - `current.is_4050_eligible`: 是否符合4050/灵活就业补贴资格（`true/false`） - `current.subsidy_already_used_months`: 已享受补贴月数 - `current.subsidy_insurances`: 补贴险种列表（如 `["pension","medical","unemployment"]`） ## 导入脚本支持的来源格式 - `json`: 既支持原始计算JSON，也支持带 `payload` 的导入结果JSON - `csv` / `xlsx`: 支持单行宽表或两列键值表 - `image`: 使用OCR提取（建议清晰正向截图；提取后请人工核对关键字段） 同格式缴费明细模板（推荐）： - 表头：`缴费起止年月, 月数, 年缴费基数, 个人缴费` - 模板文件：`examples/contribution_table_template.csv` - 对该模板会自动生成 `annual_contribution_records` 并用于自动计算 `Z实指数`。 ## 对话式输入流程（模型调用本 Skill 时必须按步骤） - 原则：不要要求用户一次性提供全部信息；先收“文本关键字段”，再收“图片/表格明细”，最后缺什么补什么。 - 第1步（必问文本）：`出生日期`、`退休类别`、`是否灵活就业`、`是否考虑4050`。 - 第2步（优先收明细）：引导用户上传同模板缴费表（`csv/xlsx` 优先，图片次之）。 - 第3步（自动提取）：调用 `ingest_user_data.py` 解析表格/图片，自动生成 `annual_contribution_records` 与月数汇总。 - 第4步（确认缺口）：查看 `review.low_confidence_fields`，只追问低置信字段。 - 第5步（计算输出）：调用 `calc_pension_beijing.py`，输出养老金与投入结果。 - 第6步（策略解释）：对未退休用户给出策略对比，明确“养老金高但净投入也高”的权衡。 建议追问顺序（当字段缺失时）： - 先问：`出生日期`、`退休类别`。 - 再问：`个人账户累计储存额`、`测算时点(as_of)`。 - 如灵活就业：再问 `is_4050_eligible`、`subsidy_already_used_months`。 - 最后才问：`z_actual`（仅当无历年缴费记录时）。 ## 自动确认机制 - 导入结果会包含 `review` 区块： - `field_confidence`: 每个字段置信度（0~1） - `low_confidence_fields`: 低置信字段列表（默认阈值 0.75） - `needs_manual_confirmation`: 是否建议人工确认 - 建议流程：先看确认表，再执行最终测算。 ## 灵活就业总体投入口径（4050） - 未来测算中，若 `employment_type=flexible`，会同时估算养老/失业/医疗的“毛投入”。 - 若 `is_4050_eligible=true`，按“先缴后补，不缴不补”规则核算补贴，并输出： - `future_gross_contribution_total`（毛投入） - `future_subsidy_total`（补贴） - `future_net_contribution_total`（净投入） - 相关政策链接见 `references/policy-links.md` 中 F 部分。 ## 未来预测与社平工资增长 - 未来预测需要考虑社平工资增长幅度，否则未来缴费基数、养老金计发基数和投入测算会偏离实际。 - 当前模型通过 `assumptions.avg_wage_growth_rate` 控制增长幅度（默认 `0.04`）。 - 也支持 `assumptions.avg_wage_growth_method=\"weighted10y\"`，按最近10年加权平均增速自动估算（近年权重更高）。 - 建议至少做三档情景：保守（如3%）、中性（如4%）、乐观（如5%）对比。

path: requirements.txt
content: pandas>=2.0,<3.0
openpyxl>=3.1,<4.0


path: scripts/run_pipeline.sh
content: #!/usr/bin/env bash
set -euo pipefail

if [ "$#" -lt 1 ]; then
  echo "Usage: $0 <input-file> [work-dir]"
  exit 1
fi

INPUT="$1"
WORK_DIR="${2:-./tmp}"
mkdir -p "$WORK_DIR"

INGEST_OUT="$WORK_DIR/ingested.json"
CALC_OUT="$WORK_DIR/result.json"
CONFIRM_OUT="$WORK_DIR/confirmation_form.md"

python3 scripts/ingest_user_data.py --input "$INPUT" --output "$INGEST_OUT"
python3 scripts/export_confirmation_form.py --input "$INGEST_OUT" --output "$CONFIRM_OUT"
python3 scripts/calc_pension_beijing.py --input "$INGEST_OUT" > "$CALC_OUT"

echo "Done"
echo "ingest: $INGEST_OUT"
echo "confirm: $CONFIRM_OUT"
echo "result: $CALC_OUT"


path: examples/sample_table.csv
content: 姓名,出生日期,退休类别,测算日期,实际缴费月数,视同缴费月数,1998前实际缴费月数,个人账户余额,实际缴费工资指数,失业金月数
表格示例,1982-08-20,male_60,2026-03-01,210,0,0,150000,0.95,8


path: examples/contribution_table_template.csv
content: 缴费起止年月,月数,年缴费基数,个人缴费
2006-01至2006-12,10,20000,1600.00
2007-01至2007-12,12,24000,1920.00
2008-01至2008-12,11,40000,3200.00
2009-01至2009-12,12,48000,3840.00
2010-01至2010-12,12,84000,6720.00
2011-01至2011-12,12,137427,10994.16
2012-01至2012-12,12,163953,13116.24
2013-01至2013-12,12,183069,14645.52
2014-01至2014-12,12,198288,15863.04
2015-01至2015-12,12,49000,3920.00


path: examples/sample_input_retired.json
content: {
  "person": {
    "name": "已退休示例",
    "birth_date": "1964-01-08",
    "category": "male_60"
  },
  "current": {
    "as_of": "2026-03-01",
    "actual_contribution_months": 420,
    "deemed_contribution_months": 24,
    "actual_pre_1998_07_months": 60,
    "personal_account_balance": 360000,
    "z_actual": 1.15,
    "unemployment_benefit_months": 6
  },
  "assumptions": {
    "avg_wage_growth_rate": 0.04,
    "personal_account_bookkeeping_rate": 0.03,
    "personal_contribution_rate": 0.08
  },
  "optimization": {
    "strategy_contribution_indices": [1.15]
  }
}


path: examples/sample_input.json
content: {
  "person": {
    "name": "示例用户",
    "birth_date": "1985-03-15",
    "category": "male_60"
  },
  "current": {
    "as_of": "2026-03-01",
    "actual_contribution_months": 180,
    "deemed_contribution_months": 0,
    "actual_pre_1998_07_months": 0,
    "personal_account_balance": 120000,
    "z_actual": 1.0,
    "unemployment_benefit_months": 12
  },
  "assumptions": {
    "avg_wage_growth_rate": 0.04,
    "personal_account_bookkeeping_rate": 0.03,
    "personal_contribution_rate": 0.08
  },
  "optimization": {
    "strategy_contribution_indices": [0.6, 1.0, 1.5, 2.0, 3.0]
  }
}


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)