from decimal import Decimal from typing import TYPE_CHECKING, Optional from api.v1.common.base_models import TenantScopedMixin, TimestampMixin from core.database import Base from sqlalchemy import ( ForeignKeyConstraint, Index, Integer, Numeric, PrimaryKeyConstraint, String, UniqueConstraint, ) from sqlalchemy.orm import Mapped, mapped_column, relationship if TYPE_CHECKING: from api.v1.modules.a76.pedmientos.models.pedimento_config_additional import ( PedimentoConfigAdditional, ) from api.v1.modules.a76.pedmientos.models.pedimento_config_calculations import ( PedimentoConfigCalculations, ) from api.v1.modules.a76.pedmientos.models.pedimento_config_parameters import ( PedimentoConfigParameters, ) from api.v1.modules.a76.pedmientos.models.pedimento_config_surcharges import ( PedimentoConfigSurcharges, ) from api.v1.modules.a76.pedmientos.models.pedimento_config_update_rectification import ( PedimentoConfigUpdateRectification, ) from api.v1.modules.a76.pedmientos.models.pedimento_config_updates import ( PedimentoConfigUpdates, ) from api.v1.modules.a76.pedmientos.models.pedimento_customs_offices import ( PedimentoCustomsOffices, ) from api.v1.modules.a76.pedmientos.models.pedimento_dates import PedimentoDates from api.v1.modules.a76.pedmientos.models.pedimento_decrementables import ( PedimentoDecrementables, ) from api.v1.modules.a76.pedmientos.models.pedimento_incrementables import ( PedimentoIncrementables, ) from api.v1.modules.a76.pedmientos.models.pedimento_indexes import PedimentoIndexes from api.v1.modules.a76.pedmientos.models.pedimento_payments import ( PedimentoPayments, ) from api.v1.modules.a76.pedmientos.models.pedimento_rectification_destination import ( PedimentoRectificationDestination, ) from api.v1.modules.a76.pedmientos.models.pedimento_rectification_origin import ( PedimentoRectificationOrigin, ) from api.v1.modules.a76.pedmientos.models.pedimento_transport_means import ( PedimentoTransportMeans, ) from api.v1.modules.a76.pedmientos.models.pedimento_validation import ( PedimentoValidation, ) class Pedimentos(Base, TenantScopedMixin, TimestampMixin): __tablename__ = "pedimentos" __table_args__ = ( PrimaryKeyConstraint("id", name="pedimentos_pkey"), ForeignKeyConstraint( ["tenant_id"], ["a76.tenants.id"], name="fk_pedimentos_tenant" ), ForeignKeyConstraint( ["company_id"], ["a76.company.id"], name="fk_pedimentos_company" ), ForeignKeyConstraint( ["client_id"], ["a76.clients_and_providers.id"], name="fk_pedimentos_client" ), ForeignKeyConstraint( ["regime"], ["public.pedimento_regimens.code"], name="fk_pedimentos_regime" ), ForeignKeyConstraint( ["pedimento_code"], ["public.pedimento_codes.code"], name="fk_pedimentos_code", ), UniqueConstraint( "tenant_id", "company_id", "year", "customs_office", "license", "pedimento_number", name="pedimentos_unique_key", ), Index("idx_pedimentos_client_id", "client_id"), Index("idx_pedimentos_created_at", "created_at"), Index("idx_pedimentos_status", "status"), {"schema": "a76"}, ) id: Mapped[int] = mapped_column(Integer) year: Mapped[str] = mapped_column(String(2)) customs_office: Mapped[str] = mapped_column(String(2)) license: Mapped[str] = mapped_column(String(4)) pedimento_number: Mapped[str] = mapped_column(String(7)) client_id: Mapped[int] = mapped_column(Integer) operation_type: Mapped[int] = mapped_column(Integer) pedimento_type: Mapped[int] = mapped_column(Integer) pedimento_code: Mapped[str] = mapped_column(String(2)) regime: Mapped[str] = mapped_column(String(3)) status: Mapped[str] = mapped_column(String(30)) usd_value: Mapped[Optional[Decimal]] = mapped_column(Numeric(17, 6)) paid_price: Mapped[Optional[Decimal]] = mapped_column(Numeric(17, 6)) gross_weight: Mapped[Optional[Decimal]] = mapped_column(Numeric(19, 3)) exchange_rate: Mapped[Optional[Decimal]] = mapped_column(Numeric(9, 5)) pedimento_config_additional: Mapped["PedimentoConfigAdditional"] = relationship( "PedimentoConfigAdditional", uselist=False, back_populates="pedimento" ) pedimento_config_calculations: Mapped["PedimentoConfigCalculations"] = relationship( "PedimentoConfigCalculations", uselist=False, back_populates="pedimento" ) pedimento_config_parameters: Mapped["PedimentoConfigParameters"] = relationship( "PedimentoConfigParameters", uselist=False, back_populates="pedimento" ) pedimento_config_surcharges: Mapped["PedimentoConfigSurcharges"] = relationship( "PedimentoConfigSurcharges", uselist=False, back_populates="pedimento" ) pedimento_config_update_rectification: Mapped[ "PedimentoConfigUpdateRectification" ] = relationship( "PedimentoConfigUpdateRectification", uselist=False, back_populates="pedimento" ) pedimento_config_updates: Mapped["PedimentoConfigUpdates"] = relationship( "PedimentoConfigUpdates", uselist=False, back_populates="pedimento" ) pedimento_customs_offices: Mapped["PedimentoCustomsOffices"] = relationship( "PedimentoCustomsOffices", uselist=False, back_populates="pedimento" ) pedimento_dates: Mapped["PedimentoDates"] = relationship( "PedimentoDates", uselist=False, back_populates="pedimento" ) pedimento_decrementables: Mapped["PedimentoDecrementables"] = relationship( "PedimentoDecrementables", uselist=False, back_populates="pedimento" ) pedimento_incrementables: Mapped["PedimentoIncrementables"] = relationship( "PedimentoIncrementables", uselist=False, back_populates="pedimento" ) pedimento_indexes: Mapped["PedimentoIndexes"] = relationship( "PedimentoIndexes", uselist=False, back_populates="pedimento" ) pedimento_payments: Mapped["PedimentoPayments"] = relationship( "PedimentoPayments", uselist=False, back_populates="pedimento" ) pedimento_rectification_destination: Mapped["PedimentoRectificationDestination"] = ( relationship( "PedimentoRectificationDestination", uselist=False, back_populates="pedimento", ) ) pedimento_rectification_origin: Mapped["PedimentoRectificationOrigin"] = ( relationship( "PedimentoRectificationOrigin", uselist=False, back_populates="pedimento" ) ) pedimento_transport_means: Mapped["PedimentoTransportMeans"] = relationship( "PedimentoTransportMeans", uselist=False, back_populates="pedimento" ) pedimento_validation: Mapped["PedimentoValidation"] = relationship( "PedimentoValidation", uselist=False, back_populates="pedimento" )