Validador
Sistema de validação de dados financeiros com regras dinâmicas por convênio, utilizando Python, SQL (PostgreSQL) e PyQt5.
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.
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.
# (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