Files
track-fund-progress-default/scripts/db/seed_data.py
chenfuqiang a91ead3862
All checks were successful
技能自动化发布 / release (push) Successful in 7s
feat: 项目经费进度播报助手首版 v1.0.1(track-fund-progress-default)
2026-09-13 14:25:23 +08:00

64 lines
2.2 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.
"""业务种子数据:预警规则阈值。
init-db 幂等写入(存在即跳过,不覆盖管理员修改)。
阈值缺省口径来自《核心建设内容:各部门"Skill"深度需求规格书》财务处 Skill 002:
低于序时进度 10% 记"严重滞后",高于 20% 记"支出异常偏快";暂付款账龄 90 天。
"""
from __future__ import annotations
import sqlite3
from util.timeutil import now_unix
# (rule_key, display_name, threshold_value, description)
_SEED_ALERT_RULES: tuple[tuple[str, str, float, str], ...] = (
(
"lag_threshold",
"严重滞后阈值",
0.10,
"实际支出率低于序时进度该比例(小数,0.10=10个百分点)时标记“严重滞后”。",
),
(
"overshoot_threshold",
"支出异常偏快阈值",
0.20,
"实际支出率高于序时进度该比例(小数,0.20=20个百分点)时标记“支出异常偏快”,预警年底突击花钱。",
),
(
"pending_aging_days",
"暂付款账龄提醒天数",
90.0,
"暂付款自最早发生日起超过该天数(天)时提醒及时冲销。",
),
(
"closing_warn_days",
"结题临近预警天数",
90.0,
"距执行期结束不足该天数(天)且支出率低于 80% 时提醒尽快完成报销。",
),
)
def seed_alert_rules(cursor: sqlite3.Cursor) -> int:
"""幂等写入预警规则种子,返回新增条数。"""
inserted = 0
for rule_key, display_name, threshold_value, description in _SEED_ALERT_RULES:
cursor.execute("SELECT COUNT(*) FROM alert_rules WHERE rule_key = ?", (rule_key,))
if int(cursor.fetchone()[0]) > 0:
continue
cursor.execute(
"""
INSERT INTO alert_rules (rule_key, display_name, threshold_value, description, created_at, updated_at)
VALUES (?, ?, ?, ?, ?, ?)
""",
(rule_key, display_name, threshold_value, description, now_unix(), now_unix()),
)
inserted += 1
return inserted
def seed_all(cursor: sqlite3.Cursor) -> dict[str, int]:
"""写入全部业务种子,返回各类新增条数。"""
return {"alert_rules": seed_alert_rules(cursor)}