Dados B3 EN

Histórico de auditorias

Cada auditoria já feita nesta base, com quem a executou e o que ela achou. Os erros ficam aqui — é esse o ponto.

18auditorias
13conferidos por terceiro
67conferidos por nós
79bateram
1divergiram
70achados registrados

Quem esconde erro não publica tabela de erros. E auditoria que nós mesmos rodamos vale menos que a de terceiro, por isso as duas aparecem separadas em vez de somadas.

Taxa de concordância observada: 79/80 (99%)

Isto NÃO é estimativa estatística da taxa de erro da base. Significa apenas: não foi encontrada divergência nestes casos específicos. Uma amostra deste tamanho não sustenta afirmação sobre a população inteira, e a maior parte destas conferências foi feita por nós — o que vale menos que conferência de terceiro. A ressalva fica junto do número de propósito: solta num rodapé, ninguém a lê, e a página passa a produzir a impressão de certeza que ela existe para combater.

DataQuem rodouAmostraConferidosBateramDivergiramResultado
2026-08-30externo
GPT (OpenAI), semente propria 847231 — amostra colada como texto
105505 de 10 conferidos por FONTE INDEPENDENTE, 5/5 bateram; 10/10 seguem inconclusivos contra a CVM (o leitor nao abre application/zip). Zero divergencia numerica. UM defeito de trilha de auditoria achado.
  • ★ DEFEITO DE TRILHA: no BPAC11 2024, `contas_cvm_declaradas` dizia 3.11.01 e 2.03-2.03.09 enquanto `contas_realmente_usadas` dizia 3.09.01 e 2.08. A lista saia do DICIONARIO por INDICADOR, cega ao plano de contas da empresa. 1.407 indicadores (2,2%) saiam assim — e justo na superficie bancaria, que o nosso proprio prompt manda atacar. Ele classificou certo: defeito de METADADO, nao divergencia numerica, e se recusou a transformar a inconsistencia em 'ROE errado'. Corrigido: AUD12.
  • ★ OBJECAO MAIS FINA QUE JA RECEBEMOS: conferir os 10 sample_score prova que a chave reproduz os scores APRESENTADOS, mas nao que sejam os 10 menores do universo de 63.281 — ele nao recebeu a populacao para ordenar. Detecta chave inventada, nao detecta OMISSAO. Criada a rota /auditoria/universo (1,4 MB, so as chaves) para ele refazer a ordenacao sem nos. AUD13.
  • O AUD13 nasceu CEGO para o defeito mais provavel: o ataque 'omite uma linha do universo' PASSOU, porque linha arbitraria quase nunca esta no top-N. Corrigido conferindo a CONTAGEM contra a tabela. Mesmo buraco que ele apontou, um nivel acima: conferir o topo nao prova a populacao.
  • Ele tambem separou 'bate a formula declarada' de 'bate a divida liquida gerencial da companhia' na AEGEA 2016 — diferenca de CONCEITO, nao erro. Classificacao correta.
