Dados B3 PT

Audit history

Every audit run against this base, who ran it, and what it found. The errors stay here — that is the point.

18audits
13checked by outsiders
67checked by us
79matched
1diverged
70findings on record

Whoever hides errors does not publish a table of errors. And an audit we ran ourselves is worth less than an outsider's, which is why the two are shown apart rather than added together.

Observed agreement rate: 79/80 (99%)

This is NOT a statistical estimate of the base's error rate. It means only that no divergence was found in these specific cases. A sample this size does not support a claim about the whole population, and most of these checks were run by us, which is worth less than an outsider's. The caveat sits next to the number on purpose: alone in a footer nobody reads it, and the page starts producing the very impression of certainty it exists to fight.

Findings are kept verbatim in the language they were recorded in — mostly Portuguese. Translating an audit record would make it our words instead of the auditor's, and that difference is the whole point of keeping this table.

DateRun bySampleCheckedMatchedDivergedOutcome
2026-08-30external
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-29external
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-29external
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-29external
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-28internal
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-27external
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-27internal
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-26internal
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-26internal
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-26external
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-26external
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-25external
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-25external
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-25external
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-25external
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-25internal
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-25external
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-24external
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.

Protocol for independent audits

You choose the seed, the size, the data version and which indicators to check. Publish the result in the format below and it enters this history as an EXTERNAL audit — including if you find errors. Especially if you find errors.

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

Publish the denominator, not just the matches: 7 divergences out of 100 is a result; '7 divergences' alone is not. And record the inconclusive ones as inconclusive — that is what an external reviewer did when they could redo 5 of 75, and their refusal to round up is why this protocol exists.

Ready-made prompt — paste into any AI

An auditor need not be human: it needs to reach the primary source and have no stake in the outcome. What removes our hand is the framing not being ours — which is why this prompt is published here rather than sent case by case. Copy it, paste it into any model, and pick a seed nobody suggested to you.

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.

To enter this history, open an issue at github.com/Val7h/dados-b3-mcp/issues

draw your own sample · /desafio · /transparencia