""" Modelos ORM para gestión de clases SCAII y SCAF """ from sqlalchemy import Column, Integer, String, DateTime, Boolean, Text, Numeric, SmallInteger, ForeignKey from sqlalchemy.sql import func from sqlalchemy.orm import relationship from core.database import Base import enum # Importar modelos relacionados para type hints y relationships from typing import TYPE_CHECKING, List, Optional if TYPE_CHECKING: from api.v1.modules.a76.GParts.models import GPart from api.v1.modules.public.reference_data.material_types.models import MaterialType class GClass(Base): """ Modelo para la tabla GClases - Información de clases en sistemas SCAII y SCAF """ __tablename__ = "gclasses" __table_args__ = {"schema": "a76"} # Primary key compuesta client_key = Column(Integer, primary_key=True, nullable=False) class_code = Column(String(8), primary_key=True, nullable=False) # Basic information description_spanish = Column(String(500), nullable=True) description_english = Column(String(500), nullable=True) # Material and measurement material_key = Column(String(10), ForeignKey('public.material_types.key'), nullable=True) # CLAVEMAT - homologated from TIPOMAT/TIPOMATEQUIPO unit_of_measure = Column(String(5), nullable=True) # UNIMED - homologated from UNIMEDIDA # Tariff fractions fraction = Column(String(10), nullable=True) # Mexican tariff fraction us_fraction = Column(String(16), nullable=True) # FRACCIONAME - US tariff fraction # Additional classification sub_key = Column(String(5), nullable=True) # CLAVESUB physical_review = Column(SmallInteger, nullable=True) # REVFISICA iva_exempt_fraction = Column(String(4), nullable=True) # FRACCIONEXENTAIVA # Relationships material_type = relationship("MaterialType", foreign_keys=[material_key]) # Inverse relationship with GParts that have this class parts = relationship( "GPart", primaryjoin="and_(GClass.client_key == GPart.client_key, GClass.class_code == GPart.part_class)", foreign_keys="[GPart.client_key, GPart.part_class]", viewonly=True, back_populates="part_class_info" ) def __repr__(self): return f""