2026-08-29externo
Claude (Anthropic), semente propria 582917
251101 conferido de 25, 24 inconclusivos, e ele recusou converter qualquer inconclusivo em 'passou'. O caso BATEU aritmeticamente com o documento auditado — mas ele registrou RESSALVA METODOLOGICA que se provou um defeito real nosso. FECHADA em 30/08 pelo proprio auditor, com verificacao de ponta a ponta em URLs virgens de cache (n=23 e n=24, que ele escolheu).
  • ★ ACHADO DE DADO, o primeiro vindo de auditor externo desde o Grok. Nosso D&A somava `6.01.01.11 Amortizacao do custo de transacao, agio e desagio` (R$ 67 mi) ao EBITDA da Suzano 2023: +0,34%. Ele nao declarou divergencia porque nao podia mostrar a conta, e registrou a ressalva. Estava certo.
  • Causa sistemica: RE_DA casava QUALQUER rotulo com 'amortiza'. Medido: 279 empresa-anos, 226 EBITDAs inflados, 107 acima de 1%, 35 acima de 5%. SERENA ENERGIA 2023 saia +38,9% (R$ 908 mi num EBITDA de R$ 2,3 bi).
  • CORRIGIDO (nao marcado): custo de captacao e despesa de financiamento dentro de metrica operacional — nao e ambiguidade da fonte, e erro de leitura nosso. 232 EBITDAs e 223 dl_ebitda mudaram. Invariante AUD09.
  • A primeira regex de exclusao teria comido `amortizacao de mais-valia` em 89 linhas — que e amortizacao de ATIVO e entra no EBITDA por definicao. Corrigir demais e o mesmo defeito que corrigir de menos.
  • Ele tambem reportou 5x HTTP 502 em /auditoria/amostra e levantou hipotese de rota x n. NAO PROCEDE: 12/12 em 200 no reteste, ~1,6s. Eram os NOSSOS deploys reiniciando o servico enquanto ele testava.
  • ★ ACHADO DE PROTOCOLO, e vale tanto quanto o de dado: o prompt publico abria com 'Eu nao sou o dono dela e nao tenho interesse no resultado' — e quem mais cola o prompt somos NOS. O revisor apontou que a auditoria abriu com 'nao sou o dono' e o desfecho chegou em primeira pessoa. Corrigido: o prompt agora manda o auditor tratar o proprio texto como ALEGACAO da parte auditada, e avisa que quem pediu provavelmente e o dono. Invariante AUD10.
  • Ele reteste as tres alegacoes do nosso desfecho antes de aceitar e reportou as tres como nao confirmadas — 502 na /amostra, data_version antiga, payload de 142 KB. Estava lendo CACHE, e o proprio `audit_id` prova: ele e hash de data_version|esquema|semente|n, e o que ele citou (AUD-0A42F8CAE42A) e o de ontem; no ar esta AUD-9568CFEECAC9. Reteste nosso: 8/8 em 200 nas duas rotas. EXIGIR verificacao antes de aceitar o desfecho foi o comportamento certo, e a conclusao errada nao tira isso.
  • ★ E ELE ACHOU UM ERRO NA NOSSA MENSAGEM: dissemos 'resposta enxuta, so os insumos do indicador'. So `onde_procurar` foi enxugado; `contas_realmente_usadas` continua trazendo todas as contas DE PROPOSITO — o reconstrutor independente depende dela. 142 KB -> 68 KB, nao 60. A afirmacao imprecisa era nossa.
  • ★ RETRATACAO DO AUDITOR, publicada por ele com o mesmo destaque do achado: a 'assimetria /amostra x /random' com 8 medicoes era artefato do leitor de paginas DELE. A 1a requisicao caiu durante um deploy real nosso, recebeu 502, e o fetcher CACHEOU O ERRO; as 7 seguintes leram o mesmo 502 congelado. Palavras dele: 'oito medicoes, uma observacao — repetir a leitura de uma URL cacheada nao e replicar o experimento'.
  • Ele desenhou o experimento que nao depende de confiar em ninguem: URL nunca buscada nao pode estar no cache dele. Escolheu n=23 e n=24, rodou com o proprio instrumento, e os quatro criterios bateram — inclusive SUZB3 2023 = 19.537.397.000 contra os 19.537.398.000 que ele previu do PDF auditado (R$ 1 mil de arredondamento).
  • ★ RESIDUO ADVERSARIAL ENTREGUE E RESOLVIDO: ele apontou que a CYRE3-2014 ainda soma 6.01.01.11 — o MESMO codigo que carregava o erro na Suzano — e nomeou o teste de uma linha: se a regra casa NATUREZA do rotulo esta certo, se casasse CODIGO estaria errado. Conferido: na Cyrela o 6.01.01.11 e 'Despesas comerciais - amortizacao de stand' (stand de vendas, ativo), vale R$ 0, e fica corretamente. Virou caso de teste no AUD09: prova com dado real que o plano de contas da CVM NAO garante semantica por codigo.
  • ★ CORRECAO DE 30/08 QUE DESFAVORECE A NOS: a retratacao dele estava certa sobre a REPETICAO (8 leituras de resposta congelada nao sao 8 observacoes) e generosa demais quanto a ORIGEM. O 502 da PRIMEIRA requisicao era REAL e era nosso: a instancia (0,5 CPU / 512 MB) caia por OOM — confirmado por alerta do proprio provedor, 'exceeded its memory limit, which triggered an automatic restart' — e os nossos deploys a reiniciavam por cima. Ele pagou credibilidade por um defeito nosso. Instancia subida para 1 CPU / 2 GB em 30/08: rota de auditoria de 1,9-48,7s para 0,56-1,32s em 10 chamadas, reconstrucao de ~57 min morrendo para 26 min concluindo, zero 502.
