新增:
- scripts/service/platform_collector.py:Playwright RPA(持久化 browser profile 复用登录态),抓合同表(姓名/单位/到期日/剩余天数/预警/建议),逐行点"续聘材料包"按钮下载 PDF/Word 到 data/materials/
- scripts/service/material_parser.py:PDF/Word 文本提取(pypdf → pdf2image + pytesseract OCR 扫描件兜底;python-docx 抽 docx;antiword 兜底 .doc)
- scripts/service/llm_decision.py:AI 决策统一入口(优先调宿主 jiangchang_skill_core.llm_manager.call_llm_json;本地降级到规则版;输出 decision_source ∈ {llm, rules, rules_no_materials})
- scripts/db/migrations.py:idempotent ALTER/CREATE,建 materials_content 表 + renewal_tasks 加 decision_source / materials_summary 列
修改:
- scripts/db/connection.py:init_db() 自动调 apply_all() 应用 v1.1.1 迁移
- scripts/db/repository.py:加 insert_material / list_materials_for_contract / list_pending_materials / summarize_materials / get_task_full
- scripts/service/task_generator.py:AI 决策统一改为调 llm_decision.decide_suggestion(materials_summary=...);reason 文案加「已结合材料包(X 份文件,Y 字 / 待解析)综合判断:...」
- scripts/service/html_renderer.py:ctx 加 DECISION_SOURCE(LLM 推理 / 本地规则 / 本地规则(无材料))+ MATERIALS_COUNT
- scripts/templates/task.html.j2:footer 加 "AI 建议来源:{{DECISION_SOURCE}} · 已审阅材料 {{MATERIALS_COUNT}} 份"
- scripts/cli/app.py:新增 2 个 CLI(collect-from-platform / parse-materials);现有 9 个不动
- requirements.txt:playwright / pypdf / python-docx / pdf2image / pytesseract / Pillow
- .env.example:SMARTCAMPUS_BASE_URL / SMARTCAMPUS_PROFILE_DIR / MATERIALS_DOWNLOAD_DIR / OCR_LANG / LLM_MODEL_NAME / LLM_API_BASE_URL / LLM_API_TOKEN
- SKILL.md:version 1.1.0 → 1.1.1;用户意图路由表加 2 行;新增「数据来源」段(三层来源 + AI 决策透明化)
- README.md:使用前要准备 → 加 playwright install chromium 步骤
- CHANGELOG.md:v1.1.1 条目
- scripts/util/constants.py:SKILL_VERSION 1.1.0 → 1.1.1
本地验证:11 个 CLI 全部 exit 0;decision_source=rules;reason 含「已结合材料包(6 份文件,待解析)」;HTML footer 含决策来源。
Co-Authored-By: Claude Code <noreply@anthropic.com>
46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
"""技能标识、版本与阈值常量。
|
||
|
||
复制到新 skill 时必须修改:
|
||
- SKILL_SLUG 与 SKILL.md metadata.openclaw.slug 保持一致
|
||
- SKILL_VERSION 与 SKILL.md version 保持一致
|
||
"""
|
||
|
||
SKILL_SLUG = "alert-contract-expiring-hr"
|
||
SKILL_VERSION = "1.1.1"
|
||
LOG_LOGGER_NAME = "openclaw.skill.alert_contract_expiring_hr"
|
||
PLATFORM_KIT_MIN_VERSION = "1.2.11"
|
||
|
||
# 预警阈值(黄/橙/红):距到期日 <= yellow 天 = 黄色预警
|
||
# 顺序:red < orange < yellow
|
||
DEFAULT_THRESHOLDS = (90, 60, 30)
|
||
|
||
# 预警等级名称(与 thresholds 顺序一一对应)
|
||
ALERT_LEVELS = ("yellow", "orange", "red")
|
||
ALERT_LEVEL_LABELS = {"yellow": "黄色", "orange": "橙色", "red": "红色"}
|
||
|
||
# 续聘建议
|
||
SUGGESTIONS = ("renew", "observe", "non_renew")
|
||
SUGGESTION_LABELS = {
|
||
"renew": "建议续聘",
|
||
"observe": "常规续聘评审",
|
||
"non_renew": "不建议续聘",
|
||
}
|
||
|
||
# 合同状态
|
||
CONTRACT_STATUSES = ("可续聘", "预警中", "已续签", "已驳回", "已过期", "已撤回")
|
||
|
||
# 续签材料清单
|
||
DEFAULT_MATERIALS = [
|
||
"近 3 年年度考核表(盖章)",
|
||
"师德师风考评记录",
|
||
"学历学位证书复印件",
|
||
"岗位聘任登记表",
|
||
"劳动合同文本(一式三份)",
|
||
"个人述职报告(不少于 2000 字)",
|
||
]
|
||
|
||
# AI 续聘建议规则阈值
|
||
MORAL_FAIL_THRESHOLD = 60 # 师德 < 60 直接 non_renew
|
||
PERFORMANCE_FAIL_THRESHOLD = 60 # 单年考核 < 60 算不合格
|
||
PERFORMANCE_RENEW_MIN = 80 # 全部 >= 80 且逐年上升 → renew
|