"""试用期缓发与结清记录,引用固化台账,不使用人员当前开关重写历史。""" from datetime import datetime from decimal import Decimal from sqlalchemy import JSON, DateTime, ForeignKey, Index, Numeric, String, UniqueConstraint, text from sqlalchemy.orm import Mapped, mapped_column from app.models.base import BIGINT_UNSIGNED, Base, mysql_table_args class ProbationDeferral(Base): __tablename__ = "probation_deferrals" __table_args__ = mysql_table_args( "试用期缓发台账(每个正式台账版本一条)", UniqueConstraint("ledger_id", name="uk_probation_deferrals_ledger_id"), Index("idx_probation_deferrals_personnel_id_year", "personnel_id", "year"), ) id: Mapped[int] = mapped_column( BIGINT_UNSIGNED, primary_key=True, autoincrement=True, comment="主键ID" ) ledger_id: Mapped[int] = mapped_column( BIGINT_UNSIGNED, ForeignKey("performance_ledgers.id", ondelete="RESTRICT"), nullable=False, comment="原核算台账版本ID", ) personnel_id: Mapped[int] = mapped_column(BIGINT_UNSIGNED, nullable=False, comment="归属人员ID") year: Mapped[str] = mapped_column(String(4), nullable=False, comment="原计提年度") month: Mapped[str] = mapped_column(String(7), nullable=False, comment="本次计提或应付变化月份") accrued: Mapped[Decimal] = mapped_column( Numeric(14, 2), nullable=False, comment="本次试用期计提额,可负" ) eligible: Mapped[Decimal] = mapped_column( Numeric(14, 2), nullable=False, comment="满足起付及权重的本次应付差额,可负" ) create_time: Mapped[datetime] = mapped_column( DateTime, server_default=text("CURRENT_TIMESTAMP"), nullable=False, comment="创建时间" ) class ProbationPayment(Base): __tablename__ = "probation_payments" __table_args__ = mysql_table_args( "试用期年终及后续结清记录(工资生成事务内固化)", UniqueConstraint( "settlement_id", "personnel_id", "year", name="uk_probation_payments_settlement_person_year", ), UniqueConstraint("adjustment_order_id", name="uk_probation_payments_adjustment_order_id"), Index("idx_probation_payments_personnel_id_year", "personnel_id", "year"), ) id: Mapped[int] = mapped_column( BIGINT_UNSIGNED, primary_key=True, autoincrement=True, comment="主键ID" ) settlement_id: Mapped[int | None] = mapped_column( BIGINT_UNSIGNED, ForeignKey("monthly_settlements.id", ondelete="CASCADE"), nullable=True, comment="月结ID(当月调整单结清时为空)", ) adjustment_order_id: Mapped[int | None] = mapped_column( BIGINT_UNSIGNED, ForeignKey("adjustment_orders.id", ondelete="RESTRICT"), nullable=True, comment="已生成工资后的结清调整单ID", ) personnel_id: Mapped[int] = mapped_column(BIGINT_UNSIGNED, nullable=False, comment="归属人员ID") year: Mapped[str] = mapped_column(String(4), nullable=False, comment="原累计年度") month: Mapped[str] = mapped_column(String(7), nullable=False, comment="本次实际支付月份") amount: Mapped[Decimal] = mapped_column( Numeric(14, 2), nullable=False, comment="本次补发或扣回金额" ) snapshot_json: Mapped[dict] = mapped_column( JSON, nullable=False, comment="计提、起付权重、门槛及历史补发依据" ) create_time: Mapped[datetime] = mapped_column( DateTime, server_default=text("CURRENT_TIMESTAMP"), nullable=False, comment="创建时间" )