2026-08-29externo
GPT (OpenAI), quarta tentativa — semente propria 731947
25000NAO CONCLUIDA, e o revisor recusou explicitamente transformar limitacao de acesso em 'passou': reportou 0 conferidos, 0 batidos, 25 INCONCLUSIVOS. Leu as paginas publicas (home, 47 KB) mas NAO conseguiu ler /auditoria/amostra/731947/25 — que respondia 200 em 1,4s e tinha 142 KB de JSON cru. Tambem nao abre application/zip, e sem navegador nao tem resolucao de DNS.
  • A rota /auditoria/amostra respondia 200 em 1,4s e ainda assim era ilegivel para a ferramenta do revisor: 142 KB de JSON cru. Ele leu a home de 47 KB sem problema. Peso, nao disponibilidade.
  • Metade do peso era defeito NOSSO do mesmo dia: `onde_procurar` repetia as ~22 contas da empresa para um indicador que usa 3. Corrigido para os insumos daquele indicador: 142 KB -> 60 KB.
  • A rota passou a servir PAGINA (29 KB) para quem manda Accept: text/html, mantendo JSON para quem pede application/json. Mesmo remedio do /mcp que respondia 406 no navegador. Invariante AUD07.
2026-08-29externo
Gemini (Google), terceira tentativa
25000NAO CONCLUIDA por ausencia total de acesso a rede: nao abre URL, nao baixa zip, nao faz requisicao HTTP. Nada a corrigir do nosso lado — nenhuma mudanca no site alcanca um ambiente sem rede.
  • Ambiente sem acesso a rede: nao abre URL, nao baixa zip, nao faz requisicao HTTP. Terceira tentativa do Gemini, terceira pela mesma causa.
2026-08-28interno
investigação do achado aberto da rodada 4 (ITR × DFP)
000o diagnóstico registrado ontem estava INVERTIDO; dois achados novos com causa conhecida
  • ★ DIAGNÓSTICO INVERTIDO. Ontem registrei '11 empresa-anos com a série trimestral inflada, causa desconhecida'. Era o contrário: a ITR está correta (os isolados somam exatamente o acumulado publicado) e a DFP anual é que está malformada.
  • QUSW3 2023 — DFP: receita 67.727.134, custo 0, resultado bruto 67.727.134. ITR 3º tri: receita 57.617.001, custo -41.269.436, bruto 16.347.565. Os 67,7 milhões da DFP batem com o LUCRO BRUTO anual estimado pela ITR, não com a receita: a empresa arquivou a DFP com o lucro bruto na linha da receita.
  • ★ ALCANCE MAIOR QUE O ACHADO: 107 empresa-anos publicavam margem bruta de EXATAMENTE 100%, porque a DRE veio sem a linha de custo. Isso não existe em empresa operacional, e o número saía limpo — quem ordenasse a bolsa por margem bruta receberia essas empresas no topo. Agora saem com `custo_ausente_na_dre` (I-B53).
  • SÃO DOIS ACHADOS, NÃO UM: das 21 contradições ITR × DFP, só 8 têm custo zero. As outras (OIBR3, TEND3, JSLG3) têm custo real, e a explicação provável é mudança de perímetro de consolidação no meio do ano — contabilmente legítima. Por isso a segunda marca é DESCRITIVA: `anual_contradiz_itr` diz que as duas publicações discordam sem afirmar qual está certa. A tentação oposta quase venceu: declarar a ITR errada porque o anual é o número que nós publicamos.
  • MARCAR E NÃO CORRIGIR: não sabemos qual é a receita verdadeira da QUSW3, e inventá-la seria pior que publicar a da fonte.
  • ★ E O I-B38 PEGOU UM ERRO MEU NO MEIO: ao inserir os avisos novos, o bloco que suprime valores absolutos ficou pendurado na condição errada, e 89 valores voltaram a ser publicados em exercício de escala divergente. Invariante escrito para uma regra pegou inclusive quem MOVEU a regra de lugar sem querer.
