78 lines
1.8 KiB
Python
78 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from datetime import date
|
|
|
|
|
|
SUBJECTS = ["数学", "语文", "英语", "物理", "化学", "生物", "历史", "地理", "政治", "道法"]
|
|
SUBJECT_ALIASES = {
|
|
"数": "数学",
|
|
"语": "语文",
|
|
"英": "英语",
|
|
"物": "物理",
|
|
"化": "化学",
|
|
"生": "生物",
|
|
"史": "历史",
|
|
"地": "地理",
|
|
"政": "政治",
|
|
}
|
|
FALLBACK_ALIASES = {
|
|
"施亿涵": "施忆涵",
|
|
"施凯其": "施凯萁",
|
|
"宇浩": "黄宇澔",
|
|
"肖恒罄": "肖恒馨",
|
|
}
|
|
|
|
ACCOUNT_STATUSES = {"正常", "预警", "欠费", "结课", "退费"}
|
|
WEEKDAYS = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
|
|
UNKNOWN_TEACHERS = {"", "待核对老师", "未知老师"}
|
|
UNKNOWN_SUBJECTS = {"", "待核对科目", "未知科目"}
|
|
HIGH_CONFIDENCE_VALUES = {"high", "高", "高置信", "true", "1", "yes"}
|
|
AUTO_RECOGNITION_SOURCES = {"keyword", "rule", "model", "model_high_confidence", "大模型高置信识别", "关键词"}
|
|
ROLE_WORDS = {
|
|
"student": ("学生", "学员", "孩子", "同学"),
|
|
"teacher": ("老师", "教师"),
|
|
}
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Payment:
|
|
date: str
|
|
hours: float
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Account:
|
|
student_id: str
|
|
student: str
|
|
payments: list[Payment]
|
|
remaining: float
|
|
account_status: str
|
|
note: str
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ClassRecord:
|
|
date: str
|
|
weekday: str
|
|
time: str
|
|
student: str
|
|
duration: str
|
|
duration_hours: float
|
|
teacher: str
|
|
subject: str
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class QuerySpec:
|
|
raw_query: str
|
|
start_date: date | None
|
|
end_date: date | None
|
|
students: list[str]
|
|
teachers: list[str]
|
|
subjects: list[str]
|
|
|
|
|
|
class DuplicateRecordError(ValueError):
|
|
pass
|