82 lines
3.6 KiB
Python
82 lines
3.6 KiB
Python
|
|
"""试用期缓发与结清记录,引用固化台账,不使用人员当前开关重写历史。"""
|
|||
|
|
|
|||
|
|
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="创建时间"
|
|||
|
|
)
|