Files
chenfuqiang f90f742c1e
All checks were successful
技能自动化发布 / release (push) Successful in 9s
fix: 对照《财务处Skill002》验收整改并升版 v1.0.2
- 状态标签:C3 触发且 D 未判 → 待补录,优先级对齐需求 §6.2
- broadcast-monthly 逐项目增量 emit,任务中心可见进行中进度
- progress_reports 回填 project_id;新增 items_json/updated_at;旧库重建式安全迁移(含回归测试)
- 简报:TITLE 转义防注入、章节对齐 §10(独立「暂付款/结题提醒」)、页脚逐字统一
- 金标准测试 +17:±10%/20% 阈值恰界、C2 钳位、N2 反例、C3 逐字段、HTML 转义、async+cron 定位守护、迁移回归
- 文档 v1.1(开发文档 + REQUIREMENTS):ERROR:<CODE> <message>、reports_brief、--all-status、skill-detail 表外挂载、C1 level=warn
- 落盘验收报告 acceptance-reports/20260924-105401-acceptance.md(338 测试全绿)
- 版本 1.0.1 → 1.0.2(constants / SKILL.md / CHANGELOG 三处对齐)
2026-09-24 17:19:30 +08:00

116 lines
8.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: 项目经费进度播报助手
description: "高校项目经费执行监测与播报:按项目台账自动计算实际支出率与序时进度,识别严重滞后/支出异常偏快,生成三段式播报摘要、暂付款冲销与结题报销提醒,支持月度定时播报并输出《经费执行简报》。"
version: 1.0.2
author: 深圳匠厂科技有限公司
metadata:
openclaw:
slug: track-fund-progress-default
platform_kit_min_version: "1.2.11"
emoji: "📊"
category: "财务"
brands:
- jiangchang
- huashang
developer_ids:
- 79017 # 开发者本人匠厂用户 ID(设置 → 用户信息 → 复制)
allowed-tools:
- bash
---
# 项目经费进度播报助手(track-fund-progress-default)
高校项目经费执行监测与播报:按项目台账(立项/到账/报销/暂付款/执行期)自动计算**实际支出率**与**序时进度**,识别"严重滞后 / 支出异常偏快 / 正常",生成三段式播报摘要与《经费执行简报》(含柱状图);支持暂付款冲销提醒、结题临近提醒与**每月定时播报**。全部数字来自本地确定性计算与规则模板,不编造数据;播报仅作提醒,请以财务系统账面为准。
## Agent / 宿主编排
- **Agent 是入口与编排者**:理解查询意图(如"查一下我的国自然经费")、定位负责人与项目、触发播报 Action,并用业务语言解读播报结论。
- 台账数据来自本地库(表单录入 / JSON 批量导入 / 数据管理直接编辑);Agent 不得凭空编造项目金额,台账缺失时引导补录。
- 播报文本由技能内核以规则模板生成(确定性、零幻觉);Agent 转述时可口语化,但**不得更改数字与状态判定**。
- 本技能无 RPA、无浏览器自动化;不修改任何外部系统数据。
## 能力类型与触发
| 你要做什么 | Agent 怎么做 | 进任务中心? |
|------------|--------------|--------------|
| 查台账 / 查播报历史 / 查阈值 / 统计 | 短 CLI:`list-projects` / `list-reports` / `view-rules` / `stats` | 否 |
| 播报全部在研项目或指定项目(同步秒级) | `run_skill_action` → `broadcast-progress`(`input.projectNo/pi/asOf`) | 否 |
| 月度定时播报(全部在研项目 + 汇总简报) | `run_skill_action` → `broadcast-monthly` | 是(该 Action 为 async) |
| 录入/更新项目台账 | 数据管理表上操作,或 `run_skill_action` → `add-project`;批量走 `import-projects` | 否 |
| 重建《经费执行简报》HTML | `run_skill_action` → `render-html` | 否 |
| 调整预警阈值 | 数据管理行级按钮 `set-rule`;或短 CLI:`set-rule` | 否 |
| 用户只问用法 / 能做什么 | 读根目录 `README.md`;逐步操作再读 `TUTORIAL.md` | — |
进不进任务中心**只**看该 Action 的 `executionProfile`(sync 当场返回 / async 进任务中心),与数据管理、对话、定时等触发入口**无关**;每个 Action 都已显式声明 `executionProfile`。
本技能为"即时计算"型能力:提交即算、当场出结论,不存在「先准备本地数据、再对外产生副作用」的两段式,因此无需按「准备 vs 执行」拆分;月度播报为无人值守只读计算+写本地记录,安全可定时。本技能无网页 RPA,不涉及账号管理;宿主账号/Profile/租约规范见 `development/ACCOUNT_MANAGER.md`。
## 用户意图路由表
| 用户意图 | Agent 怎么做 | 进任务中心? |
|------------------------|--------------|--------------|
| "查一下我的国自然经费执行得怎么样" / "播报我的项目进度" | 确定负责人姓名;`run_skill_action` → `broadcast-progress`,`input.pi=负责人`(单项目传 `projectNo`) | 否 |
| "月度播报一次全部项目" / 定时到点自动执行 | `run_skill_action` → `broadcast-monthly` | 是(因该 Action 为 async) |
| "录入一个新项目 / 把这批项目导进去" | 单条走数据管理表单 `add-project`;批量把 JSON 交给 `import-projects` | 否 |
| "我上次播报的结果是什么" | 短 CLI:`list-reports [--status-tag 严重滞后]`;详情 `show-report --id N` | 否 |
| "重新生成简报" | `run_skill_action` → `render-html`;结果在数据管理 HTML 报告侧栏 | 否 |
| "滞后阈值改成 15%" | `run_skill_action` → `set-rule`(`ruleKey=lag_threshold, value=0.15`)或数据管理行级按钮 | 否 |
| "全校经费执行统计" | 短 CLI:`stats` | 否 |
**硬规则:**
1. `broadcast-monthly` 是本技能唯一 async Action;禁止用 bash 跑它再轮询等待。
2. 台账金额必须由用户提供或导入,Agent 不得编造、估算金额与日期。
3. 播报结论必须说明"仅作提醒,以财务系统账面为准";不得替 PI 决定如何花钱。
4. 项目台账属敏感经营数据;对话查询应限定负责人本人的项目,滞后 Top 名单面向科研秘书/财务处场景。
5. 一个业务能力一个 Action,用多个 placements 挂入口;底层同一 `scripts/main.py` CLI。
Agent 执行契约细节:`references/CLI.md`、`references/ACTIONS.md`、`references/SCHEMA.md`。
## 共享 Python(必读)
宿主共享 runtime 在 `{JIANGCHANG_DATA_ROOT}/python-runtime/.venv`,并已前置到 PATH(同时设 `VIRTUAL_ENV`)。短 CLI 一条命令直接跑:
```bash
python {baseDir}/scripts/main.py health
python {baseDir}/scripts/main.py version
python {baseDir}/scripts/main.py init-db
python {baseDir}/scripts/main.py broadcast [--pi 负责人] [--project-no X] [--as-of YYYY-MM-DD]
```
- 公共库来自共享 venv 的 `jiangchang-platform-kit>=1.2.11`(包名路径 `jiangchang_skill_core`);不要 vendor。
- **禁止**用 `uv run python` 跑技能脚本(会建临时环境,缺 `jiangchang_skill_core`);**禁止** Agent 自行 `pip install`。
- 根目录 `requirements.txt` 只声明技能特有依赖(本技能当前无)。
- 配置:用户 `.env` 在 `{JIANGCHANG_DATA_ROOT}/{JIANGCHANG_USER_ID}/{slug}/.env`;优先级:进程环境变量 > 用户 `.env` > `.env.example`。
## 面向用户问答(LLM 规则)
- 本文(`SKILL.md`)是 LLM / OpenClaw 平台读取的技能入口,**不是**用户市场说明。
- 当用户询问"这个技能是做什么的 / 怎么用 / 适合什么场景 / 用前准备什么 / 得到什么",**必须优先读取**根目录 `README.md`(能力说明)与 `TUTORIAL.md`(逐步用法),并用业务语言回答。
- **回答「怎么用 / 能做什么」时的要求**:优先读 `TUTORIAL.md`;**禁止**在回答中粘贴 `python …/scripts/main.py …` 或其它命令行(除非用户明确索要命令,或自称技术人员/开发者);**禁止**为答用法去 `dir` / `ls` 列技能目录,或默认打开 `references/`、`development/`。
- **禁止**向普通用户暴露 JSON 字段名、表名、`error_code` 等实现细节(除非用户明确询问技术实现)。
- 市场说明 Tab(`README.md`)不含分步操作;排障步骤在 `TUTORIAL.md`「常见卡住怎么办」。
## 文档分工
| 文档 | 读者 | 用途 |
|------|------|------|
| 根目录 `README.md` | 普通用户 | 市场 **说明** Tab(`readme_md`) |
| 根目录 `TUTORIAL.md` | 普通用户 | 市场 **教程** Tab(`tutorial_md`) |
| 根目录 `DEMO.md` | 普通用户 | 市场 **演示** Tab(`demo_video_url` + `demo_md`) |
| 根目录 `CHANGELOG.md` | 普通用户 | 市场 **更新日志** Tab(`changelog`) |
| `SKILL.md`(本文) | LLM / OpenClaw 平台 | 技能入口、触发与运行契约摘要 |
| `references/` | Agent 编排 / 调用 | CLI、Action、schema 契约(Agent 主读) |
| `development/` | 开发者 / AI 编程代理 | 需求、开发教程、测试、深度技术规范 |
## 目录约定
- CLI 入口固定为 `scripts/main.py`;业务逻辑按 `cli / db / service / util` 分层。
- 业务表:`fund_projects`(项目台账)、`progress_reports`(播报记录)、`alert_rules`(预警规则)。
- HTML 简报写入技能数据目录 `html/`(单项目 `report-N.html`、月度汇总 `brief-*.html`),重建走固定 Action id `render-html`。
## 平台元数据
- `metadata.openclaw.developer_ids`:发布后默认可见的用户 ID 列表;**发布前必须替换为本人的匠厂用户 ID**(设置 → 用户信息 → 复制),否则开发期自己无法在市场安装自测。
- 当 `access_scope = 0`(不公开)时,平台会把 `developer_ids` 中的用户自动补写到 `skill_user_access`。