63 lines
2.5 KiB
Python
63 lines
2.5 KiB
Python
"""业务种子数据:职称评审刚性门槛(示例,上线前由人事处核准维护)。"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import sqlite3
|
||
|
||
from util.timeutil import now_unix
|
||
|
||
_BASIS = "《专业技术职务评聘办法》"
|
||
|
||
# (rank, metric_key, metric_name, min_value, unit, basis_doc, clause)
|
||
_SEED_THRESHOLDS: tuple[tuple[str, str, str, float, str, str, str], ...] = (
|
||
("副教授", "presiding_provincial", "主持省部级项目", 1.0, "项", _BASIS, "第X条"),
|
||
("副教授", "core_papers", "核心期刊论文", 3.0, "篇", _BASIS, "第X条"),
|
||
("副教授", "teaching_hours", "年均教学工作量", 160.0, "课时", _BASIS, "第X条"),
|
||
("副教授", "current_title_years", "任现职年限", 5.0, "年", _BASIS, "第X条"),
|
||
("教授", "presiding_provincial", "主持省部级项目", 2.0, "项", _BASIS, "第X条"),
|
||
("教授", "core_papers", "核心期刊论文", 6.0, "篇", _BASIS, "第X条"),
|
||
("教授", "first_author_core_papers", "核心期刊一作/通讯论文", 3.0, "篇", _BASIS, "第X条(其中一作/通讯)"),
|
||
("教授", "monographs", "专著/教材(或等效获奖,获奖由人事处认定)", 1.0, "部", _BASIS, "第X条"),
|
||
("教授", "current_title_years", "任现职年限", 5.0, "年", _BASIS, "第X条"),
|
||
)
|
||
|
||
_KNOWN_METRIC_KEYS = (
|
||
"presiding_provincial",
|
||
"core_papers",
|
||
"first_author_core_papers",
|
||
"teaching_hours",
|
||
"current_title_years",
|
||
"monographs",
|
||
"awards",
|
||
"degree",
|
||
)
|
||
KNOWN_RANKS = ("副教授", "教授")
|
||
# 兼容旧名
|
||
_KNOWN_RANKS = KNOWN_RANKS
|
||
|
||
|
||
def seed_thresholds(cursor: sqlite3.Cursor) -> int:
|
||
"""幂等写入门槛种子,返回新增条数。"""
|
||
inserted = 0
|
||
for rank, metric_key, metric_name, min_value, unit, basis_doc, clause in _SEED_THRESHOLDS:
|
||
cursor.execute(
|
||
"SELECT COUNT(*) FROM threshold_rules WHERE rank = ? AND metric_key = ?",
|
||
(rank, metric_key),
|
||
)
|
||
if int(cursor.fetchone()[0]) > 0:
|
||
continue
|
||
cursor.execute(
|
||
"""
|
||
INSERT INTO threshold_rules
|
||
(rank, metric_key, metric_name, min_value, unit, basis_doc, clause, created_at, updated_at)
|
||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||
""",
|
||
(rank, metric_key, metric_name, min_value, unit, basis_doc, clause, now_unix(), now_unix()),
|
||
)
|
||
inserted += 1
|
||
return inserted
|
||
|
||
|
||
def seed_all(cursor: sqlite3.Cursor) -> dict[str, int]:
|
||
return {"threshold_rules": seed_thresholds(cursor)}
|