Files
verify-promotion-metric-def…/scripts/db/seed_data.py

63 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""业务种子数据:职称评审刚性门槛(示例,上线前由人事处核准维护)。"""
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)}