Zion
Aplicação desktop (PyQt5) para limpeza e validação de dados financeiros com regras dinâmicas por convênio.
O Problema
Processar e validar dados financeiros de múltiplos convênios (INSS, Zetra, Consiglog, entre outros) era manual e sujeito a erro: cada convênio tinha layout de arquivo, regras de negócio e nomenclatura de colunas diferentes, e as bases envolvidas somavam mais de R$ 40 milhões em valores processados — qualquer inconsistência tinha impacto direto em auditoria e tomada de decisão.
A Solução
- Interface desktop dividida em "Limpeza de Planilhas" e "Validador de Convênios", com regras específicas por tipo de convênio.
- Módulo de limpeza dinâmico, dirigido por um dicionário de regras aplicado conforme o convênio selecionado.
- Carga dos arquivos para tabelas em PostgreSQL, com schemas pré-definidos ou gerados dinamicamente.
- Execução de scripts SQL transacionais (commit/rollback) para validação e cálculo por convênio.
Arquitetura
- PyQt5 para a interface desktop.
- PostgreSQL como camada de persistência e validação via SQL transacional.
- Configuração de conexão isolada em um módulo próprio, testável pela própria interface.
Interface
Código em destaque
validacao_base.py
import psycopg2
from design.settings_manager import get_db_config
def run_validation_process(convenio, file_paths, output_path, progress_callback=None):
conn = None
try:
current_db_config = get_db_config()
conn = psycopg2.connect(**current_db_config)
cur = conn.cursor()
for i, (table_name, file_path) in enumerate(file_paths.items()):
progress_callback and progress_callback.emit(
10 + int((i / len(file_paths)) * 65), f"Importando '{table_name}'..."
)
import_csv_to_postgres(conn, cur, table_name, file_path, convenio)
conn.autocommit = False
cur.execute("BEGIN;")
try:
for step in steps:
if step["sql"].strip():
cur.execute(step["sql"])
conn.commit()
except Exception as e_sql:
conn.rollback()
raise Exception(f"Erro na etapa SQL '{step['name']}': {e_sql}")
finally:
conn.autocommit = True
finally:
if conn:
cur.close()
conn.close() Aprendizados
Regras de negócio distintas por convênio só se tornam sustentáveis quando modeladas como dados (dicionário de regras), não como condicionais espalhados pelo código — foi a decisão de design que mais facilitou adicionar novos convênios depois.