科研项目经费台账生成器(research-project-log)
一句话结论:给你一张能直接交科教督查的科研项目经费台账——四场景(立项登记/经费执行/进度节点/月度汇总)自动勾稽,余额与执行率自动算,逾期未提交进度整行标红(宽限周期 --limit-days 参数化),【待填】红字清点,缺什么一眼看到。
本页导航:菜单式选路 → 对话示例 → 快速上手与退出码表 → 字段与判定口径 → 铁律(医疗合规四关)→ 能力边界量化表 → 岗位场景例子 → 边界提醒 → 文件索引。
菜单式选路
使用者开口后按场景引导,一次一问补要素:
第一步 · 选场景(回复序号或场景名均可):
- ① 立项登记(项目编号/项目名称/负责人(工号)/经费总额(立项文件抄录)/起止日期,只登记不评审)
- ② 经费执行登记(支出金额(报销单抄录)/支出类别/经办人工号,余额按经费总额自动逐笔累计扣减)
- ③ 进度节点跟踪(计划/实际提交日期逐节点对照,逾期未提交标红,宽限周期 --limit-days 参数化)
- ④ 月度汇总(各项目余额/执行率自动算,超支整行标红)
第二步 · 给数据(任选一种):
1. 粘贴/口述登记记录(按场景逐行给:项目编号、金额、日期、工号……缺的项不用编)
2. --preset 场景名 --save 骨架.json 生成填写骨架,填好 --input 回来
3. --demo 先看脱敏样例长什么样
4. 直接要空模板(8 行【待填】占位)
第三步 · 出台账:xlsx 双表 = 登记明细(异常行整行标红 + 【待填】红字 + 冻结表头)+ 统计汇总(异常清单/【待填】清点/隐私与合规提示)。
不知道选什么?直接说需求,我给你列选项,回个序号就出表。
对话示例
> 用户:帮我弄个科研项目经费台账
> 助手:好的,先选场景(回序号或场景名):①立项登记 ②经费执行登记 ③进度节点跟踪 ④月度汇总
> 用户:2
> 助手:好的,经费执行登记。按报销单逐行给数据,一次一笔,缺的跳过不编:
> 1. 日期+项目编号?(示例:2026-10-09 KY2026-001)
> 用户:2026-10-09 KY2026-001,设备费 5 万,经办 K2036
> 助手:收到(一句话直通车确认:经费总额未提供→余额暂【待填】,可在 JSON 顶层 projects 里给各项目经费总额,余额自动算)。生成台账:1 行,无异常,1 个【待填】。
快速上手
# 场景菜单
python scripts/make_research_project_log.py --presets
# 脱敏示例(--date 固定台账日期,可复现)
python scripts/make_research_project_log.py --demo --out 台账.xlsx --date 2026-11-01
# 指定场景(回序号 1/2/3/4 或场景名均可)
python scripts/make_research_project_log.py --preset 月度汇总 --out 10月项目经费汇总.xlsx
# 进度跟踪:逾期宽限 15 天(--limit-days 参数化,默认 0)
python scripts/make_research_project_log.py --preset 进度节点跟踪 --limit-days 15 --out 进度台账.xlsx
# 从填写好的骨架生成
python scripts/make_research_project_log.py --input 骨架.json --out 台账.xlsx
# 空模板(8 行【待填】占位)
python scripts/make_research_project_log.py --preset 立项登记 --out 空模板.xlsx
输出预览
以下为 --demo --date 2026-11-01(场景② 经费执行登记)输出的文本摘录(截取自实际生成的 xlsx 关键单元格;完整摘录与逐格复现命令见 assets/preview.md):
| 序号 | 日期 | 项目编号 | 支出金额 | 支出类别 | 经办人(工号) | 执行后余额 | 备注 |
|---|---|---|---|---|---|---|---|
| 1 | 2026-10-09 | KY2026-001 | 5 | 设备费 | K2036 | 45 | |
| 2 | 2026-10-15 | KY2026-001 | 12 | 实验材料费 | K2036 | 33 | |
| 3 | 2026-10-21 | KY2026-002 | 35 | 劳务费 | K2041 | -5 | ⚠️ 超支:执行后余额(-5)小于 0(经费总额30,累计支出35)…(整行标红) |
| 4 | 2026-10-26 | KY2026-009 | 2 | 差旅费 | K2036 | 【待填】 | ℹ️ 项目 KY2026-009 未提供经费总额…余额无法自动计算 |
统计汇总(截取前几行):登记场景=经费执行登记|台账日期=2026-11-01|登记行数=4|异常行数(红)=1|【待填】单元格=1。
退出码表(脚本 scripts/make_research_project_log.py,v1.0.0)
| 退出码 | 含义 | 处理 |
|---|---|---|
| 0 | 台账生成成功 | — |
| 10 | 输入文件不存在(沿用现有体系约定) | 核对 --input 路径 |
| 11 | 输入缺失:缺 items / items 非数组 / --save 未指定 --preset |
按 {"items": [ … ]} 结构补齐 |
| 12 | 格式错误:JSON 无法解析 / items 项非对象 / --date 无法识别 |
核对 JSON 语法与日期格式 |
| 13 | 隐私拦截:输入检测到姓名明文(张三/李某某式)、身份证号、手机号等敏感个人信息 | 去除敏感信息后重试;登记仅用项目编号/工号(错误提示不回显敏感值) |
| 14 | 校验失败:预设名不存在 | 见 --presets 菜单(回序号/场景名均可) |
| 15 | 运行超时(60 秒看门狗) | 重跑同一条命令 |
| 20 | 解析失败 / 输出失败等未预期异常(兜底) | 把输入 JSON 与提示发给助手排查 |
| 21 | 缺依赖 | pip install openpyxl 后重跑 |
单行日期/金额格式错误不中断整份台账:该格转【待填】红字并在备注注明原因,汇总页计入清点;文件级错误才整体退出。
字段与判定口径
- ① 立项登记(8 列):序号 / 项目编号 / 项目名称 / 负责人(工号) / 经费总额 / 起始日期 / 结束日期 / 备注
- ② 经费执行登记(8 列):序号 / 日期 / 项目编号 / 支出金额 / 支出类别 / 经办人(工号) / 执行后余额 / 备注
- ③ 进度节点跟踪(7 列):序号 / 项目编号 / 节点名称 / 计划提交日期 / 实际提交日期 / 逾期天数 / 备注
- ④ 月度汇总(8 列):序号 / 项目编号 / 项目名称 / 经费总额 / 累计支出 / 余额 / 执行率% / 备注
异常行整行标红(写入备注 ⚠️ 提示,人工核对):
- 立项登记:项目编号缺失(项目唯一标识,缺了无法归集)|项目名称缺失(按立项文件抄录全称)|起止日期倒置(结束日期早于起始日期)|金额为负
- 经费执行:项目编号缺失(支出无法归集)|支出类别缺失(月度无法分类汇总)|支出金额为负|超支(执行后余额<0,按登记顺序逐笔累计扣减)
- 进度节点:项目编号缺失|逾期未提交(台账日期超过 计划提交日期+宽限天数 仍未提交实际进度;宽限天数 --limit-days 参数化,默认 0 天)
- 月度汇总:项目编号/项目名称缺失|累计支出为负|超支(累计支出>经费总额,执行率超 100%)
- 各场景通用:金额为负必是登记方向错误(先查冲销/退款是否填反)
软提示(备注 ℹ️ 提示,不标红):日期/金额格式无法识别(该格转【待填】);已提交但晚于计划(只登记天数,不判对错);项目未提供经费总额映射致余额无法自动计算;经费总额为 0 致执行率无法计算。
- 余额/执行率/逾期天数为纯算术推导(余额=经费总额−累计支出、执行率=累计支出÷经费总额),源自已抄录数值,输入不全则为【待填】,绝不代填
- 经费执行场景的经费总额映射:JSON 顶层给
"projects": [{"项目编号": "KY2026-001", "经费总额": "50"}, …],余额按登记顺序逐笔累计扣减;同一台账内金额单位口径须统一(万元或元,照立项文件/报销单抄录) - 【待填】单元格红字标红,汇总页清点数量并提示「未补齐视为登记未完成」
- 日期支持
2026-03-15/2026.3.15/2026/3/15/2026年3月15日/20260315,金额支持整数/小数 --limit-days可写入骨架 JSON 的limit_days字段,--input回读时同样生效(命令行--limit-days优先级更高);骨架顶层date/dept回读同理,命令行--date/--dept覆盖骨架值
铁律(医疗合规四关)
- 不做项目评审、不碰经费审批:只做科研项目与经费的登记台账;立项价值、评审结论一律不做,经费审批与报销合规以本院财务制度为准,台账只做抄录与勾稽留痕
- 敏感个人信息硬拦截:脚本检测到姓名明文(含「负责人:张三」「李某某」式)、身份证号、手机号 → 退出码 13 直接拒绝处理(错误提示不回显敏感值);登记仅用项目编号/工号;「某某公司/某某项目」等泛指组合有白名单不误拦
- 数据不出机:台账本地生成,无网络请求;科研经费信息按院内数据管理规定流转
- 不编造不代填:金额/日期/工号全部按立项文件与报销单抄录,缺失一律【待填】标红,汇总页清点;余额/执行率只做算术推导并标注口径,绝不代填业务数值
能力边界量化表
| 能做 | 不做(明确边界) |
|---|---|
| 四场景登记台账生成(xlsx 双表,可打印归档) | 不替代科教管理系统/财务系统:无立项审批流、无报销流程、无经费监管报送接口 |
| 余额/执行率/逾期天数自动勾稽(纯算术推导,标注口径) | 不做项目评审结论、不判断立项价值与成果水平 |
| 逾期未提交标红(宽限周期 --limit-days 参数化) | 不碰经费审批:预算调整、报销合规性判断以财务为准 |
| 【待填】清点与补填提示(不代填) | 不校验金额真伪(报销单与财务账是否一致须财务复核) |
| 敏感个人信息隐私拦截(退出码 13,白名单防误拦) | 不识别或处理扫描件/立项文件原件;输入仅支持 JSON 文本 |
| 本地生成、数据不出机 | 不引用科研经费管理法规具体条款号;口径以本院制度为准 |
岗位场景例子
- 科教处项目专员:「新一批项目立项了,先建台账」→ 选 ① → 项目编号/负责人工号/经费总额逐项登记,起止倒置自动标红
- 科研财务秘书:「报销一笔登记一笔,余额要随时看得见」→ 选 ② → 余额按项目自动逐笔扣减,超支行直接红
- 科教督查前:「哪些项目进度没交?」→ 选 ③(配
--limit-days设宽限期)→ 逾期未提交的节点整行标红,直接拿去催办 - 科教处月底:「每个项目花了多少、执行率多少」→ 选 ④ → 余额/执行率自动算,超支项目标红上会
边界提醒
- 与相邻技能划界:training-attendance-log=培训签到、preceptor-mentorship-log=带教、ce-credit-ledger=继教学分——培训、带教、学分请用对应技能;本技能只做科研项目与经费台账,四者划清边界
- 本工具不替代科教管理系统与财务系统;立项文件、报销单等原始凭证按院内要求归档,台账仅作登记留痕
- 经费审批、预算调整、报销合规以本院财务制度与财务系统为准——本台账不做任何审批动作,不写审批意见
- 工号列只填工号,不得填写姓名明文——脚本对姓名明文/身份证号/手机号等敏感个人信息是硬拦截(退出码 13);项目负责人身份以科教备案抄录为准,本工具不生成也不判断
文件索引
| 文件 | 用途 |
|---|---|
| scripts/make_research_project_log.py | 核心:CLI 成稿 + 四场景判定 + 余额/执行率勾稽 + 异常标红 + 隐私拦截 + 错误码兜底 |
| references/research-project-guide.md | 登记实践参考:立项抄录/经费执行勾稽/进度跟踪/月度汇总台账口径 |
| assets/faq.md | 常见问题 12 条(隐私拦截/余额算法/逾期参数/待填卡点/系统边界等) |
| assets/anti-patterns.md | 反模式集中清单(错误操作+后果+替代) |
| assets/preview.md | 成稿预览(真实输出摘录+逐格复现命令) |
| assets/input-example.json | 输入示例(脱敏,可直接 --input 试跑) |
| beta-test/run_tests.py | 内测回归脚本(隐私拦截/退出码/标红规则/余额勾稽/待填不编造等) |
FAQ 快捷导航:代审经费→Q1|没数据能生成吗→Q2|为什么被拒绝(13)→Q3|余额怎么算→Q4|逾期宽限怎么设→Q5|标红是不是判定我出错→Q6|和财务系统→Q7|数据外传→Q8|【待填】算完成吗→Q9|场景怎么选→Q10|执行率超 100%→Q11|单位口径→Q12。