from sqlalchemy import Column, Integer, DateTime, ForeignKey, Date, Numeric, Enum from sqlalchemy.sql import func from sqlalchemy.orm import relationship from app.db.base import Base import enum class PayrollStatus(enum.Enum): DRAFT = "draft" PROCESSED = "processed" PAID = "paid" class PayrollRecord(Base): __tablename__ = "payroll_records" id = Column(Integer, primary_key=True, index=True) employee_id = Column(Integer, ForeignKey("employees.id"), nullable=False) pay_period_start = Column(Date, nullable=False) pay_period_end = Column(Date, nullable=False) base_salary = Column(Numeric(10, 2), nullable=False) overtime_hours = Column(Numeric(5, 2), default=0) overtime_rate = Column(Numeric(5, 2), default=0) bonus = Column(Numeric(10, 2), default=0) deductions = Column(Numeric(10, 2), default=0) gross_pay = Column(Numeric(10, 2), nullable=False) tax_deductions = Column(Numeric(10, 2), default=0) net_pay = Column(Numeric(10, 2), nullable=False) status = Column(Enum(PayrollStatus), default=PayrollStatus.DRAFT) processed_by = Column(Integer, ForeignKey("users.id")) processed_at = Column(DateTime(timezone=True)) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) # Relationships employee = relationship("Employee", back_populates="payroll_records") processor = relationship("User", foreign_keys=[processed_by])