# packages/v1/administrativo/models/ato_principal_model.py from sqlalchemy import ( Column, BigInteger, Integer, String, DateTime, Numeric, Text, ForeignKey, CheckConstraint, ) # No MySQL, usaremos String(45) para armazenar endereços IPv4/IPv6 from sqlalchemy.sql import func # Atualize para importar Base do MySQL from database.mysql import Base class AtoPrincipal(Base): """ Representa o modelo da tabela 'ato_principal' no banco de dados MySQL. """ __tablename__ = "ato_principal" # ID principal do ato ato_principal_id = Column( BigInteger, primary_key=True, autoincrement=True, index=True ) # Relacionamento com o próprio ato (auto-relacionamento) origem_ato_principal_id = Column( BigInteger, ForeignKey( "ato_principal.ato_principal_id", ondelete="SET NULL", onupdate="CASCADE" ), nullable=True, ) # Campos principais 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) # Substituído INET por String(45) # O tamanho 45 cobre IPv6, IPv4 e localhost ip_maquina = Column(String(45), nullable=True) # Conteúdo principal do ato inteiro_teor = Column(Text, nullable=False) # Valores financeiros 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) # Protocolos opcionais protocolo_protesto = Column(String(50), nullable=True) protocolo_imovel = Column(String(50), nullable=True) # Controle de auditoria 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, ) # Mantém constraint de valores positivos __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): """Representação legível do objeto.""" return ( f"" )