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
30 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? (30)
MCP10— MCP10 · A lista de ferramentas no `llms.MCP11— MCP11 · A ferramenta `screener` do conector aceita `as_of`, igual à API.MCP12— MCP12 · A série diária e os eventos societários existem como ferramenta do conector: WEGE3 abre sem chave, papel fechado devolve `erro` + `como_resolver` (que diz que a chave vai NO ARGUMENTO, não em cabeçalho, e que o REST usa X-API-Key), com chave abre, e data torta volta como `erro` em vez de estourar.MCP13— MCP13 · `?chave=` nas rotas de leitura abre o papel fechado (a IA que só navega por URL não envia cabeçalho); o parâmetro some da query antes da rota (rotas com parâmetro estrito não dão 400); a resposta sai `private, no-store` + `no-referrer` + `noindex`; chave errada continua 401 COM a dica do `?chave=`; o cabeçalho tem precedência; /portal, /dump e /admin NÃO aceitam a chave na URL.MCP14— MCP14 · A ferramenta `desempenho` devolve os números prontos para QUALQUER ticker, com ou sem chave (degustação aberta), `erro` (não exceção) para ticker inexistente e parâmetro inválido, e as premissas na resposta.MCP15— MCP15 · `/precos` de papel fechado SEM chave devolve 200 com os últimos 30 pregões (em ordem, o último igual ao último da série completa), `amostra: true` e um `aviso` NO CORPO que diz como ter a série inteira e onde está a resposta pronta (`/desempenho`); `formato=csv` sem chave também vem em JSON (para o aviso aparecer); com chave válida vem a série inteira sem aviso; a WEGE3 (aberta) segue completa; ticker inexistente segue 404. ★ POR QUE (04/10/2026).MCP16— MCP16 · A ferramenta `indice` devolve o desempenho do IBOV sem chave, a série DIÁRIA em colunas (amostra de 30 pregões sem chave, inteira com chave), a lista quando `codigo` vem vazio e `erro` (não exceção) para índice que não existe.MCP17— MCP17 · A ferramenta `bdr` lista os BDRs sem chave (com filtro de tipo), devolve o AAPL34 sem chave e diz o que NÃO tem, cobra chave dos demais (erro, não exceção), traz a série diária em colunas (amostra de 30 pregões sem chave, inteira com chave) e responde `erro` para BDR que não existe ou tipo inválido.MCP18— MCP18 · A ferramenta `dividendos` responde para QUALQUER ticker sem chave (decisão do dono, 17/10/2026: no teste cego, o Claude com o conector ligado recebeu "chave ausente", desistiu e citou outro site — o mesmo dado é público em /acoes/TICKER/dividendos), a rota REST abriu igual (23/10/2026), e ticker inexistente vira `erro`, não exceção.MCP19— MCP19 · Toda ferramenta do conector declara `title` não vazio e as anotações `readOnlyHint` true e `destructiveHint` false: o diretório de conectores da Anthropic recusa ferramenta sem isso, e o Dados B3 só LÊ dados públicos.MCP20— MCP20 · O servidor MCP do diretório do ChatGPT (`/mcp/chatgpt/`) só expõe dado já aberto: nenhuma ferramenta tem argumento de credencial, nenhuma descrição e nenhuma resposta (cada ferramenta chamada com argumento válido, em modo comercial, sem chave) fala em chave, plano, Pro, assinatura, upgrade ou preço; toda resposta de sucesso traz `source_url` em https://dadosb3.com/ e a fonte; ticker inexistente e parâmetro inválido voltam como erro de ferramenta (`isError: true`); toda ferramenta tem `title` e as anotações de somente leitura; e o `/mcp/` do Claude segue com as mesmas 32 ferramentas, intocado.MCP21— MCP21 · O conector do ChatGPT diz ao modelo, nas instruções do servidor e no aviso de CADA resposta, que o dado é medida do passado e nunca vira recomendação de comprar, vender ou manter — a decisão é do usuário.MCP22— MCP22 · No conector do ChatGPT, `get_dividends` devolve só os proventos da CLASSE do ticker pedido e o total por ano por ação já pronto, igual à soma da lista.MCP23— MCP23 · As respostas JSON-RPC do /mcp/ e do /mcp/chatgpt/ NÃO levam `X-Robots-Tag` (o MCP é caminho de máquina e fica fora da regra central de noindex dos dados), enquanto um JSON de dado qualquer (/saude) leva.MCP24— MCP24 · O conector do Claude tem a ferramenta `listas`, com `title` e `readOnlyHint`, ABERTA (nenhum argumento obrigatório, `chave_api` opcional).MCP25— MCP25 · `etf` e `fii` ganharam `serie=True`: devolvem a série DIÁRIA em colunas (data, abertura, maxima, minima, fechamento, volume, negocios, quantidade; no ETF com evento confirmado, também `fechamento_ajustado`), a MESMA da rota `/etfs/{T}/precos` e `/fiis/{T}/precos`: mesmas linhas, mesmo número de pregões e fechamentos iguais a um SELECT próprio (BOVA11 e MXRF11 abertos, inteiros, sem chave); `de`/`ate` recortam; ticker desconhecido volta `erro`, não exceção.MCP26— MCP26 · Os dois servidores MCP (`/mcp/` do Claude e `/mcp/chatgpt/` do ChatGPT) respondem 200 ao cliente do protocolo NOVO (cabeçalho `MCP-Protocol-Version: 2026-07-28`) e continuam respondendo aos ANTIGOS (2025-06-18, 2025-11-25 e sem cabeçalho).MCP27— MCP27 · Achados do teste cego de 02/11/2026: (1) a IA calculou "R$ 1.000 em ITUB4 há 12 meses" com outra janela e deu número diferente da página; `quanto_rendeu` devolve EXATAMENTE o texto da página (/quanto-rendeu/{T}.MCP28— MCP28 · Achados do teste cego de 02/11/2026 (P7 e P9): o conector não tinha bancos nem quem saiu da bolsa.MCP29— MCP29 · `/mcp` e `/mcp/` (e `/mcp/chatgpt` e `/mcp/chatgpt/`) respondem 200 DIRETO ao POST JSON-RPC e ao GET de navegador, sem 307/301 e sem `Location`, e o endereço divulgado (llms.MCP30— MCP30 · No `/mcp/`, o 400 fica reservado ao pedido realmente inválido e vem SEMPRE com um erro JSON-RPC estruturado (`error.MCP31— MCP31 · As 15 ferramentas que entraram no `/mcp/chatgpt/` em 03/11/2026 (app 1.0.3) e as 13 de antes declaram as cinco anotações (title igual ao do topo, readOnlyHint true, destructiveHint false, idempotentHint true, openWorldHint false); as novas respondem em modo comercial SEM chave, para um ticker que não é o da degustação, com o MESMO dado da ferramenta equivalente do `/mcp/` (nenhuma conta paralela).MCP32— MCP32 · Cada 4xx dos dois servidores MCP (`/mcp/` e `/mcp/chatgpt/`) chega ao painel com o MOTIVO, uma palavra de lista fechada lida do corpo que o SDK escreveu (`accept`, `content_type`, `json_invalido`, `jsonrpc_invalido`, `versao_nao_suportada`, `cabecalho_divergente`.MCP33— MCP33 · As ferramentas do conector aceitam a data como o assistente costuma escrever: "2024" (de = 01/01, ate = 31/12), "2024-06", "06/2024", "01/06/2024", "2024/06/01", "20240601" e "2024-06-01T00:00:00Z", e respondem IGUAL à mesma chamada com AAAA-MM-DD.MCP34— MCP34 · Em `tools/list` do `/mcp/` (Claude) e do `/mcp/chatgpt/`, TODA propriedade de TODO `inputSchema` tem `description` não vazia e com mais de uma palavra; os nomes das ferramentas e dos argumentos não mudaram de número (36 e 28 ferramentas) e o servidor do ChatGPT segue com as cinco anotações (`title`, `readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`).MCP35— MCP35 · A página /conector (PT e EN) mostra o endereço de Claude e clientes MCP (`/mcp/`, com barra) e o dedicado ao ChatGPT (`/mcp/chatgpt/`), cada um com o número de ferramentas que o `tools/list` devolve de verdade (não uma constante na página); traz a linha do plugin do Claude Code, o link do repositório no GitHub (sem `?de=`) e a lista com TODOS os nomes de ferramenta do `/mcp/`, não só as da tabela.MCP36— MCP36 · Pelo HTTP de verdade, nos dois servidores: o rótulo do cliente sai do clientInfo do envelope 2026 (Cursor), do User-Agent no protocolo antigo sem clientInfo (Claude-User, openai-mcp) ou vira 'outro'; a classe e o ticker saem da base (PETR4.SA -> acao/PETR4, MXRF11 -> fii); código inexistente vira 'outro'.MCP37— MCP37 · Resposta de sucesso do `/mcp/` ganha SÓ a chave `metadados` (versao_dos_dados = DATA_VERSION, fonte_url, metodologia_url, observacoes quando o código foi normalizado) e o dado é o mesmo da rota REST.MCP38— MCP38 · O texto pronto para a próxima versão do app do ChatGPT (dados_b3/mcp_chatgpt_proxima_versao.MCP39— MCP36 · No `tools/list` do `/mcp/`, TODA ferramenta tem a descrição em seis blocos, na ordem (frase, "Use quando:" com 2 ou 3 perguntas entre aspas, "NÃO use para:" com a ferramenta irmã, "Fonte e fórmula:", "Retorna:", "Vazio ou erro:") mais "Acesso:"; cada par de PARES_IRMAOS se cita nas DUAS direções no bloco "NÃO use para"; toda ferramenta citada ali existe; nenhuma descrição passa de 1.800 caracteres e as instruções do servidor de 2.048, com a regra "em vez de busca na web", as palavras do catálogo (B3, FII, dividendos, CVM, ações brasileiras, ETF, deslistadas) e só nomes de ferramenta que existem; o código do ativo se chama `ticker` em toda ferramenta (exceção declarada: `indice.
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 (9)
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:
MCP01— MCP01 · O conector anuncia EXATAMENTE as 24 ferramentas esperadas — nem uma a menos (quebra cliente) nem uma a mais (some do catálogo).MCP02— MCP02 · Pelo conector, a degustação vale igual: WEGE3 responde com ROIC sem chave nenhuma.MCP03— MCP03 · Papel fechado não devolve erro cru para a IA: devolve erro COM o caminho de resolver, porque quem lê a resposta é um agente que precisa saber o que dizer ao usuário.MCP04— MCP04 · A chave passada como argumento da ferramenta abre o papel fechado — é assim que um cliente de IA autentica, sem cabeçalho HTTP.MCP05— MCP05 · A metodologia é gratuita também pelo conector: a IA consegue explicar COMO a conta é feita sem que ninguém pague por isso.MCP06— MXRF11 é a degustação da vertical de FIIs: abre sem chave, como a WEGE3 nas ações.MCP07— MCP07 · O conector responde a cliente que manda Origin de terceiro.MCP08— MCP08 · Abrir /mcp/ no navegador devolve página útil, não 406. TRÊS revisores externos seguidos não conseguiram testar o conector, e a causa era esta.MCP09— MCP09 · A ferramenta de auditoria manda conferir na FONTE, não em nós.
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.