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
22 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? (18)
DL14— DL14 · No MCP, `eventos` de BIDI4 (sem chave) responde sem `erro`, com `saiu_da_bolsa` igual ao da REST, e o painel conta como uso.DL01— DL01 · `ler_linha` aceita só ação (CODBDI 02), à vista (010), de classe 3-8 ou 11, e lê as MESMAS fatias de `precos.DL02— DL02 · O emissor sai do ISIN (BR + 4 caracteres) e só quando o ISIN é de ação (ACN) ou unit (CDA); ETF, fundo e BDR não têm emissor — não entram na ligação nem na lista de lacunas.DL06— DL06 · Rodar de novo dá o mesmo resultado (apaga e refaz): sem pregão duplicado, sem papel que sobrou de uma ligação que deixou de existir.DL07— DL07 · `empresas.DL09— DL09 · Caso GOL (02/11/2026): a ação preferencial negociou como GOLL54, ISIN fora do padrão "ACN", até 2026. Código que a PRÓPRIA companhia declarou no FCA entra mesmo fora do formato, se a especificação da linha do COTAHIST for de ação (PN); o retrato passa a ter o último pregão dele.DL10— DL10 · /empresas/AESB3/dividendos (e ENBR3, que pagou provento por anos; e CCXC3) NUNCA responde 200 com lista vazia.DL11— DL11 · Código que a base não tem continua 404, com `detail` no texto de sempre ("ticker desconhecido: X", de que o painel depende) e, AO LADO, campos que a IA lê sem interpretar frase: `codigo_pedido`, `sugestoes` (lista de {codigo, nome}: mesma raiz ou grafia parecida, só códigos que a base conhece) e `como_tentar_de_novo`.DL12— DL12 · Preço e indicadores de quem saiu NÃO passam a responder (a série das delistadas é do /dump, e nada de ranking/múltiplo muda): /empresas/AESB3/precos e /indicadores seguem 404. Mas o erro diz o que é: o texto traz "saiu da bolsa" e a data do último pregão, e o campo `saiu_da_bolsa` vem preenchido, com o caminho para as rotas que respondem.DL13— DL13 · /empresas/BIDI4/eventos responde 200 com o bloco `saiu_da_bolsa` mesmo SEM chave (é o dado público da /saiu-da-bolsa), `eventos` e `total` NULOS (o catálogo da B3 não é consultado para quem saiu; lista vazia e zero leriam "não houve evento") e os eventos declarados ao FRE: sem chave, a lista fica fechada (None) mas o total aparece com o motivo; com chave Pro, a lista vem, todos com a flag sem_data_ex, e bate com `evento_delistada`.DL15— DL15 · `_so_delistada` só liga código que NÃO é de nenhuma ativa (ação, FII, ETF, BDR, índice): PETR4 e WEGE3 dão None; AESB3 dá a companhia que saiu; e se um código de `delistada_papel` passar a existir entre as ativas (uma reabertura, um código reaproveitado), a ativa ganha e a rota volta ao caminho normal.DL20— DL20 · O item 3.5 do FRE entra em `provento_delistada` só da companhia que saiu (ALFA), ligada pelo CNPJ ao mesmo cd_cvm de `delistada_papel`: exercício, classe (ON, PNA), tipo (DIVIDENDO, JCP), MONTANTE em R$ e data de pagamento como declarados; valor por ação e data-com ficam NULOS (o FRE não os tem).DL21— DL21 · /empresas/{T}/dividendos (a função que a REST e o MCP chamam) de quem saiu E tem provento declarado à CVM responde com o bloco `saiu_da_bolsa`, os proventos (fonte, montante, data de pagamento), `resumo_anual` só da classe do ticker (ON) e `cobertura` com a fonte e o período (exercícios 2014 a 2015 do FRE); o DY é nulo.DL22— DL22 · O "Relatório Proventos" do IPE (desde 2024) da companhia que saiu entra com valor POR AÇÃO, data-com e data de pagamento — só a linha cujo ISIN é de um emissor ligado a ela em `delistada_papel` (ALFA); a de outro emissor (ZZZZ) não entra.DL30— DL30 · /saiu-da-bolsa/{ENBR3, BIDI4, AESB3} responde 200 em PT e EN com: a frase do topo (nome, código, data do último pregão igual à de `delistada_papel`, o total declarado à CVM e o número de pagamentos, dito como MONTANTE TOTAL e não valor por ação), a tabela por exercício da classe do ticker IGUAL ao `resumo_anual` do JSON /empresas/{T}/dividendos (mesmos anos, mesmo total, mesma contagem), o código CVM, o "Como citar" com a versão do dado e a URL da própria página, os links para o JSON e para a /saiu-da-bolsa, um bloco JSON-LD com a trilha, e a citação do JSON apontando a página.DL31— DL31 · Na /saiu-da-bolsa (PT e EN) cada código de quem saiu é link para /saiu-da-bolsa/{T} (ENBR3, BIDI4 e AESB3 entre eles) e todo link desses responde 200; código de quem continua no universo vai para /acoes/{T}, também 200. O sitemap traz UMA URL por papel do mapa de quem saiu (nenhuma a mais, nenhuma a menos) e o llms.DL32— DL32 · A página de ENBR3, BIDI4 e AESB3 em inglês tem os MESMOS números, âncoras, links internos e linhas de tabela do português (a régua do I-N105, `_paridade`); o texto da CVM (nome, motivo) vai marcado `lang="pt"`.DL33— DL33 · No banco sintético: a página da ALFA3 (provento no FRE) traz a tabela com os totais do `resumo_anual` do JSON (2014: 1.250.000,00 em 2 pagamentos; 2015: 700.000,00 em 1) e o outro código da companhia (OLDA3) com link para a página dele; a da BETA3 (nenhum provento declarado) responde 200 SEM tabela de proventos e diz que a ausência é DESCONHECIDA, com link para /eventos e não para /dividendos (que é 404 para ela); a GAMA3 (ativa) é 404. ★ POR QUE (03/11/2026): sem provento na fonte a página não pode ler como "não pagou".
Nível 2 — Semântica: a conta significa o que o cálculo supõe? (4)
DL03— DL03 · Código declarado liga o emissor à companhia; se o MESMO emissor é reivindicado por duas companhias (os códigos declarados de uma e de outra têm o mesmo emissor), nenhuma fica com ele — preço da companhia errada é pior que preço ausente.DL04— DL04 · Do começo ao fim, em arquivos sintéticos: a delistada recebe o código que declarou (ALFA3) E o antigo de mesmo emissor (OLDA3, que o FCA nunca listou); os preços vão até o último pregão de cada papel; a ativa (GAMA) e as outras classes dela ficam de fora; o ETF e o papel sem dono não viram preço — o sem-dono vira LACUNA.DL05— DL05 · Os desdobramentos/grupamentos do FRE entram só das delistadas, UMA vez por evento (o reenvio do mesmo evento em outra versão não duplica), com a razão declarada e a flag `sem_data_ex`: o FRE traz a data de APROVAÇÃO, não a data-ex — então o evento não serve para ajustar preço.DL08— DL08 · A leitura das páginas conta das tabelas: companhias e papéis ligados, pregões, eventos, provento ZERO (sem fonte para quem saiu) e a lacuna por volume.
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.