from decimal import Decimal from typing import TYPE_CHECKING, Optional from sqlalchemy import DateTime, ForeignKeyConstraint, Index, Integer, Numeric, PrimaryKeyConstraint, String, UniqueConstraint, func, text from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.orm.base import Mapped from datetime import datetime from enum import IntEnum from core.database import Base 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): __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.client_provider.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) tenant_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True) company_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True) 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_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)) # Timestamps created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False, default=func.now()) updated_at: Mapped[datetime] = mapped_column(DateTime, nullable=False, default=func.now(), onupdate=func.now()) deleted_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) 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')