O que foi mostrado ao vivo · 2 de 2
12.001 lançamentos fictícios testados em 100%
A base. Um razão (o livro que lista cada lançamento de uma conta) de contas a pagar de 2025, fictício, com 12.001 lançamentos. Empresa, fornecedores, contas bancárias e empregados foram inventados, e as anomalias foram plantadas de propósito, para haver gabarito. Os seis testes rodaram em todos os lançamentos, e não numa amostra. A própria NBC TA 500, do CFC, já admite examinar 100% da população, por exemplo quando um cálculo repetitivo processado por sistema torna isso eficiente em custo.
Os seis testes clássicos. Nenhum é novo; qualquer auditor conhece. O que ficou barato foi chegar até eles: hoje, um teste desses se descreve em português, a IA ajuda a escrever o programa, e o programa depois se relê e se confere.
- Duplicidade: mesmo fornecedor, mesma nota fiscal e mesmo valor.
- Fracionamento abaixo da alçada: alçada é o valor acima do qual o pagamento precisa de outro aprovador (na base fictícia, 10 mil reais). O teste procura vários pagamentos logo abaixo desse valor, sem segundo aprovador.
- Lançamento manual em dia ou horário atípico: fim de semana, feriado, noite ou madrugada.
- Conta bancária de fornecedor igual à de empregado.
- Primeiro dígito, pela Lei de Newcomb-Benford: em muitas bases reais, os valores que começam com 1 são bem mais comuns do que os que começam com 9. Desvio forte é sinal para olhar, e não prova.
- Ajuste manual de fim de exercício: valor redondo, sem nota, nos últimos dias do ano.
O resultado (base fictícia)
- 12.001 lançamentos testados em menos de um segundo, num notebook comum.
- 98 lançamentos sinalizados, 0,82% da população.
- 41 deles apontados por dois ou mais testes ao mesmo tempo (sinalizações convergentes).
Três exemplos, todos com nomes inventados:
- Delta Serviços de Manutenção: 23 pagamentos entre 9.700 e 9.990 reais, todos sem segundo aprovador. Na faixa de 9.500 reais até logo abaixo de 10 mil, nenhum outro fornecedor tem mais de dois.
- Ômega Consultoria Empresarial: 87,5% dos valores começam com 7, 8 ou 9, quando a curva de Newcomb-Benford esperaria 15,5%. E são 40 pagamentos para a mesma conta bancária de um empregado.
- Um ajuste de 250 mil reais lançado às 23h48 de 31 de dezembro: manual, sem nota, com o histórico "ajuste conforme orientação".
Fracionamento abaixo da alçada de R$ 10 mil. Base fictícia.
Primeiro dígito na Ômega Consultoria Empresarial (nome inventado). Base fictícia, 40 pagamentos.
A pergunta feita à plateia. O que falta para qualquer um desses 98 virar irregularidade apontada, na auditoria ou na perícia? Resposta: abrir o documento.
O gabarito. Das 98 sinalizações, 89 eram as anomalias plantadas e 9 tinham explicação legítima: 3 eram parcelas de contrato, com a mesma nota e o mesmo valor, e 6 eram pagamentos num plantão de fechamento autorizado, no fim de semana de 27 e 28 de dezembro. Sem abrir o documento, ninguém sabe quais são as nove. A máquina acertou o padrão. Quem decide se é irregular é quem vai ao documento.
Achado não é conclusão.
Aviso honestoA base foi montada para ter esses padrões. Por isso, esse acerto não mede desempenho em base real: mostra só que o teste faz o que promete. Na vida real não há gabarito, e separar o legítimo dá mais trabalho.
Como reproduzir sem mandar dado de cliente para lugar nenhum
- Peça o código, e não a conta. Em vez de enviar a planilha e perguntar "tem algo estranho?", descreva só as colunas do arquivo e peça um programa que rode no seu computador. O razão do cliente não precisa ir para ferramenta nenhuma.
- Teste primeiro numa base fictícia com gabarito, que inclua também casos legítimos plantados (parcelas de contrato, plantão de fechamento autorizado).
- Releia o código como quem revisa o papel de trabalho de outra pessoa (papel de trabalho é o registro do que o auditor fez e por quê): o que cada parte faz, se acessa a internet, se altera os arquivos de entrada.
- Antes dos testes, confira se a base está completa e exata: conte as linhas, some os valores e compare com um total de controle, como o movimento da conta no balancete. Examinar 100% não adianta se os 100% não estão lá.
- Guarde em arquivo a base de entrada, o programa e a saída. Um jeito de provar que a base não mudou é o hash: a impressão digital de um arquivo, um código calculado a partir de todo o conteúdo, que muda se um único caractere mudar.
- Trate cada sinalização como achado: liste as explicações legítimas e as que indicariam erro ou irregularidade, e o documento que confirmaria ou descartaria cada uma.
Um modelo de pedido, neutro de fornecedor, para o passo 1:
Modelo de pedido
Quero um programa em Python para rodar no meu próprio computador, sem internet. Não vou enviar os dados; descrevo só o formato.
Arquivo 1: razão de contas a pagar em CSV, com as colunas: id do lançamento; data; hora; usuário; tipo (manual ou automático); fornecedor; nota fiscal (pode vir vazia); valor; conta bancária de destino; histórico; aprovador 1; aprovador 2 (vazio quando não houve segundo aprovador).
Arquivo 2: cadastro de empregados em CSV, com matrícula; nome; conta bancária.
Aplique em 100% dos lançamentos, sem amostragem:
1. Duplicidade: mesmo fornecedor, mesma nota fiscal e mesmo valor.
2. Fracionamento: vários pagamentos do mesmo fornecedor logo abaixo da alçada de [VALOR], sem segundo aprovador.
3. Lançamento manual em fim de semana, feriado, noite ou madrugada.
4. Conta bancária de destino igual à conta de algum empregado.
5. Primeiro dígito (Newcomb-Benford) por fornecedor, só para fornecedores com lançamentos suficientes.
6. Ajuste de fim de exercício: manual, valor alto e redondo, sem nota fiscal, nos últimos dias do exercício.
Regras: todos os parâmetros no topo, com comentário explicando o valor escolhido; uma função por teste; só a biblioteca padrão do Python; não alterar os arquivos de entrada; na saída, escreva "sinalizado", nunca "irregular" nem "fraude". Depois do código, explique em linguagem de contador o que cada teste faz e as limitações de cada um.
A resposta dessas ferramentas muda com a versão e nem sempre se repete. Por isso, o que se guarda é o código e a saída, e não a conversa.
Reproduza com o kit
Com o Python 3 e as bibliotecas instaladas (o comando está logo acima, na demonstração do laudo), abra o Terminal na pasta onde descompactou o kit e rode:
Terminal
# gera o razão, o cadastro de empregados e o gabarito na pasta dados/
cd Kit_demonstracao_ficticio/kit
python3 gerar_razao_ficticio.py
Como saber que deu certoO Terminal mostra Lançamentos: 12001 | anomalias plantadas: 98 | semente 20260915. O 98 conta todas as linhas do gabarito: as 89 anomalias plantadas mais os 9 casos legítimos. A semente fixa faz a base sair igual a cada execução.
Quer tentar adivinhar antes de ver o gabarito, como na palestra? No macOS ou no Linux, de dentro da pasta kit, este comando roda os seis testes e mostra só as seis primeiras linhas do resumo, que não têm gabarito:
Terminal
# roda os testes e mostra só o resultado, sem a conferência contra o gabarito
python3 analisar_razao.py > /dev/null && head -6 saida/resumo_analise.md
Pergunte-se: o que falta para qualquer um destes 98 virar irregularidade apontada? Só depois rode a análise completa:
Terminal
# seis testes em 100% dos lançamentos, com a conferência contra o gabarito
python3 analisar_razao.py
Como saber que deu certoO resumo mostra 12.001 lançamentos testados (100% da população), 98 sinalizados (0,82%) e 41 sinalizados por dois ou mais testes. Por teste: duplicidade 17, fracionamento 23, dia ou horário atípico 18, conta de empregado 40, primeiro dígito 40, ajuste de fim de exercício 1 (um lançamento pode ser apontado por mais de um teste). Contra o gabarito: 89 anomalias verdadeiras, 9 sinalizações legítimas e 0 fora do gabarito. O tempo varia de um computador para outro e costuma ficar em centésimos de segundo. A pasta saida/ recebe o resumo, a lista de sinalizados e três gráficos.
Conferir que a base é a mesma. O hash é a impressão digital de um arquivo: se um único caractere mudar, ele muda. No macOS, de dentro da pasta kit:
Terminal
# no Linux: sha256sum dados/*.csv; no Windows: certutil -hashfile, um arquivo por vez
shasum -a 256 dados/*.csv
| Arquivo | SHA-256 esperado |
dados/cadastro_empregados_FICTICIO.csv | bccc0731bfd26314c577945e3de426f5bfc38b61ee329fa7b46e07f340f9cbcc |
dados/gabarito_anomalias.csv | 68fd0f5ba6ed0428bd714a5664130bbbf7f9b349d53eec647cbca4e491b832f4 |
dados/razao_contas_pagar_2025_FICTICIO.csv | acd2755cd30b15dcef168c5b5ff2363d0deca28fa6e8c0e4bd8f913d2142f3c8 |
Como saber que deu certoOs três códigos batem com a tabela. Se não baterem (por exemplo, com outra versão do Python), confira pelos números do resumo: 12.001, 98, 41, 89 e 9.
Fontes desta demonstração