用途:当用户明确要求“写/生成 NSFC 预算说明书”“写预算说明”“生成 budget.tex / budget.pdf”“写国自然预算 justification”时使用。基于用户标书正文或补充材料,输出一份可提交的预算说明书 LaTeX 项目并渲染 PDF。
适用性判断:若用户未指定工作目录,应立即暂停并先让用户给出工作目录;若用户只是询问预算怎么写或有哪些原则,直接回答,不启动本技能;若为 2026 青年 A/B/C 且属于包干制场景,应先提醒“通常无需预算说明书”,仅在用户明确说明为历史模板、特定单位要求或预算制场景时才继续。
必要输入:优先按 skills/nsfc-budget/references/info_form.md 提供;最少需工作目录(必需)、标书正文或其它材料、项目类型(general | local | youth)、预算口径(申请总额或需解释的直接费用口径)。缺失时按 config.yaml 默认值处理总预算、目标字数、每节上限与模板 ID。
流程:先用 init_budget_run.py 初始化 run,创建隐藏工作区与 budget_spec.json 骨架;读取正文与补充材料,形成“任务-需求-金额-依据”链;填写 budget_spec.json(含 meta、budget、sections、evidence);再用 render_budget_project.py 渲染、校验、迭代,编译输出 budget.pdf。校验失败应先修 JSON 再重跑,直至通过。
主要能力:保证设备费+业务费+劳务费=直接费用总额(若已明确口径);金额与字数上限等数值不得为负;自动转义常见 LaTeX 特殊字符;在隐藏目录保存校验报告与编译日志。
限制:不能捏造设备、合作单位、测试次数、出差频次、劳务人数或价格依据;证据不足时追问用户或保守写“暂不列支/暂无合作转拨/暂无其他来源资金”。中间文件只能放在指定隐藏工作区,正式交付物只放在 <workdir>/<output_dirname>/。不记录 API Key、令牌、密码等敏感信息。发现本技能设计缺陷应先用 bensz-collect-bugs 记录,不直接修改已安装源码。