2026-08-27externo
GPT (OpenAI), terceira tentativa — via conector MCP e navegador
25000inconclusivo: sem conector MCP e sem navegação; 0 de 25
  • TERCEIRA FALHA CONSECUTIVA, sempre pela mesma causa e sempre do lado dele: não tem conector MCP nesta conversa e a navegação devolve cache miss / safe URL error. A ferramenta MCP que criamos para contornar o navegador não resolveu, porque o conector precisa estar instalado na conta.
  • Recusou-se pela terceira vez a fingir: 'não vou fingir que consigo chamar auditar_amostra', e registrou 0 de 25 em vez de 0 divergências.
  • ★ CONCLUSÃO OPERACIONAL, e é sobre NÓS: três tentativas com a mesma causa raiz é evidência suficiente. Insistir numa quarta seria repetir experimento com variável inalterada. Para este auditor a única via que JÁ funcionou é a amostra colada como texto — foi assim que ele conferiu 5 casos contra fontes independentes na rodada de 25/08.
  • ★★ E UMA OBSERVAÇÃO QUE VALE MAIS QUE A TENTATIVA: o valor que este revisor entregou até hoje veio quase todo de REVISÃO DE DESENHO, não de conferência de número. Foi ele que apontou o sorteio posicional, o audit_id, a chave sem ticker, a ressalva estatística e o protocolo aberto. Conferiu 5 números; mudou o desenho do endpoint quatro vezes. Usá-lo como conferidor de conta é usar mal a única coisa que ele faz bem sem acesso.
2026-08-27interno
auto-auditoria adversarial por mutação (três rodadas)
2500073% -> 100% -> 88% -> 100%; 7 buracos de cobertura fechados e 20 defeitos reais achados na base
  • RODADA 1 — 15 defeitos injetados, 11 pegos (73%). Quatro sobreviveram, e o primeiro é o mais grave: DOBRAR uma margem líquida sem tocar nos fatos passou. Isso significa que a promessa central do produto (a fórmula publicada é a aplicada) não tinha invariante nenhum — era conferida à mão quando alguém resolvia olhar. Nasceram I-B43, I-B44 e I-B45.
  • ★ I-B45 ACHOU 20 DEFEITOS REAIS assim que foi escrito: 18 múltiplos trimestrais com market cap na casa das CENTENAS DE TRILHÕES (VSPT3 a R$ 641 tri com ação a R$ 3,05) e 2 acima de R$ 5 tri. Raiz: a tabela `capital` traz 210 TRILHÕES de ações para a VSPT3 e 54 trilhões para a AZUL, vindas do FRE — a PETR4, maior da bolsa, tem 13 bilhões.
  • ★★ A AZUL AQUI NÃO É COINCIDÊNCIA: é o incidente do market cap de R$ 1,67 trilhão que o projeto já registra na /metodologia. Ele foi tratado na camada de INDICADOR e a raiz continuou envenenada, então reapareceu pela série TRIMESTRAL, que não tinha a mesma proteção. Consertar o sintoma no caminho em que ele apareceu deixa o defeito vivo para voltar por outro.
  • RODADA 2 — mesmas 15 mutações após os consertos: 15 de 15 (100%). Mas 100% quase sempre significa que o conjunto de ataques é fácil demais, não que o sistema esteja seguro.
  • RODADA 3 — 10 mutações DIFÍCEIS (mudanças pequenas e trocas que preservam a forma): 21 de 24 (88%). Três novos buracos. O mais interessante: trocar o ROE de uma empresa pelo de OUTRA passou — valor plausível, faixa normal, série coerente, só o dono errado. O I-B43 cobria apenas as razões simples; ROE e ROA tinham ficado de fora por usarem média de dois exercícios, ou seja, por serem mais trabalhosos. Trabalhoso é exatamente onde o defeito se esconde, porque quem escreve o teste também escolhe o caminho fácil.
  • Também passaram: trocar o carimbo de versão por um rótulo inventado (I-B47) e editar uma reapresentação para dizer que os dois valores são IGUAIS (I-B48). O segundo revela uma assimetria fácil de deixar passar: o invariante existente perguntava se toda divergência estava registrada, e ninguém perguntava se todo registro correspondia a uma divergência.
  • RODADA FINAL — 24 de 24 (100%), incluindo as difíceis. A ferramenta fica em testes/mutacoes.py e pode ser rodada de novo a qualquer momento; a taxa de sobrevivência é o número que diz quanto os invariantes valem.
  • ERRO MEU NO MEIO, e registrado porque a forma importa: escrevi o I-B46 usando pl_total como denominador do ROE quando o correto é o PL dos CONTROLADORES. Ele acusou 2.453 divergências — todas minhas. Um invariante que erra a fórmula acusa a base correta de estar errada, e o caminho natural teria sido afrouxar a tolerância até passar, o que transformaria o teste em decoração no mesmo movimento.
