Projetos /

Validador

Sistema de validação de dados financeiros com regras dinâmicas por convênio, utilizando Python, SQL (PostgreSQL) e PyQt5.

Interface da Aplicação - Aba Limpeza de Planilhas
Interface da aplicação mostrando a aba "Limpeza de Planilhas", integrada ao Módulo Validador.

O Desafio

A validação de dados financeiros provenientes de diferentes convênios (INSS, Consiglog, Zetra, etc.) exigia processos manuais complexos e regras de negócio distintas para cada um. Era necessário automatizar essa validação, garantindo a integridade dos dados, a aplicação correta das regras e a geração de relatórios consolidados para análise.

O sistema precisava ser flexível o suficiente para acomodar as particularidades de cada convênio, desde os arquivos de entrada necessários até os scripts SQL específicos para a validação.

A Solução: Módulo Validador Integrado

Desenvolvi o Módulo Validador como parte integrante da aplicação desktop "Mordomo" (construída com PyQt5). Este módulo utiliza Python e PostgreSQL para orquestrar o processo de validação:

  • Interface Dinâmica (PyQt5): A aba "Validador de Convênios" adapta dinamicamente os campos de upload de arquivos com base no convênio selecionado pelo usuário, utilizando configurações pré-definidas (`configuracoes.py`).
  • Importação Robusta de Dados (Python/Pandas/Psycopg2): Carrega múltiplos arquivos CSV para tabelas PostgreSQL, detectando delimitadores, tratando diferentes encodings (UTF-8, Latin-1) e limpando dados textuais (remoção de acentos).
  • Criação Dinâmica de Schemas (Psycopg2/SQL): Para convênios não-INSS, gera dinamicamente as instruções `CREATE TABLE` com base nas colunas e tipos de dados inferidos do CSV, garantindo flexibilidade. Para INSS, utiliza schemas SQL pré-definidos (`criacao_tabelas.py`).
  • Execução de Regras SQL Específicas (Psycopg2): Seleciona e executa o script SQL de validação apropriado (`scripts_sql.py`) para o convênio escolhido. Esses scripts realizam joins complexos, cálculos (somas condicionais, diferenças, percentuais) e atualizam status (`LIBERADO`, `BLOQUEADO`, `REVISAR`).
  • Geração de Relatório Consolidado (Pandas/Openpyxl): Exporta os resultados das tabelas de validação para um arquivo Excel (`.xlsx`) com múltiplas abas nomeadas, aplicando formatação (bordas, alinhamento) e tratando a formatação de números (ponto vs. vírgula) para melhor legibilidade.

Interface Dinâmica do Validador

A interface se adapta aos arquivos exigidos por cada convênio, como Igeprev (Zetra) e INSS.

Validador configurado para Igeprev (Zetra)
Seleção do convênio Igeprev (tipo Zetra), exigindo 3 arquivos específicos.
Validador configurado para INSS
Seleção do convênio INSS, que requer um conjunto maior e diferente de arquivos.

Código em Destaque

Função `get_validation_query` do arquivo `validacao_base.py`. Ela demonstra a lógica central para selecionar o script SQL correto com base no tipo de convênio identificado no arquivo de configurações.

validacao/validacao_base.py (Seleção de Query)

# (Trecho de validacao_base.py)
from .configuracoes import (
    CONVENIOS_TIPO_INSS, CONVENIOS_TIPO_CONSIGLOG, CONVENIOS_TIPO_CIP, 
    # ... outros tipos ...
    CONVENIOS_TIPO_ZETRA_ORBITAL
)
import validacao.scripts_sql as scripts_sql

def get_validation_query(convenio_selecionado):
    """
    Retorna o script SQL de validação apropriado para o convênio selecionado.
    """
    CONVENIOS_PADRAO = (
        CONVENIOS_TIPO_CONSIGLOG + CONVENIOS_TIPO_CIP + 
        CONVENIOS_TIPO_KONEXIA + CONVENIOS_TIPO_NEOCONSIG + 
        CONVENIOS_TIPO_SMARTCONSIG + CONVENIOS_TIPO_SICON + 
        CONVENIOS_TIPO_ZETRA
    )

    if convenio_selecionado in CONVENIOS_PADRAO:
        return scripts_sql.VALIDACAO_PADRAO
    elif convenio_selecionado in CONVENIOS_TIPO_CONSIGFACIL:
        return scripts_sql.VALIDACAO_CONSIGFACIL
    elif convenio_selecionado in CONVENIOS_TIPO_NEOCONSIG_ORBITAL:
        return scripts_sql.VALIDACAO_NEOCONSIG_ORBITAL
    elif convenio_selecionado in CONVENIOS_TIPO_ZETRA_ORBITAL:
        return scripts_sql.VALIDACAO_ZETRA_ORBITAL
    elif convenio_selecionado in CONVENIOS_TIPO_INSS:
        return scripts_sql.VALIDACAO_INSS
    else:
        # Retorna None se nenhum script corresponder, 
        # para ser tratado na função chamadora.
        return None