# packages/v1/administrativo/models/ato_principal_model.py from sqlalchemy import ( Column, BigInteger, Integer, String, DateTime, Numeric, Text, ForeignKey, CheckConstraint, ) from sqlalchemy.dialects.postgresql import INET from sqlalchemy.sql import func from database.postgres import Base class AtoPrincipal(Base): """ Representa o modelo da tabela 'ato_principal' no banco de dados PostgreSQL. """ __tablename__ = "ato_principal" ato_principal_id = Column(BigInteger, primary_key=True, autoincrement=True, index=True) origem_ato_principal_id = Column( BigInteger, ForeignKey("ato_principal.ato_principal_id", ondelete="SET NULL", onupdate="CASCADE"), nullable=True, ) identificacao_pedido_cgj = Column(BigInteger, nullable=False) tipo_ato = Column(Integer, nullable=False) codigo_selo = Column(String(50), nullable=False, unique=True) codigo_ato = Column(String(50), nullable=False, unique=True) nome_civil_ato = Column(String(255), nullable=False) nome_serventuario_praticou_ato = Column(String(255), nullable=False) data_solicitacao = Column(DateTime(timezone=True), nullable=False) ip_maquina = Column(INET, nullable=True) inteiro_teor = Column(Text, nullable=False) valor_entrada = Column(Numeric(12, 2), nullable=True, default=0) emolumento = Column(Numeric(12, 2), nullable=False) taxa_judiciaria = Column(Numeric(12, 2), nullable=False) fundos_estaduais = Column(Numeric(12, 2), nullable=False) protocolo_protesto = Column(String(50), nullable=True) protocolo_imovel = Column(String(50), nullable=True) created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False) # Constraints e índices adicionais __table_args__ = ( CheckConstraint( "(COALESCE(valor_entrada, 0) >= 0) AND (emolumento >= 0) AND (taxa_judiciaria >= 0) AND (fundos_estaduais >= 0)", name="chk_valores_positivos", ), ) def __repr__(self): return ( f"" )