Dados B3 › Transparência
Transparência
Transparência — como você confere os números você mesmo
Versão do dado 2026-11-03-ponte-b3-codigo-de-fundo · página gerada em 2026-11-07 01:13 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 — 1238 testes automáticos, coletados ao vivo
26 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 1238 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? (26)
RC01— RC01 · /fiis/screener: o piso de cotistas inclui quem está NO piso (5.000 entra, 4.999 não; cotistas nulo conta como zero); P/VP e DY com flag não são número filtrável (o fundo aparece sem eles e não passa filtro nenhum daquele campo); cada limite (pvp_min/max, dy_min/max) inclui o valor igual; segmento casa sem caixa; a ordem é por P/VP crescente com quem não tem P/VP limpo no fim; `limite` corta a lista mas não o `n`, com padrão 50 e teto 200; parâmetro desconhecido, ou valor não numérico, é 400; parâmetro vazio é como ausente; banco de outra versão é 503 com Retry-After.RC02— RC02 · /scores: o Piotroski usa o exercício mais recente contra o ANTERIOR (ano − 1), com as ações dos dois anos, e declara `de: 9`; banco não tem Piotroski e o tipo sai como gravado; Graham usa o múltiplo mais recente com P/L e P/VP, só com os dois positivos, e P/L × P/VP = 22,5 ainda é aprovado; os arredondamentos são 2 casas (P/L, P/VP) e 1 (produto).RC03— RC03 · /dividendos: `proventos` traz todas as classes; o resumo anual e o DY de 12 meses só a classe do ticker (ALFA3 → ON), somados com 6 casas; provento sem data-com não entra no resumo; o provento do 1º dia dentro da janela de 12 meses entra no DY (o de exatamente um ano atrás não: somaria o mesmo mês duas vezes — janela_12m, 03/11/2026); DY só existe com preço e com soma positiva; sem linha de cobertura, a situação é "nao_verificado" com zero proventos; a nota diz a classe.RC04— RC04 · /empresas/{T}: pedido por um código secundário responde com o PRINCIPAL; nome, CNPJ, cd_cvm, setor e tipo saem cada um da sua coluna; a cobertura é o primeiro e o último ano de indicador e a contagem de reapresentações; companhia sem código na tabela de tickers lista o principal; cada recurso diz `exige_chave` = falso só para a degustação.RC05— RC05 · /indicadores: banco e seguradora recebem a nota do plano de intermediação e o aviso de plano de contas, e nunca o alerta de minoritários; companhia geral recebe o alerta só quando o lucro dos controladores difere do total em MAIS de 1% no último exercício consolidado, com a diferença relativa de 6 casas.RC06— RC06 · /screener: `_min` e `_max` incluem o valor igual; número com flag não passa; a ordem é pelo PRIMEIRO filtro, decrescente (com um filtro só também); o padrão de `limite` é 100 e corta a lista, não o total; `as_of` de hoje vale (só o futuro é 400); valor não numérico e parâmetro desconhecido são 400; o recibo que estoura o limite diário diz o limite.RC07— RC07 · O feed JSON de reapresentações devolve 100 por padrão, no mínimo 1 e no máximo 500; sem chave e sem pedir JSON, é a página, no idioma pedido.RC08— RC08 · /dump/{conjunto}.RC09— RC09 · /etfs/{T}/diario devolve a série inteira sem `desde` e a partir dele com `desde` (inclusivo), com o fechamento e o ágio do mesmo dia; ETF desconhecido é 404; banco de outra versão é 503 com Retry-After.RC10— RC10 · /etfs/{T}/carteira: sem `competencia`, a mais recente; o PL é o da maior posição e o peso é valor ÷ PL (nulo para posição sem valor); as competências disponíveis saem como AAAA-MM, da mais nova para a mais velha; com `competencia`, aquela; ETF desconhecido 404; banco de outra versão 503. ATAQUE: peso com a conta trocada; PL de outra linha; mês com o dia junto.RC11— RC11 · /empresas/{T}/indicadores/{nome}: para um MÚLTIPLO, a série vem dos múltiplos (com a data do preço); para um indicador, dos indicadores; o valor "atual" que se compara ao universo é o mais recente SEM flag — um ponto mais novo com flag fica fora.RC12— RC12 · /empresas/{T}/linhagem de indicador que a companhia não publicou naquele ano é 404 (não outro código), com o ano na mensagem.RC13— RC13 · `/empresas/{T}/eventos` traz TODOS os eventos (cisões inclusive), do mais recente ao mais antigo, com a FONTE (`b3_declarado` ou `inferido_capital_e_preco`) e a SITUAÇÃO (o que o preço disse) em campos separados, o fator como a B3 o declarou, a data de aprovação, e o efeito líquido do dia: os dois eventos de 02/07/2025 do TIMS3 (0,01× e 100×) valem 1,0 juntos.RC14— RC14 · A tabela de eventos da página da empresa diz DE ONDE vem cada evento só quando NÃO é a B3 ("achado por nós"), mostra o efeito líquido do dia quando há mais de um evento nele e escreve a situação por extenso (não "não conferido" para tudo).RC15— RC15 · O conjunto `eventos` do dump traz uma linha por evento, com ticker, fator declarado, data de aprovação, efeito líquido do dia (`mult_grupo`), situação da conferência e a fonte (`b3_declarado` / `inferido_capital_e_preco`), cisões inclusive; está no índice /dump.RC16— RC16 · `/empresas/{T}/precos` devolve a série DIÁRIA completa (abertura, máxima, mínima, fechamento, médio, volume, quantidade, negócios) do mais antigo ao mais recente; `de`/`ate` recortam (inclusive nas pontas); `limite` corta a partir do mais antigo e avisa; os eventos societários DENTRO do período vêm junto (os de fora, não), com o efeito líquido do dia; e a resposta diz que o preço NÃO é ajustado.RC17— RC17 · `formato=csv` devolve o CSV com cabeçalho e as mesmas linhas do JSON (e avisa por cabeçalho se cortou); data fora de AAAA-MM-DD, `de` depois de `ate` e formato desconhecido dão 400 com a causa; ticker inexistente, 404. ATAQUE: aceitar data torta e devolver tudo; CSV sem cabeçalho; CSV com as linhas em outra ordem que o JSON.RC18— RC18 · `/empresas/{T}/desempenho` devolve retorno, drawdown e volatilidade do comprar-e-manter e do cruzamento de médias, em poucos números, com o preço AJUSTADO pelos eventos (o desdobramento não vira queda de 40%) e as premissas escritas na resposta.RC19— RC19 · O `llms.RC20— RC20 · A página `/acoes/{T}` traz, colada na rentabilidade, a tabela comprar-e-manter × cruzamento 21×100 com os MESMOS números da rota `/empresas/{T}/desempenho` e o link para ela (PT e EN); sem pregões suficientes a tabela some (a página nunca cai); o `llms.RC21— RC21 · `/etfs/{T}/desempenho` e `/fiis/{T}/desempenho` devolvem retorno, drawdown e volatilidade de comprar-e-manter e do cruzamento 21×100, SEM chave, com as premissas DE FUNDO (rendimentos fora da conta; sem ajuste de desdobramento).RC22— RC22 · O bloco de desempenho nas páginas de fundo: tabela comprar-e-manter × cruzamento, link da rota aberta, "SEM os rendimentos" e, com salto diário suspeito, o aviso "não confiável"; sem resultado, o bloco some; o `llms.RC23— RC23 · O desempenho passa a trazer `retorno_total_pct` (e anualizado e drawdown total): o provento compra mais papéis ao fechamento do DATA-EX (primeiro pregão depois da data-com); no cruzamento só recebe quem está comprado no data-ex; os campos de preço não mudam; sem provento registrado, a resposta segue só de preço (premissa "NÃO incluídos"); FII conta RENDIMENTO e deixa a AMORTIZAÇÃO de fora; as premissas e a nota dizem qual é qual.RC24— RC24 · `retorno_total_liquido_pct` (e anualizado e queda máxima líquida) desconta 15% de imposto retido só do JCP; dividendo e rendimento de FII entram inteiros; o retorno total BRUTO e o de preço não mudam; sem JCP, o líquido é igual ao bruto e a página não mostra a coluna extra; com JCP, a coluna aparece com o rótulo do imposto; a premissa e a página dizem que o bruto é bruto.RC25— RC25 · Provento pago em DUAS parcelas de mesmo valor e mesma data-com (PETR4: JCP de R$ 0,35048636 com data-com 01/06/2026, pago em 20/08 e em 21/09) fica em duas linhas: a lista da B3 repete o registro e cada repetição é uma parcela; a ficha casa cada parcela pela ordem da data de pagamento.RC26— RC26 · Banco da semana anterior (a reconstrução REAPROVEITA o banco) com a chave velha de `dividendo`, sem a parcela: ao abrir, a tabela é refeita com a parcela na chave, todas as linhas ficam, o índice volta, e a partir daí duas parcelas iguais convivem.
Nível 2 — Semântica: a conta significa o que o cálculo supõe? (0)
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 | 440 | 290 |
| 2024 | 444 | 296 |
| 2023 | 442 | 298 |
| 2022 | 429 | 295 |
| 2021 | 423 | 296 |
| 2020 | 411 | 274 |
| 2019 | 372 | 166 |
| 2018 | 327 | 167 |
| 2017 | 318 | 165 |
| 2016 | 312 | 154 |
| 2015 | 304 | 144 |
| 2014 | 302 | 140 |
| 2013 | 293 | 131 |
| 2012 | 291 | 112 |
| 2011 | 284 | 98 |
| 2010 | 277 | 34 |
Cobertura ao vivo
456 empresas · 883,569 pontos de preço · 8,670 reapresentações registradas · última atualização 2026-11-06 01:27:27. 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-03-ponte-b3-codigo-de-fundo · página gerada em 2026-11-07 01:13 UTC. Se isto não bater com o /saude, você está lendo uma cópia em cache.