103 lines
4.5 KiB
Python
103 lines
4.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.31"
|
||
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
|
||
|
||
|
||
# ----- v1.1.6:RPA 超时常量(与 skill-template human_verification.py 对齐)-----
|
||
# 手工登录等待(HITL fallback)
|
||
HUMAN_WAIT_TIMEOUT = 180 # 手工登录等待超时(秒)—— skill-template 同名常量
|
||
HUMAN_POLL_INTERVAL = 5.0 # 轮询间隔(秒)—— v1.1.19 调长:避免打断用户输入
|
||
HUMAN_PROMPT_INTERVAL = 15.0 # 剩余时间提示间隔(秒)—— v1.1.19 新增
|
||
URL_STABLE_REQUIRED_S = 2.0 # URL 连续 N 秒不变才算稳定 —— v1.1.19 新增
|
||
URL_STABLE_POLL_S = 0.5 # URL 稳定探测间隔(秒)
|
||
|
||
# Playwright 操作超时(毫秒)
|
||
DEFAULT_PAGE_TIMEOUT_MS = 15_000 # Playwright 默认操作超时 —— skill-template 同名常量
|
||
GOTO_TIMEOUT_MS = 60_000 # page.goto 导航超时 —— skill-template 同名常量
|
||
|
||
# SPA 登录等待(毫秒)
|
||
SPA_LOGIN_SETTLE_MS = 4_000 # login click 后 settle 时间(SPA 写 cookie)
|
||
SPA_LOGIN_INPUT_TIMEOUT_MS = 20_000 # 等 username input 出现
|
||
SPA_LOGIN_URL_TIMEOUT_MS = 30_000 # 等 URL 跳离 login 页
|
||
SPA_HYDRATION_MS = 3_000 # goto login URL 后 SPA 框架初始化
|
||
POST_LOGIN_SETTLE_MS = 2_000 # 登录后等 SPA 路由稳定
|
||
SPA_HOME_RETRY_DELAY_MS = 2_500 # SPA_HOME retry 间隔
|
||
SPA_HOME_RETRY_MAX = 2 # SPA_HOME retry 最大次数
|
||
|
||
# 表格等待(毫秒)
|
||
TABLE_INITIAL_WAIT_MS = 3_000 # 表格初始等待(React + mock 填充)
|
||
TABLE_POLL_INTERVAL_MS = 1_500 # v1.1.32 优化:表格轮询间隔(2s → 1.5s)
|
||
TABLE_POLL_MAX_ATTEMPTS = 10 # v1.1.32 优化:轮询最大次数(20 → 10,合计 ~15s)
|
||
TABLE_TR_TIMEOUT_MS = 3_000 # 单次 wait_for_selector 超时
|
||
FULL_RENDER_WAIT_MS = 1_500 # 完整 DOM 渲染后等渲染结束
|
||
|
||
# 侧边栏/卡片(毫秒)
|
||
SIDEBAR_LINK_TIMEOUT_MS = 10_000 # v1.1.32 优化:等侧边栏 link(30s → 10s;sandbox 通常 2-5s)
|
||
PUSHSTATE_SETTLE_MS = 1_500 # SPA pushState 后等
|
||
SIDEBAR_CLICK_URL_TIMEOUT_MS = 10_000 # click 后等 URL 变 /hr/contracts
|
||
URL_AFTER_LOGIN_TIMEOUT_MS = 10_000 # v1.1.32 优化:根域 login 后等跳转(20s → 10s)
|
||
|
||
# reload 后备用
|
||
RELOAD_NETWORKIDLE_TIMEOUT_MS = 30_000 # page.reload networkidle 超时
|
||
RELOAD_DOMCONTENTLOADED_TIMEOUT_MS = 30_000 # page.reload domcontentloaded 超时
|
||
POST_RELOAD_LOGIN_HYDRATION_MS = 3_000 # reload 后回到 login 页的 hydration
|
||
POST_RELOGIN_GOTO_WAIT_MS = 2_000 # 重新登录后 goto PLATFORM_URL 等
|
||
|
||
# 卡片
|
||
CARD_APPEAR_WAIT_MS = 3_000 # 「续聘材料包」click 后等卡片出现
|
||
|
||
# dump
|
||
DUMP_PATH_PARENT_MKDIR = True # _dump_page 是否自动创建父目录
|
||
|
||
# ----- v1.1.18:日志落文件 -----
|
||
LOG_FILE_DEFAULT_NAME = "alert-contract-expiring-hr.log"
|
||
LOG_MAX_BYTES_DEFAULT = 5 * 1024 * 1024 # 5MB
|
||
LOG_BACKUP_COUNT_DEFAULT = 5
|
||
|
||
# ----- v1.1.18:材料下载队列 -----
|
||
DOWNLOAD_QUEUE_MAX_ATTEMPTS_DEFAULT = 3
|
||
DOWNLOAD_QUEUE_KINDS = ("platform_button", "local_upload")
|
||
DOWNLOAD_QUEUE_STATUSES = ("pending", "running", "success", "failed")
|