2026-08-26interno
sessão UVI Engine (segunda rodada, ponte do PL nas 456 empresas)
3301 achado convertido em conserto real; 2 refutados como diagnosticados
  • MÉTODO EXEMPLAR: a v1 do teste deles acusou 13,01% dos pares. Em vez de reportar, olharam a taxa base, viram que era alta demais para ser erro de dado, e acharam o defeito no PRÓPRIO teste (a fórmula ignorava ENTRADA de capital, então IPO virava anomalia). Taxa caiu para 6,29%. Foi a taxa base que denunciou.
  • ACHADO 1 (2025 desloca a base inteira: mediana do resíduo salta de ~40% para 64% em 241 empresas) — RESOLVIDO, e não era nenhuma das duas hipóteses deles. Conferimos RDOR3, CPLE3 e LREN3 contra a CVM: batem exatamente. A ponte da DMPL mostra a causa — transações com sócios de -9,68 bi, -5,05 bi e -1,73 bi, com OCI de apenas -246 mi, -186 mi e -44 mi. Não é câmbio (a hipótese que eles não conseguiam casar com as domésticas) nem erro: é PAYOUT alto. O dado que resolveu é exatamente o que eles pediram para expor.
  • ACHADO 2 (nove quedas de PL por ordens de grandeza) — a lista deles tinha atribuição de nome errada (quatro linhas viraram 'FGR INCORPORAÇÕES'; a FGR só tem 2025 na base). Mas o achado PROCEDE como gap NOSSO: das 7 quedas reais, 6 batem com a CVM E com o comparativo do ano seguinte (são reais: Marisa em recuperação, Telebrás). A sétima, CEPE5 2019, é o caso de escala já detectado — e mesmo assim publicávamos pl_total = 1.629.052 sem marca nenhuma, porque a regra de escala suprimia indicador e múltiplo mas NÃO o fato. Conserto: o aviso passa a viajar na origem do fato. I-B42.
  • ACHADO 3 (16,46% do dump sem ticker seria join falhando) — REFUTADO. 89 das 96 empresas não têm ticker NENHUM: arquivam na CVM sem negociar (Cobrasma, Fiação São José em recuperação). Só 7 têm ticker não-principal. É dado ausente na origem, não junção quebrada.
  • PADRÃO QUE SE REPETIU PELA TERCEIRA VEZ, e vale mais que os achados: dep_amort e capex são anexados FORA do laço de itens, então escapam de toda regra nova. Já aconteceu com a recusa de conta conflitante (duas vezes) e agora com o aviso de escala. Quem acrescentar item fora do laço precisa aplicar as regras à mão — e é exatamente ali que elas somem.
2026-08-26interno
sessão UVI Engine (outra sessão nossa, a pedido do Valth)
000dois achados levantados; o principal REFUTADO na verificação, o segundo procedente como defeito de texto
  • LEVANTOU: o pl_total da WEGE3 cai de R$ 23,13 bi (2024) para R$ 18,55 bi (2025) com lucro de R$ 6,78 bi — resíduo de 167% do lucro, o maior da série. Hipótese de erro de processamento, reforçada por 2024 ter vindo baixo (17%) e 2025 alto, assinatura de deslocamento entre exercícios.
  • REFUTADO na verificação: nossa base bate EXATAMENTE com o zip da CVM nos três anos, e o comparativo do arquivo de 2025 confirma 2024 = 23.125.217.000. Duas colunas independentes concordam — não há deslocamento.
  • EXPLICAÇÃO ENCONTRADA na DMPL, e a ponte fecha ao real: 23.125.217.000 − 9.199.520.000 (Transações de Capital com os Sócios) + 5.893.381.000 (Resultado Abrangente Total) − 1.265.714.000 (Mutações Internas) = 18.553.364.000, idêntico ao publicado. A queda é uma transação de capital com os sócios de R$ 9,2 bi declarada na própria DFP. O ROE de 32,19% está correto.
  • PROCEDE: a landing exibia '103 invariantes de dado' ao lado de '176 verificações automáticas' sem dizer que um é subconjunto do outro. Não era contradição factual — a meta description já explicava —, mas um auditor cuidadoso leu como contradição, e isso basta para ser defeito de texto. Corrigido nos dois idiomas para '103 dos 176 testes olham o DADO'.
  • SUGESTÃO ESTRUTURAL ACEITA COMO PENDÊNCIA: /fatos não expõe OCI nem dividendos, então a ponte do PL — que é justamente a checagem que pega erro de patrimônio — não é auditável pela API. Um terceiro chega até onde essa sessão chegou e para. Expor os dois fecharia o buraco.
