v1.0.1: 奖助学金评定逻辑防伪校验 - 初版骨架
基于匠厂 skill-template 主仓 v1.0.108 派生的业务技能。 核心业务: - 辅导员在汇总表中批量勾选候选人后自动触发 - 多源数据一致性校验(自报家庭年收入 vs 一卡通消费 vs 生源地 GDP) - 横向排名可疑检测(综测 vs 成绩排名差值过大) - 历史重复资助排查(本学年累计金额超限) 输出形态: - 《奖助评定复核建议清单》HTML 报告 - 高风险个案推送至辅导员工作台 - 复核结果留痕(核查说明 + 终审结论) 预期提效:资助中心抽查工作量减少 80%;因认定不公引发的学生投诉事件下降 60%。 业务行生命周期:待审 → 已标注 → 已复核(保留 / 取消 / 调减)/ 已驳回 / 已撤回 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
153
assets/actions.json
Normal file
153
assets/actions.json
Normal file
@@ -0,0 +1,153 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"skill": "verify-scholarship-fraud-sas",
|
||||
"actions": [
|
||||
{
|
||||
"id": "health",
|
||||
"label": "运行检查",
|
||||
"description": "检查技能运行环境、学生工作部 / 一卡通中心 / 教务系统 API 连通性、生源地 GDP 库完整性。",
|
||||
"placements": ["skill-detail", "agent"],
|
||||
"executionProfile": "sync",
|
||||
"entrypoint": {
|
||||
"type": "cli",
|
||||
"command": "health",
|
||||
"args": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "version",
|
||||
"label": "查看版本",
|
||||
"description": "返回技能版本和机器标识。",
|
||||
"placements": ["skill-detail"],
|
||||
"executionProfile": "sync",
|
||||
"entrypoint": {
|
||||
"type": "cli",
|
||||
"command": "version",
|
||||
"args": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "config-path",
|
||||
"label": "查看配置位置",
|
||||
"description": "返回技能配置文件位置。",
|
||||
"placements": ["skill-detail"],
|
||||
"executionProfile": "sync",
|
||||
"entrypoint": {
|
||||
"type": "cli",
|
||||
"command": "config-path",
|
||||
"args": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "verify-candidate",
|
||||
"label": "AI 校验",
|
||||
"description": "对一位候选人执行四类异常检测(多源数据一致性 + 横向排名 + 历史重复资助),返回异常标签与详情。",
|
||||
"placements": ["row", "agent"],
|
||||
"executionProfile": "sync",
|
||||
"bind": {
|
||||
"tables": ["候选人汇总表"],
|
||||
"selectionMode": "required",
|
||||
"labelColumn": "学生姓名"
|
||||
},
|
||||
"entrypoint": {
|
||||
"type": "cli",
|
||||
"command": "verify-candidate",
|
||||
"args": ["--candidate-id", "{row.候选人ID}"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "batch-verify-class",
|
||||
"label": "批量校验",
|
||||
"description": "批量校验某班级或某专业下所有候选人,按顺序逐位执行并汇总结果。",
|
||||
"placements": ["batch", "agent"],
|
||||
"executionProfile": "async",
|
||||
"bind": {
|
||||
"tables": ["候选人汇总表"],
|
||||
"selectionMode": "optional"
|
||||
},
|
||||
"entrypoint": {
|
||||
"type": "cli",
|
||||
"command": "batch-verify-class",
|
||||
"args": ["--class-id", "{form.class_id}"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "mark-needs-review",
|
||||
"label": "标记为待复核",
|
||||
"description": "手动将候选人标记为待复核,推送通知给辅导员工作台。",
|
||||
"placements": ["row"],
|
||||
"executionProfile": "sync",
|
||||
"bind": {
|
||||
"tables": ["候选人汇总表"],
|
||||
"selectionMode": "required",
|
||||
"labelColumn": "学生姓名"
|
||||
},
|
||||
"entrypoint": {
|
||||
"type": "cli",
|
||||
"command": "mark-needs-review",
|
||||
"args": ["--candidate-id", "{row.候选人ID}", "--reason", "{form.reason}"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "submit-review-result",
|
||||
"label": "提交复核结果",
|
||||
"description": "辅导员填写核查说明后提交复核结果(含最终结论:保留 / 取消 / 调减资助)。",
|
||||
"placements": ["row"],
|
||||
"executionProfile": "sync",
|
||||
"bind": {
|
||||
"tables": ["复核建议清单"],
|
||||
"selectionMode": "required",
|
||||
"labelColumn": "学生姓名"
|
||||
},
|
||||
"entrypoint": {
|
||||
"type": "cli",
|
||||
"command": "submit-review-result",
|
||||
"args": ["--candidate-id", "{row.候选人ID}", "--conclusion", "{form.conclusion}", "--review-note", "{form.review_note}"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "render-html",
|
||||
"label": "查看复核清单",
|
||||
"description": "渲染指定复核清单的 HTML 页面,宿主 iframe 预览。",
|
||||
"placements": ["row", "skill-detail", "agent"],
|
||||
"executionProfile": "sync",
|
||||
"bind": {
|
||||
"tables": ["复核建议清单"],
|
||||
"selectionMode": "required",
|
||||
"labelColumn": "批次名称"
|
||||
},
|
||||
"entrypoint": {
|
||||
"type": "cli",
|
||||
"command": "render-html",
|
||||
"args": ["--list-id", "{row.清单ID}"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "sync-card-data",
|
||||
"label": "同步一卡通数据",
|
||||
"description": "从一卡通中心重新拉取消费数据。占位 Action,cron 启用后由定时调度。",
|
||||
"placements": ["cron", "agent", "toolbar"],
|
||||
"executionProfile": "async",
|
||||
"bind": {
|
||||
"tables": ["一卡通消费"]
|
||||
},
|
||||
"entrypoint": {
|
||||
"type": "cli",
|
||||
"command": "sync-card-data",
|
||||
"args": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "sync-gdp-data",
|
||||
"label": "同步生源地 GDP 数据",
|
||||
"description": "从公开统计来源拉取最新生源地人均 GDP 数据。占位 Action,cron 启用后由定时调度。",
|
||||
"placements": ["cron", "agent"],
|
||||
"executionProfile": "async",
|
||||
"entrypoint": {
|
||||
"type": "cli",
|
||||
"command": "sync-gdp-data",
|
||||
"args": []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
122
assets/html/example-report.html
Normal file
122
assets/html/example-report.html
Normal file
@@ -0,0 +1,122 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>{{TITLE}}</title>
|
||||
<style>
|
||||
/* 数据管理 iframe 预览布局基线 */
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 16px;
|
||||
font-family: -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
|
||||
color: #1f2329;
|
||||
background: #fafbfc;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.report { max-width: 100%; }
|
||||
.header {
|
||||
padding: 20px;
|
||||
background: linear-gradient(135deg, #b45309 0%, #f59e0b 100%);
|
||||
color: #fff;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.header h1 { margin: 0 0 8px; font-size: 22px; }
|
||||
.header .meta { color: #fef3c7; font-size: 13px; }
|
||||
.summary {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
|
||||
gap: 12px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.stat {
|
||||
padding: 14px 18px;
|
||||
background: #fff;
|
||||
border: 1px solid #e5e6eb;
|
||||
border-radius: 8px;
|
||||
}
|
||||
.stat .label { color: #8c959f; font-size: 12px; }
|
||||
.stat .value { font-size: 24px; font-weight: 700; margin-top: 4px; color: #92400e; }
|
||||
.stat.danger .value { color: #c53030; }
|
||||
.stat.warning .value { color: #d97706; }
|
||||
.stat.success .value { color: #059669; }
|
||||
.section {
|
||||
padding: 16px 20px;
|
||||
background: #fff;
|
||||
border: 1px solid #e5e6eb;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.section h2 { margin: 0 0 12px; font-size: 16px; color: #92400e; }
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
table-layout: fixed;
|
||||
word-break: break-word;
|
||||
}
|
||||
th, td { padding: 10px 14px; text-align: left; border-bottom: 1px solid #f0f1f3; font-size: 14px; }
|
||||
th { background: #fffbeb; color: #92400e; font-weight: 600; }
|
||||
tr:last-child td { border-bottom: 0; }
|
||||
.pill {
|
||||
display: inline-block;
|
||||
padding: 2px 8px;
|
||||
border-radius: 10px;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
}
|
||||
.pill.red { background: #fef2f2; color: #c53030; }
|
||||
.pill.yellow { background: #fffbeb; color: #d97706; }
|
||||
.pill.green { background: #ecfdf5; color: #059669; }
|
||||
.privacy-note {
|
||||
padding: 10px 14px;
|
||||
background: #f8fafc;
|
||||
border-left: 3px solid #94a3b8;
|
||||
border-radius: 4px;
|
||||
color: #475569;
|
||||
font-size: 13px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
.footer { margin-top: 16px; color: #8c959f; font-size: 12px; text-align: right; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="report">
|
||||
<div class="header">
|
||||
<h1>{{TITLE}}</h1>
|
||||
<div class="meta">清单编号:{{LIST_ID}} · 批次:{{BATCH_NAME}} · 评定项目:{{AWARD_NAME}}</div>
|
||||
<div class="meta">辅导员:{{COUNSELOR_NAME}} · 生成时间:{{GENERATED_AT}}</div>
|
||||
</div>
|
||||
|
||||
<div class="privacy-note">
|
||||
🔒 本报告含学生家庭隐私数据,已脱敏处理(学号 / 姓名末位)。请按学校保密规定保管,不得外传。
|
||||
</div>
|
||||
|
||||
<div class="summary">
|
||||
<div class="stat"><div class="label">校验候选人总数</div><div class="value">{{TOTAL_COUNT}}</div></div>
|
||||
<div class="stat danger"><div class="label">🔴 高风险个案</div><div class="value">{{HIGH_RISK_COUNT}}</div></div>
|
||||
<div class="stat warning"><div class="label">🟡 边缘个案</div><div class="value">{{EDGE_COUNT}}</div></div>
|
||||
<div class="stat success"><div class="label">🟢 无异常</div><div class="value">{{CLEAN_COUNT}}</div></div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h2>高风险个案复核清单</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 18%">学生(脱敏)</th>
|
||||
<th style="width: 16%">异常类型</th>
|
||||
<th style="width: 30%">异常详情</th>
|
||||
<th style="width: 16%">建议处理</th>
|
||||
<th style="width: 20%">复核状态</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{BODY}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="footer">本报告由「奖助学金评定逻辑防伪校验」技能自动生成 · 最终认定权归辅导员与学生处资助中心</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user