"""客户评级等级配置模型(需求 2.2.5)。 评级定位为「仅打分工具,不影响绩效金额」(对照表 #25):评分自 2026-10-19 起每客户落库于 customer_ratings(快照固化等级名),本表承载可配置的等级 **映射关系**。判定规则:按 sort_order 升序取第一个 min_score ≤ 总分的 等级 —— 单边判定避免区间边界(如 75 分)在「≥75 且 ≤89」与「>74 且 <75」 两套写法间的重叠/遗漏歧义;max_score 仅展示。 """ from decimal import Decimal from sqlalchemy import Integer, Numeric, String from sqlalchemy.orm import Mapped, mapped_column from app.models.base import BIGINT_UNSIGNED, Base, TimestampMixin, mysql_table_args class CustomerRatingGrade(Base, TimestampMixin): """客户评级等级配置表(需求 2.2.5「等级对应关系可配置」)。 种子四条随迁移初始化:A 优秀 90-100 / B 良好 75-89 / C 合格 60-74 / D 待改进 0-59。区间不重叠与 0≤min≤max≤100 由应用层校验。 """ __tablename__ = "customer_rating_grades" __table_args__ = mysql_table_args( "客户评级等级配置表(等级映射可配置;判定按 sort_order 升序首个 min_score≤总分)" ) id: Mapped[int] = mapped_column( BIGINT_UNSIGNED, primary_key=True, autoincrement=True, comment="主键ID" ) grade_name: Mapped[str] = mapped_column( String(32), nullable=False, unique=True, comment="等级名称(如 A/优秀)" ) min_score: Mapped[Decimal] = mapped_column( Numeric(5, 1), nullable=False, comment="总分下限(含);判定=按 sort_order 升序首个 min_score ≤ 总分", ) max_score: Mapped[Decimal] = mapped_column( Numeric(5, 1), nullable=False, comment="总分上限(展示用)" ) sort_order: Mapped[int] = mapped_column( Integer, nullable=False, server_default="0", comment="排序(判定顺序,升序)" ) remark: Mapped[str | None] = mapped_column(String(255), comment="说明")