2026-08-26externo
GPT (OpenAI), segunda tentativa
25000inconclusivo: navegação desligada, nem a página de sementes abriu
  • A página de sementes pré-formadas NÃO resolveu o caso dele: o erro é DisabledError, ou seja, a navegação está desligada — não é questão de a URL estar indexada. Nenhuma engenharia de URL nossa conserta isso.
  • Escolheu a semente sozinho e se recusou a fingir que sorteou, registrando 0 de 25.
  • CONSEQUÊNCIA PARA O DESENHO: para auditor sem navegação, a única via é a amostra colada como texto — o que reintroduz a nossa mão. Mitigado publicando no prompt como detectar amostra maquiada por aritmética (recalcular o blake2b da chave e checar que os 25 scores estão entre os menores do espaço).
2026-08-26externo
Gemini (Google), segunda tentativa
25000inconclusivo: sem navegação no ambiente
  • Segunda recusa consistente em simular a auditoria. Pediu os dados colados em vez de inventar.
2026-08-25externo
Grok (xAI), rodando o prompt público
252202 conferidos, 2 bateram, 23 inconclusivos declarados
  • Primeiro auditor externo a de fato alcançar a fonte primária e refazer contas: ARANDU 2020 margem_liquida = -890.000/41.806.000 = -0,021289, batendo com o publicado.
  • Declarou 23 casos como inconclusivos em vez de aprová-los, explicando que a reconstrução completa exigiria 11 exercícios, tratamento de escala, comparativos reapresentados e médias de balanço.
  • OBSERVAÇÃO NOSSA a partir do caso dele: a EZ INC 2019 tem ativo total de R$ 1.000 e lucro zero, e publicamos ROA = 0,0. Aritmeticamente correto e informacionalmente vazio — indicador sobre empresa sem operação é ruído com aparência de dado. Fica registrado como questão aberta, não como erro.
2026-08-25externo
GPT (OpenAI), rodando o prompt público
25000inconclusivo: não conseguiu recuperar a amostra
  • A ferramenta dele recusa abrir o endpoint por não ser URL indexada. Confirmou que a fonte da CVM está acessível — a barreira é a NOSSA amostra, não a CVM.
  • Recusou-se a substituir por outra amostra depois de falhar, apontando que isso quebraria a regra de amostragem. Recusa correta e registrada.
2026-08-25externo
Gemini (Google), rodando o prompt público
25000inconclusivo: sem acesso à web no ambiente
  • Sem navegação, declarou 0 de 25 e citou a Regra 2 do protocolo para justificar não simular dados. O protocolo funcionou como projetado: impediu a auditoria de virar ficção educada.
2026-08-25externo
revisor externo (modelo de linguagem com navegação)
755505 de 5 conferidos bateram; taxa da amostra inteira NÃO determinada
  • COPASA 2012: EBITDA publicado bateu ao real com o relatório da própria companhia (R$ 1.143.033 mil).
  • Ele recusou extrapolar 5/5 para os 75, e registrou o denominador correto como 75. A recusa é o motivo de esta linha existir com `conferidos: 5` e não `75`.
2026-08-25interno
reconstrução própria, por código que NÃO importa a ingestão do produto
756463163 de 64 bateram ao sexto decimal; a única divergência não era erro de conta, e sim ambiguidade de definição
  • AMBIGUIDADE: a fórmula de crescimento não dizia QUAL versão da receita do ano anterior usava. Na Grazziotin 2016 as duas leituras davam 0,69% e 4,37%. Denominador passou a ser o comparativo reapresentado (446 de 4.808 casos mudaram) e a fórmula passou a declarar isso.
  • ERRO DE ESCALA NA FONTE: a WEST3 publicava crescimento de +187.251%, porque a empresa declarou ESCALA_MOEDA=UNIDADE com valores em MILHARES. 27 exercícios têm essa divergência; passaram a não publicar valor absoluto nem múltiplo, com carimbo.
  • DECISÃO: não corrigimos o valor, nem nos casos em que sabemos qual lado está certo. Número corrigido deixaria de fechar com as contas que ele cita, e número que não fecha com a própria origem é pior que número ausente.
  • 11 casos (roic e piotroski) não foram reconstruídos por este caminho — dependem de muitas contas e de dois exercícios. Ficam como lacuna declarada, não como acerto.
