Dados B3 › Transparência
Transparência
Transparência — como você confere os números você mesmo
Versão do dado 2026-11-09-ancora-do-fre · página gerada em 2026-11-11 03:12 UTC. Se isto não bater com o /saude, você está lendo uma cópia em cache.
O que é conferido, antes de cada publicação — 1298 testes automáticos, coletados ao vivo
28 são invariantes de DADO (o número fecha?) e 131 são de produto — gate de acesso, navegação, idioma, conector de IA. Chamar os 1298 de 'invariantes' seria inflar: a divisão é conferível na própria lista. Não é uma seleção à mão dos melhores exemplos: cada teste abaixo foi achado agora, introspectando os arquivos de teste de verdade, do mesmo jeito que pytest --collect-only acharia. Agrupados pelo que protegem, não pelo arquivo onde moram.
Nível 1 — Integridade: o dado fecha? (25)
V01— V01 · O texto é número + faixa numérica + comparação; nenhum adjetivo de julgamento entra, e o modo 'adjetivo' da configuração está DESLIGADO.V02— V02 · Uma frase, ≤ 35 palavras, sempre igual para a mesma entrada.V03— V03 · Lucro negativo, EBITDA negativo, caixa líquido, banco, empresa nova sem histórico, dado defasado — cada um com o texto certo, nunca um número inventado.V04— V04 · Verde sem nada; amarelo com ressalva em número central, reapresentação relevante recente ou balanço velho; vermelho quando o retrato pode enganar (reapresentação grande do próprio ano; a CVM já tem balanço mais novo).V05— V05 · Os nomes do arquivo de configuração existem de fato: cada marca listada nasce em precos.V06— V06 · Rodando para TODAS as companhias que negociam: nenhum termo proibido em texto algum; toda frase ≤ 35 palavras; a bandeira não é uniforme (se 90%+ fossem da mesma cor, não informaria nada); e o mesmo papel dá o mesmo veredito duas vezes.V07— V07 · O corte "abaixo da Selic" do ROIC liga e desliga pelo arquivo de configuração: desligado, vale a faixa fixa; ligado e com a Selic média do exercício, a faixa diz abaixo/acima com o ano e a taxa; ligado e sem a Selic do ano, volta à faixa fixa (nunca inventa a taxa).V08— V08 · Cada corte do arquivo de configuração tem o lado declarado: o limite inferior da faixa pertence a ela (5% é "entre 5% e 15%"); ROIC zero com a Selic ligada é "abaixo", não "negativo"; a própria história entra com 3 anos e não com 2; reapresentação conta dentro dos últimos 3 exercícios, a partir de 5% exatos, e só com diferença conhecida; vermelho exige MAIS de 10% no próprio ano (10% exatos não) e amarelo por idade exige MAIS de 15 meses; sem data de hoje, a idade não entra.V09— V09 · A frase de topo só é encurtada quando PASSA do limite de palavras, e o corte tira exatamente o trecho "; setor X" (depois, o motivo do vermelho) — nada além; dívida líquida zero é "dívida 0,0x", não caixa líquido; margem zero com ressalva não vira "prejuízo"; número com RESSALVA não é narrado como "não se aplica" (nem "EBITDA negativo").V10— V10 · O texto da bandeira diz a data do recebimento e quantos dos números centrais saíram publicados com o valor exato — e o motivo da reapresentação cita o corte como está no arquivo ("5%", não "5,0%").V11— V11 · O veredito sai nas duas línguas: frase do topo, as seis linhas, as perguntas, a bandeira (texto e motivos) e a nota têm versão inglesa com os MESMOS números em formato inglês (ponto decimal), sem palavra portuguesa; toda faixa, marca "não se aplica", nota e faixa da Selic da configuração tem tradução; "não se aplica" de banco e ressalva também; nenhum termo proibido em inglês.V12— V12 · A frase de topo diz de que dia é o preço do P/L ("com o preço de 25/02/2026, quando o balanço saiu"), traz o P/L com o último fechamento ("com o fechamento de 22/10/2026") e a mediana do setor, em português e inglês, com até 35 palavras.V13— V13 · O P/L com o último fechamento é o múltiplo guardado × fechamento atual ÷ preço do balanço × o fator de ações dos eventos conferidos entre as duas datas (desdobramento 2 para 1 dobra as ações, o preço cai à metade, o P/L fica igual).I-V01— `fatos_as_of` devolve, para cada período, a MAIOR versão cujo dt_receb é <= as_of, com `versao` e `dt_receb` em cada linha: 01/04 devolve a v1 (lucro 100), 01/05 devolve a v2 (lucro 80), e o dia exato do recebimento já vale a versão que chegou nele (<=, não <).I-V02— Se a versão vigente em `as_of` existiu mas seus valores não foram guardados (a CVM só publica a mais recente), o período vem em `periodos` com `valores: "nao_arquivados"` e SEM linhas — nunca com os números da versão seguinte, que é o vazamento do futuro que o as_of existe para evitar.I-V03— `trimestral=True` aplica a mesma regra por (ano, trimestre): a ITR do 1T/2023 com v1 em 10/05 e v2 em 20/06; as_of antes da v2 devolve a v1 arquivada, depois dela a v2, e a linha leva `trimestre`.I-V05— Num CSV mínimo no formato da CVM com duas versões do mesmo documento: a v2 vence em `conta` e em `documento`; a v1 vai para `conta_versao` SÓ nas contas-chave (a conta que não alimenta item nenhum não é guardada); `documento_versao` guarda as duas versões com o ID_DOC e a data de cada uma; reingerir a v2 não arquiva de novo, e uma v1 que chega depois da v2 não sobrescreve nem arquiva.I-V07— `conta_chave` aceita toda conta que `padronizar` lê (as fixas das duas tabelas de itens, o caixa das operações pelo método direto, as filhas da 3.02, D&A e capex da DFC, o PL e o lucro de banco pelo rótulo) e recusa o que nenhum item usa — é o que decide o que vai ao banco, e conta esquecida aqui some do passado em silêncio.I-V08— O build que nasce do zero não perde as versões: (1) o que o banco ANTERIOR ainda guarda numa versão menor que a daqui vai para `conta_versao` (`capturar_do_banco_anterior`, só ordem U e só conta-chave, DFP e ITR); (2) o que o anterior já tinha em `conta_versao` vem junto na herança (`herdar_series_externas`); (3) sem banco anterior, ou com um que não tem as tabelas, devolve 0 sem levantar; (4) `conta_versao` está entre as contagens vigiadas do encolhimento.I-V10— A versão antiga lida do XML do RAD entra em `conta_versao` na MESMA convenção das linhas da versão atual: só o exercício corrente (ordem U), consolidado/individual, escala aplicada, os dois formatos de número ("19.245.764" e "1552654" / "5741398,00"), DFC pelo método, DMPL só no PL total do exercício corrente, ITR só no trimestre isolado, conta-modelo (zero sem descrição) fora, `INSERT OR IGNORE` sem sobrescrever, e o que não bate vai para uma contagem por motivo em vez de quebrar.I-V11— A versão antiga lida do `InfoFinaDFin.I-V12— O caixa operacional de 2017 da WEGE3 (conta 6.01): 1,290 bi publicado na DFP 2017 (28/02/2018) e 1,107 bi republicado como comparativo na DFP 2018 v2 (10/04/2019).I-V13— O comparativo NÃO substitui o original quando: o rótulo da conta mudou (quebra de série), o lado republicado veio zerado ("sem valor no arquivo"), a razão é de ~mil (escala), só existe em outra agregação, ou o próprio exercício foi REENTREGUE depois do comparativo (a versão mais nova do documento próprio vence).I-V14— GET /empresas/{t}/fatos?as_of=: expõe `valor_origem`/`publico_em`/`documento_fonte` e o total `itens_republicados`; sem `as_of` o fato é o ORIGINAL (o que sustenta indicadores, múltiplos e a página), sem campo novo.I-V15— Três republicações reais da tabela `reapresentacao` (PETR4, BBDC4 — plano de banco — e VALE3): o dia anterior ao recebimento da DFP seguinte devolve o original, o dia do recebimento devolve o republicado, nos dois tipos de plano de contas.
Nível 2 — Semântica: a conta significa o que o cálculo supõe? (3)
I-V04— Os itens montados a partir de `conta_versao` são os MESMOS que `padronizar` grava quando recebe as mesmas contas: empresa comum (conta exata, custo pela soma das filhas, sinal do custo, D&A e capex só de folhas e sem custo de dívida, ponte do PL) e banco (PL e lucro pelo rótulo).I-V06— `listar_versoes`: cada documento com todas as versões, a data, o link do original e o que há de valores por versão (na_base / arquivados / nao_arquivados); entre duas versões com valores guardados, só as contas que MUDARAM (antes → depois), o lucro de 100 para 80 e a conta que não mudou fora; `so_reenviados` esconde o documento de uma versão só.I-V09— GET /empresas/{t}/fatos: sem `as_of` devolve a última versão, exatamente como antes (sem `versao` nas linhas); com `as_of` devolve a vigente com `versao`/`dt_receb`; `as_of` inválido (formato errado, 30 de fevereiro, vazio) é 422 e não consulta o banco; ticker desconhecido é 404. GET /empresas/{t}/versoes lista o documento com as duas versões e `reenviados=true` filtra.
Nível 3 — Econômico: o resultado é possível no mundo real? (0)
Outros testes do produto (0)
Gate comercial, navegação e o conector MCP — testam se o produto funciona, não se um número está certo, então não entram nos 3 níveis acima por natureza. Contados e listados do mesmo jeito:
Reconstrua você mesmo — margem líquida de 5 empresas, 4 setores
Não pedimos que você confie nos números. Eis a margem líquida de cinco empresas de quatro setores diferentes, cada uma reconstruída direto do balanço anual (DFP) na CVM — lucro líquido ÷ receita, batendo exatamente com o valor publicado. Para QUALQUER indicador, de qualquer empresa, a cadeia inteira até a linha do arquivo da CVM está em /linhagem:
| Empresa · setor | Lucro líq. (conta CVM) | Receita (conta CVM) | Margem =÷ |
|---|---|---|---|
| WEGE3 · indústria | R$ 6,78 bi DRE:3.11 | R$ 40,80 bi DRE:3.01 | 16,6% |
| VALE3 · mineração | R$ 11,81 bi DRE:3.11 | R$ 213,59 bi DRE:3.01 | 5,5% |
| PETR4 · petróleo | R$ 110,61 bi DRE:3.11 | R$ 497,55 bi DRE:3.01 | 22,2% |
| ITUB4 · banco | R$ 45,85 bi DRE:3.09 | R$ 387,12 bi DRE:3.01 | 11,8% |
| BBAS3 · banco | R$ 16,78 bi DRE:3.11 | R$ 319,46 bi DRE:3.01 | 5,3% |
Baixe a DFP de qualquer uma delas na CVM, pegue as contas de lucro e receita, divida — você chega no mesmo número. Bancos usam a receita de intermediação (o que faz sentido pra um banco), então a reconciliação é ciente do setor; os demais usam a receita de vendas. Valores do último exercício.
Por que às vezes divergimos de outro site (e não é erro)
Uma diferença entre dois sites geralmente não é um estar errado — é uma escolha de método. A nossa está aberta:
- Capital médio vs final: ROE e ROIC usam patrimônio/capital médio (ano atual + anterior ÷ 2), não o saldo final — então não são uma divisão ingênua de um ano só.
- Controladora vs consolidado: dizemos qual cada item usa.
- TTM vs anual: múltiplos trimestrais usam lucro dos últimos 12 meses.
- IFRS 16, goodwill, caixa, imposto excepcional: cada um tratado explicitamente e sinalizado quando distorce.
Os testes mordem? Sim — casos reais que a bateria já pegou
Um teste que nunca falha pode significar dado perfeito — ou teste fraco. Estes nasceram de erros reais que passaram, e hoje reprovam — só aparece o que existe de verdade na bateria coletada acima:
- I-B16 · o P/L = 0 dos bancos: a CVM reporta o nº de ações ora em unidades, ora em milhares (varia por empresa e por ano); o market cap saía 1000× menor e o P/L dava zero. O I-B16 (preço × ações recomputado) pegou — corrigimos 661 múltiplos anuais e 2.027 trimestrais.
- I-B24 · o lucro que sumia: a conta de lucro/PL varia por banco (Itaú 3.09, BB 3.11); se a busca por rótulo falha, o número some em silêncio e o ROE nasce errado. I-B24 faz esse buraco reprovar.
- H-B23 · o dividend yield de 800%: provento antigo na B3 vem com preço não ajustado por desdobramento; sem o H-B23 o yield sairia absurdo como se fosse real. A flag mantém o registro e avisa.
- I-B20 · o furo do COTAHIST 2023: no 1º deploy, o download de um ano de preços falhou em silêncio; a API subiu com ~50 mil preços a menos e a bateria passou, porque nenhum teste olhava cobertura. Criamos o I-B20 — ano sem preço agora reprova o build alto.
- I-B33 · Petróleo e Gás em −89,6% numa semana: o COTAHIST não é ajustado por desdobramento; um split 10:1 lia como −90% de retorno semanal e ficava no acumulado para sempre, sem nada reprovar (um filtro cego de amplitude nem resolveu — só trocou o erro de sinal). I-B33 (nenhuma semana de setor além de ±35%, a régua é a própria bolsa) faz o build parar.
- I-B31 · 364 de 865 semanas do índice setorial congeladas: ao estender a série até 2010, setor sem nenhuma empresa com market cap naquela semana virava fator 1,0 — uma linha reta que o retorno acumulado lia como 'mercado parado', e o retorno 'desde 2010' saía ficcional (+527%). I-B31 reprova qualquer semana repetida ao centavo.
- I-E05 · o P/L de 2010 da EMBRAER com preço de 2025: a busca de preço ponto-no-tempo caía para a frente sem teto quando o ticker atual não tinha preço na época do balanço (troca de código, mudança de classe); o múltiplo saía calculado com um preço 15 anos no futuro, em 22% das linhas anuais e trimestrais, em silêncio. A janela de 45 dias (e o I-E05) barra isso: sem pregão dentro do prazo, o múltiplo não é calculado.
- I-E04 · a AZUL com R$ 1,67 quadrilhão de valor de mercado: o balanço trazia 54,7 trilhões de ações da recuperação judicial, mas o preço usado já estava na base pós-grupamento de 1:150.000 — duas pontas em bases diferentes, market cap errado por ordens de grandeza. I-E04 (valor de mercado nunca maior que o PIB do Brasil) faz esse absurdo reprovar o build.
Até onde vai cada bloco de dado
Aqui não tem asterisco: esta é a cobertura ano a ano, contada agora. Indicadores (ROE, ROIC, margens, crescimento) saem só das demonstrações e cobrem a série inteira. Múltiplos (P/L, P/VP, EV/EBITDA) exigem preço e número de ações — e o nº de ações vem do Formulário de Referência, que quanto mais antigo menos companhia entregou em formato aproveitável. A diferença entre as duas colunas é limite da fonte, não buraco de ingestão. Se você procurar um P/L antigo e não achar, é porque ninguém tem — não porque escondemos. Os mesmos números em JSON: /cobertura.
| Ano | Empresas com indicadores | Empresas com múltiplos |
|---|---|---|
| 2025 | 441 | 290 |
| 2024 | 443 | 296 |
| 2023 | 441 | 298 |
| 2022 | 428 | 295 |
| 2021 | 422 | 296 |
| 2020 | 410 | 274 |
| 2019 | 371 | 166 |
| 2018 | 326 | 167 |
| 2017 | 317 | 165 |
| 2016 | 311 | 154 |
| 2015 | 303 | 144 |
| 2014 | 301 | 140 |
| 2013 | 292 | 131 |
| 2012 | 291 | 112 |
| 2011 | 284 | 98 |
| 2010 | 277 | 34 |
Cobertura ao vivo
457 empresas · 884,375 pontos de preço · 8,650 reapresentações registradas · última atualização 2026-11-11 01:04:24. Contagens completas ao vivo em /saude.
Fontes: CVM (dados abertos, ODbL) e B3 (COTAHIST). Não afiliado à B3 nem à CVM. Não é recomendação de investimento.
Os números desta página são ao vivo. Versão do dado 2026-11-09-ancora-do-fre · página gerada em 2026-11-11 03:12 UTC. Se isto não bater com o /saude, você está lendo uma cópia em cache.