Atualmente, é comum encontrarmos processos de auditoria financeira e validação de notas fiscais que são executados manualmente ou com auxílio de macros em VBA no Excel. Embora eficazes até certo ponto, essas soluções apresentam limitações significativas em termos de escalabilidade, integração e manutenção.
Este artigo compartilha minha experiência na automação de um processo de auditoria de documentos fiscais, originalmente desenvolvido em VBA, e sua modernização utilizando Python. A proposta foi transformar uma rotina repetitiva e sujeita a erros em uma solução eficiente, escalável e de fácil manutenção.
O processo original consistia na importação de arquivos texto (.txt) contendo registros financeiros, normalmente exportados de um sistema ERP (como SAP). O VBA realizava tarefas como:
Python se mostrou uma excelente alternativa por diversas razões:
[ Arquivos TXT/CSV ] → [ Leitura e Validação com pandas ] → [ Aplicação das Regras ] → [ Geração de Relatórios (Excel ou Dashboard) ]
Durante o desenvolvimento da automação, foi fundamental implementar um conjunto robusto de regras para garantir a qualidade dos dados e a conformidade fiscal. Aqui apresentamos as 4 principais regras aplicadas:
Regra | Descrição | Objetivo |
---|---|---|
1 | Descrição do material contém "Sem Número" → imposto deve ser zero. | Verificar materiais genéricos ou mal cadastrados com imposto incorreto. |
2 | Cod. Imposto = "IN" ou (CNPJ vazio e CPF tem 9 dígitos) → imposto ≥ 11%. | Detectar possíveis cadastros incompletos que indicam retenções maiores. |
8 | Agrupar notas fiscais onde Ctg. N = "SE" e os campos CIA, Nº NF, Nº Ordem, Nome e Total NF são iguais. | Detectar documentos relacionados, permitindo análise consolidada. |
11 | Verificar se uma nota não possui imposto (quando valor líquido = total NF). | Identificar possíveis erros de tributação (ausência de imposto). |
Ao todo, foram implementadas 13 regras de auditoria que cobrem desde validações específicas até agrupamento e reconciliação de dados. O conjunto completo das regras pode ser consultado no final deste artigo.
Para contextualizar a evolução do processo, abaixo está a interface da automação original desenvolvida em VBA. Note como o sistema importava arquivos TXT do SAP e aplicava as regras de auditoria de forma manual:
Interface da automação original em VBA/Excel, mostrando os 17 campos esperados e as 13 regras de auditoria implementadas.
Esta interface ilustra bem as limitações da solução anterior: dependência total do Excel, interface não intuitiva e processo semi-manual. Com Python, eliminamos essas barreiras e criamos uma solução completamente automatizada.
import pandas as pd
# Carregar arquivo txt delimitado por pipe '|'
df = pd.read_csv('notas_fiscais.txt', sep='|')
print(df.head())
Regra: Se a descrição do material contém "Sem Número", o imposto deve ser zero.
df['Erro'] = df.apply(
lambda row: 'Imposto incorreto'
if 'Sem Número' in str(row['DescricaoMaterial']) and row['Imposto'] != 0
else '', axis=1
)
df.to_excel('relatorio_auditoria.xlsx', index=False)
Critério | Solução VBA | Solução Python |
---|---|---|
Volume de Dados | Limitado (~1 milhão) | Milhões de registros |
Desempenho | Médio | Alto |
Integração | Limitada | APIs, Bancos, Web |
Manutenção | Difícil | Simples, modular, versionável |
Automatização Completa | Limitada | Sim, sem intervenção manual |
Automatizar processos de auditoria financeira com Python não só é viável como altamente recomendável. A experiência demonstrou que é possível construir soluções robustas, escaláveis e integráveis, eliminando as limitações tradicionais do VBA no Excel.
Este é um caminho sem volta para quem busca modernizar processos, aumentar produtividade e reduzir riscos operacionais.
Para quem tem interesse técnico, aqui está o conjunto completo das 13 regras de auditoria implementadas na automação:
Regra | Descrição | Objetivo |
---|---|---|
1 | Descrição do material contém "Sem Número" → imposto deve ser zero. | Verificar materiais genéricos ou mal cadastrados com imposto incorreto. |
2 | Cod. Imposto = "IN" ou (CNPJ vazio e CPF tem 9 dígitos) → imposto ≥ 11%. | Detectar possíveis cadastros incompletos que indicam retenções maiores. |
3 | Cod. Imposto = "XB" e imposto igual a zero. | Validar se XB está aplicado incorretamente sem imposto devido. |
4 | Cod. Imposto = "XA" ou "YW" e descrição do material = "N 1.05" → imposto deve ser zero. | Isentar corretamente serviços específicos dessa classificação. |
5 | Cod. Imposto = "XA" ou "YW" e descrição do material = "N 10.05" → imposto ≤ 1,5%. | Validar serviços que possuem limite máximo de imposto aplicado. |
6 | Cod. Imposto = "XA" ou "YW" e descrição = "N 1.07" e Cod. Parceiro = 436 → imposto deve ser zero. | Caso especial de isenção total para parceiro e serviço específicos. |
7 | Ctg. N = "SE" ou "CI". | Contabilizar corretamente registros classificados como SE ou CI. |
8 | Agrupar notas fiscais onde Ctg. N = "SE" e os campos CIA, Nº NF, Nº Ordem, Nome e Total NF são iguais. | Detectar documentos relacionados, permitindo análise consolidada. |
9 | Somar valor líquido para documentos agrupados por Doc Contábil e Ctg. N. | Validar se os valores consolidados estão corretos entre registros. |
10 | Após a soma, verificar se uma nota CI cancela uma nota SE (comparando datas, horários e valores). | Detectar estornos, cancelamentos ou compensações. |
11 | Verificar se uma nota não possui imposto (quando valor líquido = total NF). | Identificar possíveis erros de tributação (ausência de imposto). |
12 | Identificar o tipo de imposto a partir da taxa (%). | Validar se a alíquota aplicada corresponde aos impostos esperados. |
13 | Checar se o imposto aplicado é permitido para o número de serviço (descrição do material). | Garantir que não há impostos indevidos para determinados serviços. |