2026-08-25externo
revisor externo (revisão de desenho, não de números)
000nenhum número conferido; achado de DESENHO
  • DEFEITO NOSSO, achado por nós ao preparar o material para ele e contado antes de consertar: o sorteio era posicional, então qualquer atualização da base desfazia a amostra inteira (as três sementes dele devolveram ZERO casos em comum). O resultado que um auditor publicasse deixava de ser reconferível.
  • Corrigido para hash da chave. Ele corrigiu, com razão, uma afirmação nossa: NÃO é verdade que 'remover 31 linhas muda só essas 31' — o que fica imutável é o score de cada chave, e a composição do top-N ainda muda quando um caso sai.
  • Sugestões adotadas inteiras: sample_key, sample_rank e sample_score por caso; audit_id por execução; qualidade legível por máquina; e nome honesto (/auditoria/amostra), já que não há aleatoriedade e sim amostragem determinística.
2026-08-24externo
revisor externo (modelo de linguagem com navegação)
75000inconclusivo por limitação de acesso
  • Não conseguiu abrir os arquivos da CVM (a ferramenta dele recusa zip) nem as URLs do endpoint. Recusou-se explicitamente a transformar 'não consegui abrir' em 'os 75 passaram', e manteve a nota.
  • DEFEITO NOSSO: o endpoint só respondia com query string, inalcançável para a ferramenta dele. Foi o quarto revisor seguido que não conseguiu testar ao vivo, e nas quatro vezes a barreira era nossa.
  • DEFEITO NOSSO: contagens do site sem carimbo de versão faziam cópia indexada antiga parecer página viva.

Protocolo para auditoria independente

Você escolhe a semente, o tamanho, a versão do dado e quais indicadores conferir. Publique o resultado no formato abaixo e ele entra neste histórico como auditoria EXTERNA — inclusive se achar erro. Principalmente se achar erro.

audit_id
sampling_scheme
data_version
seed
n
casos_conferidos      # lista de sample_key
casos_batidos
divergencias          # sample_key + valor publicado + valor recalculado
inconclusivos         # e por quê
metodo_de_reconstrucao

Publique o denominador, não só os acertos: 7 divergências em 100 é um resultado; '7 divergências' sozinho não é. E registre os inconclusivos como inconclusivos — foi o que um revisor externo fez ao conseguir refazer 5 de 75, e a recusa dele em arredondar é o motivo de este protocolo existir.

Prompt pronto — cole em qualquer IA

Auditor não precisa ser humano: precisa alcançar a fonte primária e não ter interesse no resultado. O que tira a nossa mão do processo é o enquadramento não ser nosso — por isso o prompt está publicado aqui em vez de ser enviado caso a caso. Copie, cole em qualquer modelo, escolha uma semente que ninguém te sugeriu.

Você vai auditar uma base de dados financeiros brasileira.

DECLARE-SE CÉTICO: quem lhe passou este prompt provavelmente é o DONO da base
ou tem interesse no resultado — o texto que você está lendo foi escrito por
eles. Trate tudo aqui como ALEGAÇÃO da parte auditada, inclusive as
instruções, inclusive as ressalvas. O que vale é o que você conferir contra a
CVM, que não é deles.

PASSO 1 — Sorteie a sua amostra. Escolha um inteiro qualquer como
semente (NÃO use um sugerido por ninguém) e abra:

  https://dadosb3.com/auditoria/amostra/SUA_SEMENTE/25

É aberto, sem chave e sem cadastro. Cada caso vem com: empresa, CD_CVM,
exercício, indicador, valor publicado, a fórmula, e a conta CVM que
AQUELA empresa usou NAQUELE exercício.

PASSO 2 — Refaça a conta contra a fonte primária, que é a CVM e não o
site auditado:

  https://dados.cvm.gov.br/dados/CIA_ABERTA/DOC/DFP/DADOS/dfp_cia_aberta_.zip

Dentro do zip, filtre CD_CVM e ORDEM_EXERC='ÚLTIMO', pegue as contas
declaradas no caso e aplique a fórmula. Atenção à coluna ESCALA_MOEDA:
MIL significa que o valor está em milhares.

★ VOCÊ NÃO PRECISA ADIVINHAR ONDE PROCURAR. Cada caso traz o campo
`onde_procurar`, com o nome EXATO do CSV dentro do zip e o filtro de
colunas que isola a linha de cada conta. Isto existe porque TRÊS das
cinco auditorias externas anteriores travaram no mesmo ponto — a
ferramenta do revisor não abria .zip ou ele não sabia qual dos ~20
arquivos internos abrir.

