""" Modelos ORM para gestión de empresa """ from typing import Optional from datetime import datetime from sqlalchemy import ( DateTime, Integer, String, Boolean, SmallInteger, ForeignKey, PrimaryKeyConstraint, ForeignKeyConstraint, UniqueConstraint, ) from sqlalchemy.sql import func from sqlalchemy.orm import Mapped, mapped_column from core.database import Base class Company(Base): """ Modelo para la tabla Company - Información de la empresa """ __tablename__ = "company" __table_args__ = ( PrimaryKeyConstraint("id", name="company_pkey"), ForeignKeyConstraint( ["tenant_id"], ["a76.tenants.id"], name="fk_company_tenant" ), {"schema": "a76"}, ) # Primary key id: Mapped[int] = mapped_column(Integer, primary_key=True) tenant_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True) # Información básica de la empresa name: Mapped[Optional[str]] = mapped_column(String(255)) rfc: Mapped[Optional[str]] = mapped_column(String(30)) main_activity: Mapped[Optional[str]] = mapped_column(String(255)) # Información del programa program: Mapped[Optional[str]] = mapped_column(String(10)) program_number: Mapped[Optional[str]] = mapped_column(String(40)) prosec: Mapped[Optional[int]] = mapped_column(SmallInteger) prosec_authorization: Mapped[Optional[str]] = mapped_column(String(20)) # Identificadores manufacturer_id: Mapped[Optional[str]] = mapped_column(String(25)) broker_company: Mapped[Optional[str]] = mapped_column(String(10)) # Responsable responsible: Mapped[Optional[str]] = mapped_column(String(80)) responsible_name: Mapped[Optional[str]] = mapped_column(String(20)) responsible_last_name: Mapped[Optional[str]] = mapped_column(String(20)) responsible_mother_last_name: Mapped[Optional[str]] = mapped_column(String(20)) responsible_rfc: Mapped[Optional[str]] = mapped_column(String(30)) position: Mapped[Optional[str]] = mapped_column(String(30)) # Configuración logo: Mapped[Optional[str]] = mapped_column(String(255)) has_express_line: Mapped[Optional[bool]] = mapped_column(Boolean) order_format_type: Mapped[Optional[str]] = mapped_column(String(19)) previous_code: Mapped[Optional[int]] = mapped_column(SmallInteger) is_service_company: Mapped[Optional[bool]] = mapped_column(Boolean) # Cliente y submaquila client_name: Mapped[Optional[str]] = mapped_column(String(300)) subassembly_mode: Mapped[Optional[str]] = mapped_column(String(7)) # Información adicional curp: Mapped[Optional[str]] = mapped_column(String(19)) inter_db_name: Mapped[Optional[str]] = mapped_column(String(100)) ctpat_svi: Mapped[Optional[str]] = mapped_column(String(100)) trusted_exporter_number: Mapped[Optional[str]] = mapped_column(String(50)) prevalidator_key: Mapped[Optional[str]] = mapped_column(String(20)) seventh_amendment: Mapped[Optional[bool]] = mapped_column( Boolean ) # FINALCONTADORAELECTRONICO renombrado # 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)