"""技能标识、版本与阈值常量。 复制到新 skill 时必须修改: - SKILL_SLUG 与 SKILL.md metadata.openclaw.slug 保持一致 - SKILL_VERSION 与 SKILL.md version 保持一致 """ SKILL_SLUG = "alert-contract-expiring-hr" SKILL_VERSION = "1.1.16" 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 = 2.0 # 轮询间隔(秒)—— skill-template 同名常量 # 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 = 2_000 # 表格轮询间隔 TABLE_POLL_MAX_ATTEMPTS = 20 # 表格轮询最大次数(合计 ~40s) TABLE_TR_TIMEOUT_MS = 3_000 # 单次 wait_for_selector 超时 FULL_RENDER_WAIT_MS = 1_500 # 完整 DOM 渲染后等渲染结束 # 侧边栏/卡片(毫秒) SIDEBAR_LINK_TIMEOUT_MS = 30_000 # 等侧边栏 hr/contracts link PUSHSTATE_SETTLE_MS = 1_500 # SPA pushState 后等 SIDEBAR_CLICK_URL_TIMEOUT_MS = 10_000 # click 后等 URL 变 /hr/contracts URL_AFTER_LOGIN_TIMEOUT_MS = 20_000 # 根域 login 后等跳转 # 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 是否自动创建父目录