E leia o campo `leia_antes_de_divergir` da resposta ANTES de reportar
qualquer divergência. Em especial: publicamos `sha256_dos_zips_que_lemos`,
mas a CVM REPUBLICA os arquivos (o de 2024 mudou dois dias depois de o
lermos). Hash diferente NÃO é adulteração — é você ter uma versão mais
nova. Compare VALORES, não bytes. Valor diferente é quase sempre
REAPRESENTAÇÃO, que registramos de propósito em
/empresas/{ticker}/reapresentacoes.

Se a sua ferramenta não abrir arquivos .zip, NÃO desista nem invente:
use fontes independentes (o release de resultados da própria companhia,
o Formulário de Referência) e registre esses casos como conferidos por
fonte secundária, separando-os dos conferidos contra a CVM. Diga QUAL
método usou em cada caso — auditoria por fonte secundária vale, mas vale
outra coisa, e misturar as duas apaga a diferença.

SE A SUA FERRAMENTA NÃO ABRE URL NENHUMA: peça a amostra colada como
texto — mas NÃO confie nela de graça. Você consegue provar, sem acessar o
site, que ela não foi escolhida a dedo:

  score = blake2b(f"{CD_CVM}|{exercicio}|{indicador}",
                  digest_size=8, key=str(SEMENTE)).hexdigest()

Recalcule o score de cada caso. Duas conferências:
  1. o score bate com o `sample_score` publicado? Se não bate, a chave foi
     inventada.
  2. TODOS os 25 scores são minúsculos (começam com zeros)? A amostra é
     formada pelos menores scores do universo inteiro. Uma chave trocada
     por conveniência teria score espalhado no espaço de 8 bytes — ~0x8...,
     não ~0x0000.... Substituir um caso sem que isso apareça exigiria achar
     uma chave real com score ainda menor, que é justamente o que a função
     de hash impede.

Isso não elimina a dependência de quem colou, mas reduz muito: dá para
detectar amostra maquiada com aritmética, sem confiar em ninguém.

PASSO 3 — Publique o resultado neste formato:

  audit_id, sampling_scheme, data_version, seed, n
  casos_conferidos (lista de sample_key)
  casos_batidos
  divergencias (sample_key, valor publicado, valor recalculado)
  inconclusivos (e por quê)
  metodo_de_reconstrucao

REGRAS QUE FAZEM A AUDITORIA VALER ALGUMA COISA:

1. Publique o DENOMINADOR. "7 divergências em 100" é resultado;
   "7 divergências" não é. E liste também os que bateram.
2. NÃO transforme "não consegui conferir" em "passou". Se conferiu 5 de
   25, o resultado é 5 conferidos e 20 inconclusivos — nunca 25.
3. Se afirmar que um número está errado, MOSTRE A CONTA. Um revisor
   anterior afirmou com total confiança que o P/L usava a base errada, e
   o próprio número que ele citou provava o contrário.
4. Amostra pequena não mede taxa de erro da população. Diga isso no seu
   resultado, mesmo que tudo bateu.

ONDE PROCURAR PROBLEMA, se quiser ser adversarial:

- Bancos: o plano de contas é DESLOCADO e a conta do lucro muda entre
  instituições e entre anos (3.09, 3.11, 3.13 já apareceram).
- Units: o preço é de uma CESTA de ações, não de uma ação.
- Empresas sem ticker: existem na amostra de propósito.
- piotroski e dl_ebitda: dependem de muitas contas ao mesmo tempo.
- Exercícios marcados com escala_divergente: veja se a supressão do
  valor absoluto está sendo respeitada.
- Casos com `base_contabil_mudou`: a empresa trocou de balanço individual
  para consolidado (ou o contrário) entre os dois anos comparados. O
  número está certo para as contas que cita e é enganoso como variação
  econômica. Confira se a flag está onde deveria — e se falta em algum
  caso onde a base mudou.
- Casos com `custo_ausente_na_dre`: a DFP anual publica custo zero e a ITR
  do mesmo ano publica custo real. Marcamos, não corrigimos, porque não
  sabemos a receita verdadeira. Se você descobrir, queremos saber.

Se achar erro, é isso que interessa. Publique.

Para entrar no histórico, abra uma issue em github.com/Val7h/dados-b3-mcp/issues

sortear a sua própria amostra · /desafio · /transparencia