from core.database import Base
from sqlalchemy import Column, String, Integer, BigInteger, Numeric, Text, Date, Boolean

class OmieContaReceber(Base):
    """Modelo para tabela omie_contaReceber no MySQL (DataLake)"""
    __tablename__ = "omie_contaReceber"
    
    codigo_lancamento_omie = Column(BigInteger, primary_key=True)
    cnpj = Column(String(18), nullable=False, index=True)
    cNumeroContrato = Column(String(50), nullable=True)
    codigo_categoria = Column(String(50), nullable=True)
    codigo_cliente_fornecedor = Column(BigInteger, nullable=True, index=True)
    codigo_lancamento_integracao = Column(String(50), nullable=True)
    codigo_tipo_documento = Column(String(50), nullable=True)
    data_emissao = Column(Date, nullable=True)
    data_previsao = Column(Date, nullable=True)
    data_registro = Column(Date, nullable=True)
    data_vencimento = Column(Date, nullable=True, index=True)
    id_conta_corrente = Column(BigInteger, nullable=True)
    id_origem = Column(String(50), nullable=True)
    nCodOS = Column(BigInteger, nullable=True)
    numero_documento = Column(String(50), nullable=True)
    numero_documento_fiscal = Column(String(50), nullable=True)
    numero_parcela = Column(Integer, nullable=True)
    numero_pedido = Column(String(50), nullable=True)
    operacao = Column(String(50), nullable=True)
    retem_cofins = Column(String(1), nullable=True)
    retem_csll = Column(String(1), nullable=True)
    retem_inss = Column(String(1), nullable=True)
    retem_ir = Column(String(1), nullable=True)
    retem_iss = Column(String(1), nullable=True)
    retem_pis = Column(String(1), nullable=True)
    status_titulo = Column(String(50), nullable=True, index=True)
    tipo_agrupamento = Column(String(50), nullable=True)
    valor_cofins = Column(Numeric(15, 2), default=0)
    valor_csll = Column(Numeric(15, 2), default=0)
    valor_documento = Column(Numeric(15, 2), default=0)
    valor_ir = Column(Numeric(15, 2), default=0)
    valor_pis = Column(Numeric(15, 2), default=0)
    observacoes = Column(Text, nullable=True)
    observacao = Column(Text, nullable=True)
    valor_desconto = Column(Numeric(15, 2), default=0)
    valor_juros = Column(Numeric(15, 2), default=0)
    valor_multa = Column(Numeric(15, 2), default=0)
    valor_pago = Column(Numeric(15, 2), default=0)
    data_pagamento = Column(Date, nullable=True, index=True)
    data_baixa = Column(Date, nullable=True)
    codigo_vendedor = Column(BigInteger, nullable=True)
    codigo_projeto = Column(BigInteger, nullable=True)
    codigo_baixa = Column(String(50), nullable=True)
    id_baixa = Column(BigInteger, nullable=True)
    codigo_forma_pagamento = Column(String(50), nullable=True)
    numero_cheque = Column(String(50), nullable=True)
    numero_documento_pagamento = Column(String(50), nullable=True)
    codigo_banco = Column(String(10), nullable=True)
    tipo_desconto = Column(String(50), nullable=True)
    data_limite_desconto = Column(Date, nullable=True)
    tipo_juros = Column(String(50), nullable=True)
    tipo_multa = Column(String(50), nullable=True)
    valor_juros_calculado = Column(Numeric(15, 2), default=0)
    valor_multa_calculado = Column(Numeric(15, 2), default=0)
    bloqueado = Column(String(1), nullable=True)
    status_bloqueio = Column(String(50), nullable=True)
    motivo_bloqueio = Column(Text, nullable=True)
    lixeira = Column(Boolean, default=False, index=True)