Dados B3 › Transparência
Transparência
Transparência — como você confere os números você mesmo
Versão do dado 2026-09-27-reapresentacao-agreg · página gerada em 2026-09-27 03:37 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 — 466 testes automáticos, coletados ao vivo
346 são invariantes de DADO (o número fecha?) e 120 são de produto — gate de acesso, navegação, idioma, conector de IA. Chamar os 466 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? (298)
I-X05— Toda cotação é positiva e dentro de faixa possível.I-X06— Nenhum salto diário acima de 15%.I-X07— O retorno em US$ tem de ser o retorno em R$ menos a variação do câmbio — a identidade que o próprio cálculo afirma.I-X10— O `n` de cada defasagem é EXATAMENTE o tamanho da sobreposição entre o fluxo e o retorno deslocado — nem um par a mais.I-X11— Nenhum `n` pode passar do comprimento da série mais curta.I-X12— A permutação preserva o tamanho de cada grupo E embaralha blocos que são contíguos NO TEMPO.I-X13— Ataca o I-X12 com três implementações defeituosas e exige que ele reprove duas e aprove uma.I-X14— Uma janela do SGS que falha é tentada de novo antes de virar buraco, e cada falha deixa o MOTIVO no log.I-B34— `situacao` só pode ser um dos quatro valores declarados.I-B35— Empresa marcada `com_proventos` tem proventos de verdade, e empresa marcada `sem_proventos` não tem nenhum.I-P16— Toda composição gravada respeita o erro máximo e a amostra mínima que a própria função declara exigir.I-P17— CONTRAPROVA a partir do ARQUIVO CRU da B3: recomputa `a×ON + b×PN` contra o preço da unit, sem passar pela função que inferiu nem pela tabela `preco`.I-P18— Empresa cujo principal é unit COM composição conhecida não pode mais carregar a flag de não-ajustado, e o P/VP tem de cair na mesma faixa plausível das outras empresas.I-B57— ordem 'U' é a publicação ORIGINAL e 'P' é a republicação.I-B58— Em /reapresentacoes, "antes" é `valor_ultimo` (o original).I-E06— O ticker que sai no /dump é o mesmo que `ticker WHERE principal=1` diria — nunca `empresa.I-E07— O conjunto `datas_suspeitas` do /dump é EXATAMENTE o que `eventos.I-E08— A CONTRAPROVA do achado inteiro: BBDC3, ITSA3, FLRY3 e ALUP11 não têm NENHUMA data suspeita — e portanto um consumidor que excluir empresa por empresa (em vez de data por data) as excluiria SEM MOTIVO.I-B01— Ativo total == Passivo total (conta 2 já inclui o PL).I-B02— Resultado bruto == Receita + Custo (custo vem negativo).I-B02b— LAIR + IR == Resultado das operações continuadas (3.09).I-B03— NOPAT = EBIT × (1 − aliq) com aliq em [0, 45%], e ROIC só é publicado com capital médio positivo.I-B04— O universo do banco é EXATAMENTE o que a regra declarada produz agora — recomputado por caminho independente do que o ingest gravou.I-B04b— As 20 empresas resolvidas à mão mantêm o ticker no banco — enriquecimento não pode se perder numa reingestão em escala.I-B27— ROA = lucro líquido / ativo médio, e o ativo total é sempre positivo (I-B05 já garante 0 <= ativo < 1e14).I-B06— Furo no MEIO da série de uma empresa é defeito de carga — dado que devia estar lá sumiu.I-B09— Margem bruta recalculada direto do CRU (sem passar pelo fato) bate com o indicador publicado.I-B26— F-Score de Piotroski é soma de 9 binários: só pode ser inteiro de 0 a 9. Fora disso, algum critério vazou um valor não-booleano.I-B28— Liquidez corrente recalculada direto do CRU (conta 1.01 do BPA / 2.01 do BPP, sem passar pelo fato) bate com o indicador publicado.I-B30— Toda empresa com fato tem macro-setor, e o setor está no domínio dos 10. Se um SETOR_ATIV novo do cadastro não casar nenhuma regra, a empresa fica sem setor e este teste reprova — em vez de cair num balde errado em silêncio.I-B21— Provento é entrada de caixa: valor > 0 sempre.I-B22— tipo no domínio fechado e data_com em ISO AAAA-MM-DD — é o que os endpoints e o cálculo de dividend yield assumem.I-E01— `mult_qtd` é recomputável do campo CRU da B3 pela regra declarada, e `mult_grupo` é o produto dos eventos do mesmo dia/ISIN.I-E02— Todo evento marcado `conferido=1` realmente passa no teste contra o preço do COTAHIST — o carimbo não pode ser mais generoso que a regra que ele diz aplicar.I-E03— Evento conferido não carrega flag de reprovação, e evento reprovado não é conferido.I-F01— INVARIANTE do produto: o VP por cota reportado no informe (Valor_Patrimonial_Cotas) é igual a PL ÷ cotas do MESMO informe.I-F03— Contraprova: P/VP recomputado aqui (preço ÷ vp_cota), fora do código de fiis.I-F04— O cruzamento ISIN (COTAHIST↔informe) resolveu ticker para uma massa razoável de fundos, e a maioria tem P/VP.I-X01— `líquido = ingresso − saída` em TODOS os meses.I-X04— Competência é sempre 'AAAA-MM'.I-L01— Quando a origem de um fato é composta ("DFC_MI:6.02.01+ 6.02.02"), a soma das linhas apontadas é o valor do fato.I-L02— Toda conta citada em `fato.I-L05— Contraprova de ponta a ponta: para uma amostra de empresas conhecidas, a linhagem entrega indicador → insumo → linha da conta → documento com data de publicação → arquivo da CVM, e o valor da linha bate com o do fato.I-B19— O lucro TTM gravado bate com o TTM recomputado AQUI, direto das tabelas fato/fato_trimestral, sem passar pelo código de precos.I-B20— Todo ano de 2010 até o ano corrente tem preços no banco.I-B29— FCF yield = (CFO + capex) / market_cap, recomputado direto do fato (CFO 6.01 + capex 6.02, sem passar por precos.I-P01— Nenhum código de negociação está ligado a mais de uma empresa.I-P03— Na janela em que o código velho e o novo coexistem, a empresa tem UM preço por dia — o do principal.I-B13— Mesmo invariante do I-B01 (ativo = passivo), na granularidade trimestral.I-B10— Números conferidos à mão, um a um, contra o calculado.I-P21— Preço 2+ anos após o exercício sempre carrega flag.I-P22— Reintroduzido o defeito, a marca TEM de aparecer.I-P06— mínima ≤ abertura, fechamento ≤ máxima, em TODA linha.I-P08— Numa data em que a empresa negociou sob DOIS códigos, os cinco preços vêm todos do código vencedor — não um de cada.I-P09— Preços de referência, conferidos em valor ABSOLUTO.I-P10— VOLTOT ≈ QUATOT × PREMED — a âncora que CRUZA fatias.I-P11— Volume, quantidade e negócios conferidos em valor ABSOLUTO.I-P13— Nenhum principal tem MUITO menos volume que um irmão de OUTRA classe que ainda negocia.I-B55— Nenhuma companhia não-ativa da CVM está no nosso universo.I-B56— A contagem de canceladas desde 2010 é maior que zero.I-B36— O rastro publicado aponta para conta que EXISTE naquela empresa.I-B59— O último pregão do banco tem de ser recente.I-B60— O /saude diz até quando vai a série, não só quantos preços tem.I-B61— Patrimônio que despenca ~1000x e volta é MARCADO, e o ROE junto.I-B62— Patrimônio a caminho do negativo NÃO é marcado como escala.I-B63— A série trimestral publica só o que a ITR publica: 1T, 2T e 3T.I-B63b— `roe_ttm` é lucro de 12 meses sobre o PL MÉDIO dos controladores da MESMA janela — o mesmo trimestre do ano anterior, nunca o trimestre imediatamente anterior.I-B64— A decisão de reconstruir o banco sai do DISCO, não da memória do processo: uma semana já reconstruída com sucesso não é reconstruída de novo, e fora da janela de madrugada só se retoma o que ficou pela metade naquela mesma semana.I-B64b— `_estado_persistido_do_build` lê a tabela `meta` de verdade e devolve semana ISO — e um banco sem os registros não faz o laço quebrar, devolve o lado seguro (reconstruir).I-B65— Indicador que uma classe de companhia NUNCA tem é declarado como "não se aplica" — não sai como traço, que se lê como "não temos".I-B66— A atualização noturna procura EXATAMENTE os dias úteis que faltam: depois do último pregão do banco, até hoje — e hoje só depois da hora em que a B3 publica o arquivo.I-B66b— A rodada noturna ingere o arquivo diário numa CÓPIA, confere, e só então troca o banco no ar.I-B66c— A chave de cache do buscador, do /hoje e da página de ticker muda quando o ARQUIVO do banco muda — não só quando a versão da pipeline muda.I-B66d— Trocar o banco em produção exige o WAL do alvo consolidado e vazio.I-B67— A ficha da companhia (descrição, segmento, sede, escriturador, auditor, controle) sai do Formulário Cadastral MAIS RECENTE de cada companhia; o segmento de listagem é o do ticker PRINCIPAL; o endereço é o da sede; o escriturador é o em atuação.I-B68— A atualização noturna, além do preço, pergunta à B3 pelos proventos de ação e pelos rendimentos de FII, e à CVM pelos avisos de proventos (a data-com futura), na mesma cópia e antes do DY ser recalculado — e registra quantos entraram.I-B69— O boot aplica a migração de COLUNA, não só o CREATE TABLE.I-B70— Com a tabela de ETF já preenchida, o boot ACRESCENTA as linhas que faltam no derivado e não toca nas que existem.I-B71— `dados_b3.leitura` é a interface interna estável (Bloco 0): só lê, recebe a conexão de fora, não importa página nem estilo — e o que devolve BATE com o que a página de empresa mostra.I-B72— Reconstruir a base do zero PRESERVA o retrato das companhias que saíram da bolsa — na tabela e no derivado reexportado.I-B73— A meta Selic (SGS 432) entra como vigências contínuas: um dia que falte quebra a vigência em vez de esticar a meta anterior por cima; a média do exercício só sai com o ano inteiro coberto; uma janela da fonte que falha não grava nada; o derivado versionado nunca é reescrito com menos dias do que já cobre; o boot o carrega numa base vazia; e a base cobre todo exercício fechado com indicador.I-B74— A página de empresa lê a série de indicadores, os múltiplos, a série trimestral, as reapresentações e os proventos pela camada de leitura (1ª fatia da migração, 26/09/2026) — e o que ela recebe é IGUAL à leitura direta do banco, valor e flag, para 20 companhias de tipos diferentes (banco, seguradora, exercício fora de dezembro, múltiplo suprimido).I-B75— A reapresentação registrada é a da agregação que o fato publica naquele exercício (con, ou ind quando a companhia não consolida), com a agregação NA CHAVE — nunca mais o individual por cima do consolidado.I-F09— Quando a ingestão recebe um informe com versão MAIOR que a gravada, cada campo publicado que mudou fica registrado com antes, depois, as duas versões e as duas entregas — antes de o upsert sobrescrever.I-F10— Num build do zero o banco novo nasce vazio: o "antes" está no banco ANTERIOR.I-F11— O registro vai para `derivado/fii_reapresentacao.I-H09— Os brutos NÃO caem dentro de `_build/`, que é apagado a cada build.I-H10— O build declara TMPDIR e SQLITE_TMPDIR fora do /tmp.I-H11— Banco sem as tabelas derivadas as ganha no BOOT, não no rebuild.I-H12— Falha ao carregar derivado vira aviso, nunca exceção no boot.I-P19— O código da B3 é 4 posições + classe, não 4 LETRAS + classe.I-P20— O código que representa a empresa sai de ARQUIVO, não de endpoint.I-P24— Quando o arquivo da CVM traz o bloco consolidado inteiro com zero (TIM S.I-P25— Para toda empresa cujo principal é unit com cesta conhecida, o valor de mercado publicado é (preço ÷ cesta) × ações — recomputado aqui das tabelas, sem passar pela função que o gravou — nos múltiplos anuais E nos trimestrais, com ou sem a correção de escala de milhares.I-P26— Nenhum múltiplo PUBLICADO tem contagem de ações 3x maior ou menor que a do ano imediatamente anterior com preço sem um evento societário que explique — e a regra tem os casos: salto sem evento (pega), 2x (passa), já ajustado por evento (passa), evento registrado (passa), ano seguinte à abertura de capital (passa), escala em milhares (passa, é da outra trava).I-Q01— Ágio/deságio = fechamento ÷ cota − 1 SÓ no dia em que os dois existem.I-Q02— O documento do dia D traz o mês até D.I-Q03— As contas de resultado do COFI acumulam no exercício.I-Q04— Um ETF existe para o site quando (a) a CVM o registra como classe FIIM, (b) a B3 o lista com sigla e devolve o CNPJ no detalhe e (c) o ticker negociou no COTAHIST.I-Q05— A página do ETF de degustação (BOVA11) e o hub /etfs abrem em HTML sem chave e sem script, com a moldura do site, âncoras só para seção que existe, o ágio do MESMO dia e a taxa dita como EFETIVA; o JSON pela mesma URL só com chave ou Accept explícito; ticker inexistente é 404. O hub diz o número de ETFs e ele bate com a tabela.I-Q06— Duas fontes, um número: as COTAS EM CIRCULAÇÃO do balancete (FNET, plano COFI) vezes a cota do último dia do mês (informe diário) têm de bater com o PL daquele dia no informe, dentro de 1%.I-Q17— Quando um ranking de ETF não tem ninguém, a página DIZ por que, com a data em que a série começa — não some da tela.I-Q22— Cada rodada do backfill pula os documentos do FNET cujo id já está no banco.I-B37— O denominador do crescimento é o comparativo REAPRESENTADO.I-B38— Exercício com escala divergente não publica valor ABSOLUTO.I-B39— Nenhuma flag de exceção vale para 100% de uma classe de empresa.I-B40— PL_final = PL_inicial + sócios + abrangente + internas.I-B41— Conta com valores contraditórios no arquivo não é publicada.I-B42— O aviso de escala viaja no FATO, não só no indicador.I-B43— O indicador publicado bate com os fatos que o geraram.I-B44— Flag que a REGRA exige tem de estar lá — some, o teste grita.I-B45— Preço e market cap fora do possível não são publicados.I-B46— ROE e ROA batem com os fatos — não só as razões simples.I-B47— A versão gravada no banco é a versão do código que o gerou.I-B48— Linha de reapresentação que não diverge não é reapresentação.I-B49— Não existe caminho alternativo para dentro do lote de fatos.I-B50— O P/L trimestral é market cap dividido por lucro TTM.I-B51— JCP continua sendo metade do provento brasileiro.I-B52— A soma dos trimestres não pode contradizer o exercício.I-B53— DRE sem a linha de custo não publica margem limpa.I-B54— Quando as duas publicações da empresa discordam, o dado avisa.I-N100— Quando há reenvio capturado, a página mostra competência, campo (com o nosso rótulo), antes, depois, diferença e as versões; quando não há, diz com todas as letras que a CVM publica só a versão vigente e que não há número de antes — nunca tabela vazia calada.I-N101— Em /comparar/A/B cada indicador sai do dado da comparação no formato da casa (percentual ×100 com uma casa, múltiplo com duas e "x", F-Score "/9"), FCF yield em %, o ano do múltiplo é um só quando coincide e "A × B" quando não; a ficha traz nome e setor; conta que não existe para banco diz de quem é; o JSON-LD lista as duas nas posições 1 e 2. ★ POR QUE (27/09/2026): 23 de 38 pontos da comparação sobreviveram à mutação — a página renderizava qualquer número.I-N102— /vigia/{T}: para companhia ou fundo, os eventos do papel — os MESMOS do vigia, filtrados pelo ticker —, com filtro por tipo, o formulário de acompanhar (só companhia) e links para a página do papel, o vigia geral e o JSON; papel sem evento é noindex,follow; desconhecido é 404; fora do sitemap.I-N103— No banco real, a companhia que só publica o individual e tem reapresentação com um lado zerado no arquivo da CVM: a página de reapresentações diz "individual — companhia não consolida" em cada linha e "sem valor no arquivo" onde o lado veio zerado, nunca "R$ 0"; o JSON da mesma URL (Accept) e o de /empresas/{T}/reapresentacoes trazem a agregação e o lado sem valor, linha a linha igual à tabela; a página da companhia também não escreve 0,0 no lugar do lado zerado.I-N20— Página que usa a moldura de FATO está em PAGINAS_DE_FATO.I-N21— Todo caminho de PAGINAS_DE_FATO responde 200. O par do I-N20. Sem ele a lista pode acumular caminho de página removida, e o painel passaria a publicar uma linha eternamente zerada — um zero que não significa "ninguém acessou", significa "isso não existe mais".I-N22— `/acoes/TICKER` responde 200 SEM chave, e está no sitemap.I-N23— O índice de `/acoes` e o sitemap cobrem as mesmas companhias.I-N24— Número suprimido aparece com o motivo, não em branco.I-N25— `/fiis/TICKER` responde 200 em HTML SEM chave, e está no sitemap.I-N26— O índice do hub `/fiis` e o sitemap cobrem os mesmos fundos.I-N27— P/VP com ressalva aparece com a ressalva, não limpo.I-N28— Sem chave, `/fiis/TICKER` devolve a PÁGINA com qualquer Accept.I-N29— A página e o JSON da amostra trazem os mesmos casos.I-N30— Sitemap e `noindex` são ordens opostas; nada pode ter as duas.I-N31— A tabela do buscador sai montada do servidor, sem JavaScript.I-N32— Cada filtro corta mais, e dá para tirar UM sem perder os outros.I-N33— Quem não tem o número vai para o FIM, nas duas direções.I-N34— Cada empresa aponta para as outras do setor; cada fundo, para os outros do segmento.I-N35— O JSON-LD (schema.I-N36— O /sobre nomeia quem faz o site, em PT e em EN.I-N37— `/hoje` abre com qualquer Accept, está no sitemap e na lista do painel, e diz a janela e até onde cada dado vai.I-N38— O total de cada seção da `/hoje` é o total do banco na mesma janela; seção vazia diz que está vazia.I-N39— `/hoje` devolve JSON só a quem pede `application/json` EXPLICITAMENTE, e continua devolvendo a PÁGINA para todo o resto — e os números do JSON são os mesmos do banco.I-N40— `/metodologia` devolve JSON a quem pede, com o título de cada página, e continua servindo a página para todo o resto.I-N41— A página de uma companhia traz a série trimestral, cada número igual ao do banco, sem 4º trimestre, nas duas línguas.I-N42— `/o-que-erramos` sai dos docstrings dos invariantes, não de uma lista à mão — e todo defeito datado do código aparece nela.I-N43— A moldura de toda página bilíngue está em inglês, e onde o CONTEÚDO fica em português a página declara isso — não deixa o leitor de inglês bater num muro de texto sem explicação.I-N44— A busca acha por código, por nome (com ou sem acento) e por CNPJ; código exato leva DIRETO ao ativo; termo vazio não devolve a base.I-N45— `/comparar/A/B` compara o ano em que AS DUAS têm o número, declara o que não existe para aquele tipo de companhia, e não diz qual é a melhor.I-N46— A página da empresa traz gráficos em SVG gerados no servidor — sem script — um por indicador que se aplica; ano sem valor é buraco na linha, ponto com ressalva é vazado, e o último valor do cartão é o do banco.I-N47— A página da empresa e a do FII mostram o fechamento NOSSO (data e preço do COTAHIST, o que a API serve) ao lado do widget do TradingView — com o crédito obrigatório, dizendo que aquele número não entra na API.I-N48— A home abre com a conta aberta de uma companhia real — o ROIC refeito a partir das linhas cruas, cada linha com a conta da CVM de origem — e o resultado mostrado é o MESMO que a base publica.I-N49— A página da empresa abre com o que a companhia faz e onde está (ficha do FCA, com a fonte declarada), traz uma barra de âncoras em que TODA entrada aponta para uma seção que existe, e um gráfico de preço em SVG do servidor cujo último ponto é o último fechamento do banco.I-N50— A página do FII tem o que a página da empresa tem: ficha em cartões com a fonte declarada, barra de âncoras em que toda entrada aponta para seção existente, três gráficos SVG do servidor (preço, P/VP ponto-no-tempo, rendimento por cota) cujo último ponto bate com o banco, e a série de P/VP enxuta (24 informes) com a completa por link.I-N51— A página da empresa abre um bloco "Tamanho e valuation": valor de mercado (fechamento de hoje × ações do último balanço público), EV, LPA, VPA, DY 12m, payout e nº de ações — cada cartão com o ano — e os múltiplos ponto-no-tempo ganham o ano no rótulo.I-N52— Ao lado do fechamento, a página (empresa e FII) mostra o retorno de 1 mês, 12 meses e no ano e a faixa de 52 semanas — calculados da série de fechamento do banco.I-N53— Ao lado de cada indicador e múltiplo da empresa, a página mostra a mediana das OUTRAS companhias do mesmo setor CVM (cada uma no seu último ano), com quantas são.I-N54— Abaixo das razões, a página da empresa mostra o histórico em REAIS — receita, lucro dos controladores, EBITDA, dívida líquida, caixa e aplicações, patrimônio — ano a ano, com a unidade (R$ bi ou R$ mi) no rótulo.I-N55— A agenda de proventos (em /hoje, na home e nas páginas de ativo) mostra só o que tem data marcada daqui para a frente — pagamentos e datas-com de FII, datas-com de ação —, nunca uma data impossível (9999-12-31, "a definir" na B3), e DIZ até quando a base enxerga (data do anúncio mais novo que ela tem).I-N56— A data-com de ação ANTES de acontecer vem do "Relatório Proventos" que a companhia entrega à CVM (IPE): o formulário é lido (aprovação, último dia com direito, ISIN, valor, pagamento), entra sem tipo — o formulário não separa dividendo de JCP, e a página diz isso —, não repete o que a B3 já publicou (mesma companhia, classe, data-com e valor), só a classe do ticker principal, e cada item carrega o link do documento na CVM.I-N57— As últimas páginas que ainda rodavam JavaScript saem prontas do servidor: a corrida dos setores é SVG desenhado em Python, com janela e escala por LINK; o gráfico do fluxo estrangeiro é SVG desenhado em Python; a transparência filtra por família por um link que o servidor responde; o título da metodologia é escrito na página, não reescrito no navegador.I-N58— A página da companhia lista cada provento da classe principal numa tabela: tipo, data-com, data-ex, pagamento e valor por ação.I-N59— O gráfico de cotação (empresa e FII) escolhe a janela por LINK (1m, 3m, 6m, ano, 1a, 5a, max) e desenha o fechamento do banco na granularidade que cabe: diária até um ano, semanal em cinco, mensal no máximo.I-N60— A tabela "Em reais, ano a ano" ganha duas colunas da ITR: o último trimestre sozinho e os últimos 12 meses (TTM), montados pela MESMA identidade do P/L TTM — anual do ano anterior menos os trimestres dele até aqui, mais os deste ano; faltou um pedaço, fica vazio, nunca interpolado.I-N61— Depois da passada de coerência (cotação com o gráfico, valuation com os dois tempos, indicadores com as sparklines, nove âncoras), a página da companhia ganha três coisas vistas na AUVP Analítica, todas do que o banco já tinha: (1) indicadores por tema — valuation, endividamento, eficiência, rentabilidade, crescimento — cada um com a definição de uma linha e a marca "hoje" quando divide o valor de mercado de hoje por conta do exercício; múltiplo sobre denominador não positivo não existe; banco e seguradora ficam sem o que não se aplica; (2) as três demonstrações numa tabela só (resultado, balanço, caixa), com as derivadas ditas no nome da linha — dívida bruta = curto + longo, caixa livre = FCO + capex; (3) os eventos societários, com o multiplicador e se bateram com o salto do preço.I-N62— Do Investidor 10, só com o que o banco já tinha: (1) tabela de rentabilidade por janela (1 mês a 10 anos) com o preço sozinho e com proventos reinvestidos no fechamento da data-ex; o preço inicial é ajustado pelos eventos societários CONFERIDOS com o preço, e salto que eles não explicam deixa a janela vazia; (2) DY por ano (soma do ano ÷ fechamento do último pregão do ano) e a média de 5 anos; (3) meses com data-com nos últimos 5 anos, contados, não projetados; (4) liquidez média diária dos últimos 63 pregões na ficha; (5) checklist de nove fatos com o limiar escrito em cada linha, banco e seguradora fora do que não se aplica, dito como fato e não como recomendação.I-N63— Uma auditoria externa (ChatGPT cruzando com Fundamentus e Status Invest, 13/09/2026) deu nota 8,5 em "dados atuais": os outros mostram o último balanço trimestral e indicadores de 12 meses, nós abríamos com o exercício fechado.I-N64— Decisão do dono (13/09/2026): a ficha mostra o logotipo da companhia.I-N65— A tabela de rentabilidade ganha a linha real: o retorno com proventos reinvestidos dividido pela inflação acumulada na janela, do IPCA mensal do Banco Central (série 433), capitalizado mês a mês, com os meses de ponta pro rata pelos dias.I-N66— A página da companhia ganha "Acionistas e free float": do Formulário de Referência (FRE) da CVM, na versão mais recente que a companhia entregou, só as participações DIRETAS (a cadeia de controle, quem é dono da holding, fica fora), com a linha "Outros" do próprio formulário como mercado e a distribuição do capital como free float; a página diz a data de entrega e a versão.I-N67— Roadmap 7. O gráfico de preço e a linha 1m/12m/ano passam a ajustar a série pelos eventos societários CONFERIDOS contra a queda de preço observada (evento_societario.I-N68— Roadmap 12. Quem chega por um código de negociação ANTIGO (EMBR3, VVAR3, ELET3) é redirecionado com 301 para o atual, e a página de destino DIZ de onde ele veio — não finge que a pergunta era outra.I-N69— A agenda passa a mostrar o PAGAMENTO futuro de ação, que a ficha da B3 traz (`dividendo.I-N70— Roadmap 10 e 11. Duas regras de coerência, uma por vez: (1) MOLDURA.I-N71— Os três restos que ficaram para trás quando o item principal foi feito: (1) ao lado da mediana do setor, a POSIÇÃO no setor — "3º de 40" —, calculada dos mesmos valores da mediana, com a direção declarada (ROE alto é bom, P/L baixo é bom) e nenhuma posição inventada para indicador sem direção óbvia; (2) na página de FII, a mediana dos pares do segmento sai do parágrafo solto e entra no cartão do P/VP e do DY, como na companhia; (3) cada linha da tabela em reais ganha a forma da série numa linha minúscula, com buraco onde falta ano e a linha do zero quando a série troca de sinal.I-N72— Roadmap 8. A home ganha o mercado na primeira tela, do que já está no banco: maiores altas e baixas do último pregão, maiores dividend yields de 12 meses e os setores pelo retorno de 12 meses do nosso índice.I-N73— O que a companhia entregou à CVM fora das demonstrações — fato relevante, aviso aos acionistas, ata, comunicado ao mercado — vira uma lista na ficha, da entrega mais recente para a mais antiga, com o link para o documento na CVM.I-N74— Roadmap 14, a passada de texto.I-N75— A página /para-quem é o resumo que um assistente de IA consegue citar: a quem serve, a quem NÃO serve, quanto custa, como começar — em PT e EN, com o FAQ em JSON-LD (schema.I-N76— /fiis e /etfs devolvem JSON pela MESMA URL.I-N82— LPA, VPA e nº de ações saem na API, e são o MESMO número da página da companhia.I-N83— Depoimento obedece às mesmas exigências que um número, adaptadas ao que ele é: palavra de outra pessoa.I-N84— A página das companhias que saíram da bolsa mede o buraco sem fingir que o conserta, e não publica ticker inferido.I-N85— `as_of` filtra pelo que ESTAVA PÚBLICO na data, não pelo exercício.I-N86— /carteira?WEGE3=30&.I-N87— `screener?.I-N88— Toda resposta de dado de companhia (API e conector) traz o campo `citacao`, pronto para copiar: fonte, versão do dado e a data do último documento recebido pela CVM.I-N89— /empresas/{ticker}/veredito responde sem chave, com os seis itens, a bandeira com motivo, a frase de topo (≤ 25 palavras), a citação e nenhum termo da lista proibida — e a mesma coisa sai pelo conector.I-N90— A página da empresa traz o veredito no topo — a mesma frase, a mesma bandeira e os mesmos seis textos do JSON — com âncora, link "como calculamos" em cada número, e nenhum termo da lista proibida.I-N91— /small-caps lista SÓ as companhias dentro da janela de liquidez da configuração (piso ≤ média < teto), entre 30 e 120 delas; ordena por cada um dos seis números via link; filtra por setor; e diz na página que o veredito existe para todas as companhias, com o caminho.I-N92— /acoes/{T}/reapresentacoes responde no H1 "A {nome} já reapresentou balanço? Em que anos?", com uma linha por conta reapresentada (a mesma contagem da camada de leitura), o arquivo da CVM do ano que revelou cada uma, PT e EN; papel desconhecido é 404; a página está no sitemap e é linkada da página da companhia que tem reapresentação.I-N93— Toda página de companhia traz um FAQPage com as cinco perguntas do roteiro de citações, e cada NÚMERO de cada resposta aparece no HTML visível da própria página (a pergunta de reapresentação: os anos aparecem na página /reapresentacoes dela).I-N94— Cada cartão de múltiplo da página da companhia e a nota ponto-no-tempo dizem "preço de DD/MM/AAAA", e o JSON de múltiplos traz o mesmo texto em `preco_de`, casado com `data_preco`.I-N95— Oda página da companhia é gerado do dado — "WEGE3: ROE 32,2%, P/L 33,1 (2025) — Dados B3" — com o ROE do último ano sem ressalva e o P/L do último balanço, cada número no formato da própria página; a meta description traz os números do ano, não o objeto social. I-N96— As comparações geradas respondem `noindex,follow` (fora do índice, links seguidos) e não estão no sitemap; a página de reapresentação entra no sitemap SÓ para companhia que reapresentou — a de quem nunca reapresentou é `noindex,follow`.I-N97— Cada página de companhia no sitemap leva `` = o recebimento do documento mais recente dela na CVM; a de reapresentação, o da DFP que revelou a última; FII e ETF, o último informe. I-N98— /acoes lista todas as companhias com página, por setor, cada uma com código, nome e o ROE do último ano sem ressalva (o mesmo número da página dela; traço quando não há); o rodapé de toda página liga /acoes, /fiis e /etfs.I-N99— /fiis/{T}/reapresentacoes: o H1 é a pergunta, a primeira linha responde, e a tabela traz cada competência com versão acima de 1 — as MESMAS do banco — com a entrega e o arquivo da CVM do ano; link para o FNET e para a página do fundo, que liga para cá.MCP10— MCP10 · A lista de ferramentas no `llms.MCP11— MCP11 · A ferramenta `screener` do conector aceita `as_of`, igual à API.MED13— MED13 · O registro de uso não permite reconstruir quem pediu o quê.MED14— MED14 · O painel diz DESDE QUANDO mede o uso de chave.MED15— MED15 · O uso de chave é contado num ponto só, e ele existe.MED16— MED16 · A degustação — o denominador da conversão em chave — é contada no middleware só quando é rota de DADO de papel aberto, sem chave, que deu certo e foi pedida por gente; guarda família do caminho e dia, nunca o ticker.MED17— MED17 · A retenção sai por coorte da semana do primeiro uso da chave: quantas estrearam e quantas voltaram N dias ou mais depois.MED18— MED18 · /admin/metricas não existe sem ADMIN_TOKEN (404) e, com ele, traz as quatro métricas do Bloco 5 — conversão da degustação, retenção, chegadas por via e eventos do vigia por mês (o mesmo contador da página /vigia) — sem e-mail, IP ou hash de chave.MED19— MED19 · Dois cenários sintéticos no mesmo dia-tipo: pessoas lendo 10 páginas muitas vezes NÃO é suspeito; o mesmo volume espalhado uma vez por página em 1.000 páginas É suspeito de rastreador.MED20— MED20 · derivado/search_console.TR34— TR25 · Rota COM PARÂMETRO que serve HTML abre com qualquer Accept e é medida.TR35— TR35 · O índice do /dump diz o tamanho do que sai sem código negociado.TR36— TR36 · `/empresas/{ticker}` responde, em vez de 404. Subir um nível numa URL é o gesto mais natural de quem explora uma API, e ele devolvia "não existe" para companhia que existe — um agente conclui que a cobertura acabou.TR37— TR37 · Os alarmes do /saude sobre banco sintético, um de cada vez: build que começou 3x (o limite) sem concluir acende, 2x não, e concluído não; 'rodando' há mais de 6h acende, 'falhou' há 7h não diz "rodando", 'rodando' há 1h não; o último pregão a 7 dias acende o alarme diário, a 6 não; 3 falhas seguidas da atualização diária acendem, 2 não; e banco sem preço nenhum dá cobertura nula em vez de derrubar a rota.TR38— TR38 · `_com_idioma` põe o seletor de idioma exatamente UMA vez e é idempotente (aplicar de novo não duplica), apontando para a outra língua da mesma rota; páginas públicas de cada família saem com um seletor só.TR39— TR39 · `_idioma`: ?lang= explícito vence (em qualquer caixa); sem ele, vale a língua que aparece PRIMEIRO no Accept-Language; língua que não é nem pt nem en dá PT.TR40— TR40 · O middleware de visita conta, só em GET: a página de cada companhia, a de reapresentação dela, os hubs, as comparações e a página de FUNDO quando a resposta é HTML; não conta subcaminho arbitrário de /acoes, POST, nem o JSON de fundo pela mesma URL.TR41— TR41 · Pela mesma URL da página, com chave: fundo ou ETF desconhecido é 404; banco de outra versão responde 503 "construindo" (página e JSON); código antigo de fundo redireciona com 301 para o atual, e o código atual igual ao pedido NÃO redireciona.TR42— TR42 · /vigia/eventos: `desde` inclui o próprio dia; `limite` fica entre 1 e 5.000; `tipos` traz o nome de cada tipo.TR43— TR43 · Banco sem nenhuma chave de build ou de atualização diária: falhas e inícios são 0 e não há `atencao`; o disco sai em GB com duas casas e o percentual usado com uma, da mesma pasta de dados; a cobertura de preço traz o PRIMEIRO e o último pregão.TR44— TR44 · Degustação: /empresas/WEGE3 é rota de dado aberta; POST e resposta de erro não contam.TR45— TR45 · O cliente `dadosb3` (cliente/) roda contra o app pelo transporte do TestClient, sem rede: veredito, vigia (companhia e fundos), reapresentações de FII, screener com as_of e recibo, e a leitura do recibo.TR46— TR46 · A /api tem uma seção por rota pública e com chave (companhia, indicadores, múltiplos, dividendos, screener com as_of e recibo, recibo, veredito, vigia, reapresentações da companhia e do FII, FII, ETF).TR47— TR47 · O código só importa módulos PÚBLICOS do FastAPI e do Starlette (nenhum `fastapi.I-H01— O caso do fluxo em 21/08: a fonte externa devolveu ZERO e o banco em construção ficou sem nenhuma linha.I-H02— O caso do CÂMBIO em 21/08, que é o que um `if vier vazio: copiar` deixaria passar — veio pela metade, não vazio.I-H03— A regra em uma frase: depois da herança, nenhuma das tabelas pode ter MENOS linhas que o banco anterior.I-H04— Primeiro build da vida (ou disco limpo): não há de onde herdar.I-H05— Os números REAIS de 21/08/2026 têm de ser recusados.I-H06— A trava NÃO pode ser zero, e este é o teste que impede isso.I-H07— O caso normal: banco novo maior.I-H08— Primeiro build da vida: não há com o que comparar.I-H13— Uma regra nova pode tirar linhas de propósito — mas só declarando quanto, e só na troca de versão.PR05— PR05 · O botão da chave grátis leva a um formulário, não ao Stripe.PR06— PR06 · O /assinar declara que a cobrança sai em nome da Lemon Tech.PR07— PR07 · E-mail malformado não cria cliente, e robô também não.PR08— PR08 · A chave criada grava DE ONDE a pessoa veio — a marca do link que saiu de nós e a resposta opcional "como chegou" — e nada disso fica junto do e-mail.I-Q09— O Informe Diário do FNET (HTML latin-1) sai com competência, CNPJ e um dia por linha — cota, captação, resgate, PL, total da carteira, cotistas — conferido contra o documento real do BOVA11.I-Q10— O Balancete do FNET (plano COFI) sai como {conta: (descrição, saldo)} para TODAS as contas, conferido contra o documento real (118 contas).I-Q11— Do registro RCVM 175 da CVM saem SÓ as classes de fundo de índice (FIIM), com CNPJ de 14 dígitos; os outros tipos ficam de fora.I-Q12— A carteira (CDA cda_fie) sai por posição com competência no 1º dia do mês, números com ponto decimal, filtrável por CNPJ.I-Q21— As três contas de cotas do balancete vão para o banco COMO O DOCUMENTO AS DECLARA — sem escolher convenção.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, ≤ 25 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 ≤ 25 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 "contra X do setor" (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%").VG01— VG01 · Cada tipo de evento da instrução de 22/09 é detectado: lucro que virou prejuízo, margem e dívida/EBITDA que mudaram de faixa, balanço reapresentado, bandeira que mudou de cor — cada um com período anterior e novo, número antes e depois, a data em que o documento que o revela ficou público, a fonte e a versão do dado.VG02— VG02 · Nada de número no código: as faixas são as do veredito, o corte da reapresentação é o mesmo da bandeira e o trimestre de comparação é escolhido no arquivo — mudar o arquivo muda o evento.VG03— VG03 · Só número que o veredito publicaria vira evento: valor com ressalva, valor que não se aplica (EBITDA negativo, receita zero), indicador que não existe para banco e conta com um lado zero na reapresentação (linha ausente, não número republicado) ficam de fora.VG04— VG04 · Nenhum texto do vigia — PT, EN e o e-mail — carrega termo proibido, mesmo quando a companhia descreveu a conta como "Receita de Venda": o texto usa o nosso rótulo; a descrição dela viaja só no JSON.VG05— VG05 · O vigia lê só por `leitura` e `veredito` — nenhum SQL no módulo nem na página — e não importa `api` nem a página de empresa; a página só monta HTML.VG06— VG06 · Rodando para TODAS as companhias que negociam: todo evento tem tipo conhecido, os dois períodos, os dois números, data, fonte e versão; nenhum texto carrega termo proibido; os cinco tipos aparecem; nenhum evento de indicador usa valor que o veredito não publicaria; e o mesmo papel dá os mesmos eventos duas vezes.VG07— VG07 · /vigia e /vigia/eventos abrem sem chave; o contador mensal da página e do JSON é o da lista, não número digitado; cada evento da página aponta para a página da companhia; o filtro por papel e por tipo funciona; tipo desconhecido é 400; a página está no sitemap e no llms.VG08— VG08 · Vigia dos FIIs, função pura: P/VP, DY 12m e vacância mudando de faixa e cotistas variando além do corte saem com os dois números, as duas competências, as duas faixas e a data de quem revelou.VG09— VG09 · Informe com versão acima de 1 é evento, datado pela entrega da versão vigente; se o build capturou o reenvio, o evento traz o campo que mais mudou (antes e depois) e quantos outros mudaram; sem captura, diz só o que se sabe.VG10— VG10 · /vigia?classe=fiis e /vigia/eventos?classe=fiis mostram o que o vigia dos fundos devolve, com filtro por tipo e fundo, e o contador mensal SEPARADO (soma = eventos datados de fundos); /vigia sem classe continua a página das companhias; classe ou tipo desconhecido é 400; nenhum termo proibido em evento de fundo; o e-mail é só esqueleto.VG11— VG11 · O DY 12m não tem série na fonte: cada build fotografa o `fii_yield` em `fii_yield_historico` (uma linha por fundo e data-base), com o derivado versionado no passo simétrico (carrega antes, fotografa depois do cálculo, reexporta sem encolher).VG12— VG12 · Os formatos do texto (reais em mil/mi/bi nas duas línguas, data, trimestre), as bordas da detecção (margem zero não é lucro nem prejuízo; reapresentação exatamente no corte entra; número ausente num dos lados não gera faixa), o sentido do evento nas duas direções e em EN, a fonte da reapresentação, os períodos da bandeira, o contador por tipo e sem data, e o e-mail vazio e ordenado.VG13— VG13 · Vigia dos FIIs: o rótulo de cada faixa nas duas línguas; valor exatamente no corte está na faixa de cima; cotistas exatamente no mínimo entram; queda sai com "caiu" e "−", em EN com "fell"; número de cotistas com separador de milhar e sem casa decimal; no reenvio, o campo que mais mudou em termos RELATIVOS e quantos outros; o contador por tipo e mês; o filtro por papel e tipo; o e-mail vazio, com `desde` inclusivo e ordem.VG14— VG14 · O texto da reapresentação: uma conta ("uma conta mudou .AC01— AC01 · Pedido na página → uma linha NÃO confirmada e um e-mail de confirmação na fila (sem provedor, fica pendente) → o link confirma → o aviso semanal é montado dos eventos do vigia daquela companhia, com o link de saída → sair cancela, e depois disso não há aviso.AC02— AC02 · Nenhuma resposta — a página do pedido, a de confirmação, a de saída, o erro de e-mail inválido, o /admin/metricas — contém o endereço, e nenhuma linha de log o escreve.AC03— AC03 · A limpeza apaga o pedido nunca confirmado com mais dias que o prazo da configuração, e só ele: o confirmado fica, o recente fica.AC04— AC04 · O bloco "acompanhar" aparece logo depois do veredito na página de TODA companhia — as três mais vistas (ITUB4, PETR4, BBAS3) e as demais, em PT e EN — com o formulário para /acompanhar e o papel certo, e nenhum texto do bloco, das páginas de resposta ou dos e-mails carrega termo proibido.AC05— AC05 · Robô que segue formulário não cria pedido nem manda e-mail, e acima do teto de pedidos por hora (configuração) a resposta é 429 — sem guardar IP, como na chave grátis.AC06— AC06 · Sem RESEND_API_KEY o provedor é "arquivo": grava na fila pendente e devolve False.LE01— LE01 · `resolver` acha a companhia por qualquer código dela e devolve o ticker PRINCIPAL (ou o da ficha, sem principal); papel desconhecido é None.LE02— LE02 · `retrato` pega o último exercício com indicador, conta as ressalvas dele, resume as reapresentações (total, anos, a maior por ano) e mede a defasagem: último balanço recebido, último trimestre e quantos exercícios a CVM tem a mais do que o calculado.LE03— LE03 · `faixa_propria` usa só valor limpo e diz a posição exata (0 = o menor, 1 = o maior), com None abaixo de 2 anos; `mediana_setor` exclui a própria companhia, exige 3 pares e devolve None sem setor; `distribuicao` pega cada companhia no último ano LIMPO (ou todas num ano dado, também para múltiplo) e os quantis certos; `fracao_*` são estritas.LE04— LE04 · `liquidez` é a média do volume nos últimos N pregões, com a janela dita; sem preço, None.LE05— LE05 · `recebimentos` separa DFP de ITR e põe cada ITR no trimestre certo (março = 1, junho = 2, setembro = 3); `reapresentacoes` ordena as contas pela maior diferença, dá o nome do item no plano de contas do TIPO da companhia (3.01 é receita na comum e receita de intermediação no banco) e data cada exercício pela DFP SEGUINTE; `reapresentacoes_por_cd` sai na ordem da chave.LE06— LE06 · `retrato_em` monta o retrato do dia em que a DFP daquele ano ficou pública: indicadores e múltiplo do ano, só as reapresentações de exercícios ANTERIORES, a Selic média do ano e `hoje` = o recebimento.LE07— LE07 · A série trimestral é a da companhia com o tipo dela: banco não recebe margem bruta (não existe no plano de contas dele); sem tipo, vale o geral.LE08— LE08 · Proventos do mais recente ao mais antigo com cada coluna no seu lugar; datas de pregão em ordem; pagamento avisado à CVM pela chave (classe, data-com, valor em 6 casas) e vazio sem a tabela; fechamento do último pregão de cada ano; cobertura ou None.LE09— LE09 · Companhia que não consolida (só publica o individual): a reapresentação dela é reapresentação normal.I-P27— Com números redondos, cada campo do múltiplo sai exato: valor de mercado = preço × ações; P/L = valor ÷ lucro dos controladores; P/VP = valor ÷ (PL total − minoritários); EV/EBITDA = (valor + dívida líquida) ÷ EBITDA; FCF yield = (CFO + capex) ÷ valor — e nenhuma flag.I-P28— Cada substituição sai com a sua flag, e o número que não existe fica vazio: sem minoritários, PL total no lugar (e P/VP sobre ele); sem lucro dos controladores, lucro total; lucro negativo dá P/L negativo com `pl_negativo`, lucro zero dá P/L vazio; patrimônio não positivo não tem P/VP; sem EBITDA, `sem_ebitda`; EBITDA negativo ou dívida desconhecida calam o EV/EBITDA sem inventar; sem capex, `sem_capex`.I-P29— As réguas têm o lado declarado: P/L de exatamente 200 não é extremo, acima é; valor de mercado ABAIXO de 1% do patrimônio é contagem em milhares (corrige ×1000 e diz); exatamente 1% não é corrigido — e, a 0,01x do patrimônio, cai fora da banda [0,02; 50] e o ano fica sem múltiplo; 0,02x e 50x estão dentro; acima do teto de valor de mercado, nada é publicado.I-P30— Unit principal divide o preço pela cesta (e diz), e unit sem cesta conhecida sai com o aviso; ano com escala divergente perde os quatro múltiplos; sem ações em circulação, a linha sai vazia com o motivo; a contagem usada é a do último instantâneo PÚBLICO até a data do preço (nunca o futuro), com aviso quando veio do FRE e quando tem mais de 200 dias.I-P31— A contagem de ações de um ano contra a do ano anterior com preço: até 3x para qualquer lado passa; acima, o ano fica sem múltiplos — a menos que o ano anterior seja o PRIMEIRO com preço (abertura de capital), que a razão seja a da escala em milhares (~1000x), que haja evento societário registrado entre o ano anterior e o seguinte, ou que a contagem já venha ajustada.I-P32— Uma linha sintética com valores distintos em cada campo grava fechamento, abertura, máxima, mínima, médio (duas casas), volume (duas casas), quantidade dividida pelo FATCOT, negócios, data e o código de onde veio.I-P33— Na semana em que a companhia negocia sob o código velho E o novo, o registro do dia é o do ticker principal — os oito campos da mesma linha e o código dela —, qualquer que seja a ordem no arquivo; dia em que só o velho negociou fica com o velho.I-P34— `_codigos_por_empresa`: o principal tem prioridade 0 e o histórico da MESMA classe 1; histórico de outra classe não entra; código reivindicado por duas companhias sai do mapa das duas; empresa sem principal não entra; espaço em volta do código e da classe é aparado.I-P35— `_escolher_principal`: só Bolsa, sem data de fim e com código válido; ordinária antes de preferencial; empate pelo código; o código sai normalizado.I-P36— TTM(Qk) = anual(ano−1) − Q1..I-P37— O múltiplo trimestral: o primeiro pregão a partir do recebimento da ITR (o de antes não serve), dentro da janela de 45 dias inclusive; valor de mercado = preço × ações; P/L TTM = valor ÷ lucro TTM; P/VP = valor ÷ (PL − minoritários).I-P38— `_acoes_na_data`: a contagem mais recente JÁ PÚBLICA até a data (inclusive), nunca a de depois; no empate de data, DFP/ITR ganham do FRE; só FRE marca "sem tesouraria"; contagem zero é ignorada; acima de 100 bilhões não vira número; defasagem acima de 200 dias marca, 200 não.I-P39— `calcular_multiplos`: uma linha por exercício com fato.I-P40— Um passo acima de cada régua muda o resultado: P/L 200,5 é extremo; valor de mercado 50,5x o patrimônio sai da banda; patrimônio exatamente zero não tem P/VP e não divide; EBITDA de meio real ainda dá EV/EBITDA; lucro de meio real não é "negativo"; teto de valor de mercado e contagem implausível no número exato e logo acima.I-P41— Desdobramento com data-ex NO DIA da contagem é aplicado; no dia do preço, não (o preço já está na base nova só a partir do dia seguinte ao ex); na véspera do preço, é.I-P42— O 2º e o 3º trimestres acham a ITR de 30/06 e 30/09; P/L TTM de exatamente 200 não é extremo e 200,5 é; P/VP 50 não é extremo e 50,5 é (o trimestral não tem a banda do anual); valor de mercado de exatamente 1% do patrimônio não é corrigido; patrimônio zero não divide; o número devolvido conta cada linha gravada.I-P43— (1) Uma linha do COTAHIST com TODOS os bytes preenchidos — vizinhos de cada campo com algarismo, cada número usando a largura inteira — é lida exatamente: fatia deslocada de um byte lê o vizinho e muda o número.
Nível 2 — Semântica: a conta significa o que o cálculo supõe? (34)
I-B07— Toda divergência ÚLTIMO × PENÚLTIMO acima de 0,5% nas contas- chave tem que estar em `reapresentacao`.I-E05— O pregão usado em cada múltiplo está DENTRO da janela após a publicação da demonstração.I-F02— O mesmo invariante central dos múltiplos de ação, no FII: o preço do P/VP nunca é anterior à Data_Entrega do informe.I-F07— Vacância é fração em [0,1] (INVARIANTE) e a semântica ambígua da fonte é sempre flagada (HEURÍSTICA no mesmo teste).I-F08— Nenhum P/VP LIMPO (flag NULL) casa um VP de competência com um preço de pregão muito posterior à publicação do informe.I-B24— Todo banco/seguradora que tem fato tem lucro E PL extraídos no ano mais recente.I-X02— Ingresso e saída são fluxos BRUTOS: não existem negativos.I-X03— A série não pula mês entre o primeiro e o último.I-L03— Indicador publicado COM VALOR e SEM FLAG não pode ter insumo obrigatório sem lastro no banco.I-L04— Todo indicador que o banco publica está declarado em `INSUMOS`.I-B15— O preço usado em `multiplo` nunca é anterior a `dt_receb` — é o INVARIANTE central de todo o bloco de múltiplos: sem ele, o P/L "conhece" um balanço que o mercado ainda não tinha visto.I-B16— Contraprova: market_cap recomputado fora do código de cálculo (preço × snapshot de ações mais recente ATÉ a data do preço) bate com o gravado.I-B18— Mesmo invariante central do I-B15, no bloco trimestral: o preço do múltiplo nunca é anterior ao dt_receb da ITR.I-P05— `codigos_negociados` funciona com ZERO .I-P02— Todos os códigos que alimentam o preço de uma empresa são da MESMA classe do principal de hoje.I-P04— Todo valor de mercado usa um snapshot de nº de ações que JÁ ERA PÚBLICO na data do preço — nunca um posterior.I-P12— O FATCOT corrige a QUANTIDADE; o preço atravessa intacto.I-P14— A troca só ocorre entre CLASSES diferentes — nunca entre um código e o nome antigo da MESMA classe.I-P15— A troca por liquidez elege uma unit SÓ quando a composição dela está gravada em `unit_composicao`, e nunca destrona uma unit.I-P23— Companhia que trocou de sigla (Marfrig → MBRF3, jan/2026) ganha o código novo mesmo com o FCA ainda listando o velho, e o código velho, com volume recente ZERO, cede o lugar sem exigir o fator de 3x sobre os 16 anos de histórico que ele acumulou.I-B32— Todo indicador emitido no banco tem entrada de proveniência no DICIONARIO — a fórmula, as contas CVM e a BASE do lucro que /indicadores agora embute AO LADO do número.I-Q18— Pedir um mês ANTIGO ao FNET não encolhe a janela de entrega.I-Q19— Pedir só balancete não baixa informe diário.I-Q20— O orçamento de tempo do backfill vale DENTRO da listagem, não só entre os meses.- : /buscar e /buscar/fiis dizem que existe uma busca com parametro (searchaction /procurar?q=); /hoje e datada pela versao do dado (nao por hoje a pagina diz quando aquilo era verdade); /comparar/a/b lista as duas companhias com ticker e a url da pagina de cada uma.">
I-N77— As três páginas que ficaram sem JSON-LD no teste "como uma IA" (10/09/2026) agora têm UM bloco válido no : /buscar e /buscar/fiis dizem que existe uma busca com parâmetro (SearchAction → /procurar?q=); /hoje é datada pela VERSÃO DO DADO (não por hoje — a página diz quando aquilo era verdade); /comparar/A/B lista as duas companhias com ticker e a URL da página de cada uma. I-N78— Cache-Control público em toda resposta de leitura sem chave, e em NENHUMA resposta com chave ou de rota de sessão/cobrança/protocolo.I-N79— `pip install dadosb3` é o primeiro gesto de quem programa, e por isso está nas três portas por onde essa pessoa chega: o hub /api, o llms.I-N81— Quando o aviso à CVM declara pagamento PARCELADO, a agenda do ativo diz isso e leva ao documento — em vez de calar o pagamento.I-Q07— Número brasileiro ('13.919.737.980,15') vira float; vazio ou inválido vira None, nunca exceção.I-Q08— Data brasileira ('11/09/2026 20:27') vira ISO; inválida vira None.I-Q13— A lista de ETFs da B3 é lida mesmo quando o JSON vem duplamente codificado.I-Q14— O detalhe da B3 devolve ticker, CNPJ, gestor, escriturador e nº de cotas; corpo vazio devolve None.I-Q15— A busca do FNET sai com id, tipo, data de referência (mês do balancete vira 1º dia) e data de entrega.I-Q16— O índice é inferido do NOME do fundo por regras declaradas, da mais específica para a mais genérica; nome sem pista devolve None, não um chute.
Nível 3 — Econômico: o resultado é possível no mundo real? (14)
I-X08— Toda correlação publicada carrega o próprio n, e n nunca é pequeno o bastante para ser ruído.I-X09— A correlação do MESMO mês é a maior de todas.H-B05— Ativo total nunca negativo; nunca acima de R$ 100 tri (denuncia ESCALA_MOEDA=MIL aplicada em dobro).H-B08— |ROIC| > 200% sem flag `roic_extremo` é defeito até prova em contrário.H-B23— Mesmo padrão do H-B08/H-B17: provento > 5x o preço na data-com é preço histórico não ajustado por desdobramento (comum na B3 em dado antigo), não erro de parsing do valor.I-E04— Nenhum valor de mercado maior que o PIB do Brasil.H-F05— Mesmo padrão do H-B17: P/VP fora de [0,2 ; 5,0] sem flag é defeito até prova em contrário (vp_cota minúsculo/negativo, evento societário).H-F06— DY 12m acima de 30%/ano quase sempre é distribuição extraordinária (venda de imóvel, amortização de capital contada como rendimento na fonte), não yield recorrente.H-B25— ROE de banco fora de [-100%, 150%] é quase sempre erro de extração (PL ou lucro trocado).H-B17— Mesmo padrão do H-B08 (ROIC): |P/L|>200 ou |P/VP|>50 sem flag é defeito até prova em contrário.I-B31— O índice setorial tem os 10 macro-setores + 'Mercado (B3)', cada um com a série cheia (mesmo nº de semanas), níveis positivos e base 100 no início.I-B33— Nenhuma semana de nenhum setor anda mais do que uma bolsa consegue andar numa semana.H-B14— Q1+Q2+Q3 isolados de receita <= receita anual da DFP (tolerância 2%) para a GRANDE maioria das empresas — o resíduo (Q4 implícito) tem que ser não-negativo.I-P07— O PREMED fica FORA de [mínima, máxima] em ~0,1% das linhas — e o teste existe para registrar isso, não para reprovar.
Outros testes do produto (120)
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:
MED01— MED01 · Toda ferramenta do conector MCP passa pelo ponto de contagem.MED02— MED02 · Chamar uma ferramenta MCP grava mesmo a chamada.MED03— MED03 · Clique do próprio funil não é contado como visita.PR01— PR01 · O cabeçalho deste arquivo não pode perder o aviso de que passar na bateria não é prova de verdade.PR02— PR02 · Nenhum indicador vai ao ar sem página de metodologia.GC01— GC01 · Sem Stripe configurado o produto serve tudo, sem chave — é o modo do desenvolvimento e da UVI, e ele não pode fechar por acidente.GC02— GC02 · Com o gate ligado, a WEGE3 continua aberta: é a degustação que deixa qualquer um conferir o dado antes de decidir.GC03— GC03 · Fora da degustação, indicadores, múltiplos e fatos exigem chave — e a recusa é 401 em todas as três rotas, não só na primeira.GC04— GC04 · Chave inexistente é recusada.GC05— GC05 · A contraprova do GC04: chave válida abre o papel fechado.GC06— GC06 · O limite diário corta de verdade: a chamada além da cota devolve 429, e não um 200 silencioso com o contador ignorado.GC07— GC07 · Landing, metodologia e /saude nunca ficam atrás do gate — o argumento do produto tem de ser verificável por quem ainda não é cliente.GC08— Plano grátis: acesso a tudo, mas o limite diário é o do grátis (menor).GC09— /assinar?moeda=usd repassa moeda='usd' ao checkout (público internacional); o padrão continua BRL.GC10— ?lang=en serve a landing inglesa; Accept-Language en também.GC11— O dicionário JSON diz a base do lucro de cada indicador — o achado da auditoria: margem_liquida (total) != roe (controladores).GC12— Screener filtra por faixas e recusa entrada inválida (não ignora).GC13— Dividendos segue o gate: WEGE3 (degustação) abre sem chave; PETR4 exige chave; chave válida passa.GC14— Scores e reapresentações seguem o gate: WEGE3 aberta; PETR4 exige chave.GC15— GC15 · O 401 responde HTML para navegador e JSON para agente.GC16— GC16 · A página de 401 sai em inglês para quem pede inglês.GC17— GC17 · O dump é o que separa o plano grátis do pago.GC18— GC18 · O 403 do Pro responde no formato de quem perguntou.GC19— GC19 · Sem chave, o /dump não pode oferecer a chave grátis.GC20— GC20 · Ticker que não existe responde 404 ANTES de o gate pedir chave; HEAD responde como o GET, sem corpo; o preflight CORS do /mcp/ aceita POST.I-N01— Rastreia todas as páginas a partir da home: nenhum link interno pode responder erro, e toda página tem de ter caminho de volta para a home.I-N02— Os apelidos de metodologia (URLs que as pessoas ADIVINHAM, como /metodologia/pl) redirecionam para a página canônica — e um nome inexistente continua 404, para o alias não virar um buraco que engole tudo.I-N03— Toda página HTML tem link visível de troca de idioma.I-N04— A metodologia — o argumento central do produto — existe em inglês.I-N07— Cada vertical configurada tem porta, e a porta fala os dois idiomas.I-N05— Toda página pública declara viewport e tem regra responsiva.I-N08— O menu principal, nos dois idiomas, tem porta para cada vertical.I-N06— Rota que depende de tabela NOVA responde 503, nunca 500, quando a tabela ainda não existe.I-N09— Tabela que mistura duas temporalidades tem de rotular cada uma.I-N10— Todo exemplo que o cardápio do /screener oferece precisa ser aceito pelo /screener.I-N11— O cardápio do /screener responde a quem NÃO tem chave.I-N12— O /saude publica a versão do dado, e ela é a do banco servido.I-N13— A página de reapresentações abre sem chave; o feed por empresa não.I-N14— A página de qualidade lista o que NÃO publicamos, e por quê.I-N15— A página do plano de contas prova que código não define conta.I-N16— A página do ISSB diz que a obrigação foi REVOGADA, com data.I-N17— A página de armadilhas conta do banco, não afirma de memória.I-N18— A página do look-ahead mede, e distingue atraso de republicação.I-N19— Quem chega sem chave recebe a PÁGINA, qualquer que seja o Accept.MCP01— MCP01 · O conector anuncia EXATAMENTE as 19 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.I-TR01— Todo teste cujo ID é da família de invariante de dado (`_RE_ID_FAMILIA_DADO`: qualquer "I-"/"H-" que não seja navegação) tem de estar em `_NIVEL_DO_TESTE`.I-TR02— O total coletado por `_coletar_bateria_de_testes` é EXATAMENTE o número de testes que `pytest --collect-only` enxerga nos mesmos módulos — não um a mais (introspecção pegando algo que não é teste) nem um a menos (teste que a introspecção pulou e a página esconderia).I-TR03— Nenhum teste desaparece da coleta por falta de docstring/ID — o requisito explícito é 'nunca sumir em silêncio'.I-TR04— `_CASOS_REAIS` e `_ORDEM_CASOS` só podem citar IDs que a bateria real ainda tem — um caso "pendurado" (teste renomeado/removido) é história morta que não deveria continuar como se fosse viva.I-TR05— Todo teste da bateria tem descrição em português E em inglês.MED04— MED04 · O alarme do build acende pelo fato, não pelo instante.MED05— MED05 · Se a base no ar não é a que o código promete, o /saude avisa.MED06— MED06 · 'Rodando' tem prazo — build travado não passa por saudável.MED07— MED07 · Página que publica número vivo diz de quando ele é.PG01— PG01 · Nenhum módulo que testa DADO fica fora do portão.TR05— TR05 · Todo arquivo `testes/test_*.TR06— TR06 · Nenhuma página pública anuncia contagem de empresas ou de testes com número digitado no HTML.TR07— TR07 · As métricas globais são IDÊNTICAS em português e inglês.TR08— TR08 · Número em página EN sai no formato de quem lê, com vírgula.TR09— TR09 · Dois testes não podem carregar o mesmo identificador.TR10— TR10 · A lista de 100+ testes é filtrável, e o filtro nunca esconde nada de quem não roda JavaScript.TR11— TR11 · Nenhuma página analítica leva mais de 2s para montar.TR12— TR12 · Varre TODAS as páginas públicas atrás de qualquer número que coincida com uma contagem do banco sem estar em dia.TR13— TR13 · Nenhuma página pode reivindicar exclusividade além do universo que o /comparativo declara ter comparado.TR14— TR14 · Afirmação de SUPERIORIDADE, não só de exclusividade, tem de dizer contra quem foi comparada.TR15— TR15 · O painel de tráfego tem uma contagem que NÃO sobe quando somos nós navegando ou quando a bateria roda.TR16— TR16 · Toda página HTML pública é medida — em especial as do funil.TR17— TR17 · Um clique pago é identificável, e nada além da campanha é gravado.TR18— TR18 · A recusa por plano ou por cota é contada, e o banco de analytics NUNCA guarda a chave em claro.TR19— TR19 · Todo valor esperado no desafio é o que a API serve AGORA.TR20— TR20 · Cada verificador do desafio reprova o defeito que ele vigia.TR21— TR21 · A /transparencia carimba a versão do dado e o instante da geração.TR22— TR22 · O desafio publica quantos TIPOS de armadilha cobre, não só casos.TR23— TR23 · A mesma semente devolve os mesmos casos, e sem semente não sorteia.TR24— TR24 · /auditoria/random/{seed}/{n} == /auditoria/random?seed&n.TR25— TR25 · Toda página que exibe contagem viva carimba versão + geração.TR26— TR26 · A amostra do auditor não se desfaz quando a base atualiza.TR27— TR27 · audit_id, sample_key e score: a auditoria é demonstrável depois.TR28— TR28 · O histórico separa auditor externo de interno e mantém os erros.TR29— TR29 · Onde aparece taxa, aparece a ressalva — no mesmo bloco.TR30— TR30 · O prompt publicado aponta para a fonte primária, não para nós.TR31— TR31 · Todas as sementes da faixa estão publicadas — nenhuma falta.TR32— TR32 · Build que falha vira estado VISÍVEL, não só linha de log.TR33— TR33 · O comparativo diz a data da conferência e admite onde perdemos.MED08— MED08 · Passo de funil dado por robô não conta como intenção humana.MED09— MED09 · Crawler que segue o link "Assinar" não cria sessão de pagamento.MED10— MED10 · O plano grátis aparece no HTML servido, sem executar script.MED11— MED11 · A landing servida traz o grátis quando o plano está ligado.MED12— MED12 · Nenhuma página escreve à mão um número que o banco já sabe.PR03— PR03 · Quem não escolheu plano vê os planos, não um formulário de cartão.PR04— PR04 · O grátis aparece na página, e não escondido atrás de script.AUD01— AUD01 · O `csv_no_zip` e o `filtro` levam à linha, e a escala fecha.AUD02— AUD02 · O texto não promete uma verificação que a CVM torna impossível.AUD03— AUD03 · A rota declara o próprio limite em vez de deixar implícito.AUD04— AUD04 · O `onde_procurar` do caso sorteado leva à linha, de verdade.AUD05— AUD05 · A metodologia diz o que acontece QUANDO a base muda.AUD06— AUD06 · Comparação que atravessa mudança de base sai marcada.AUD07— AUD07 · Navegador recebe página; agente que pede JSON recebe JSON.AUD08— AUD08 · A rota da amostra existe no llms.AUD09— AUD09 · D&A do EBITDA não engole amortização de custo de dívida.AUD10— AUD10 · O protocolo declara o vínculo em vez de fingir neutralidade.AUD11— AUD11 · Cache acelera a repetição e NUNCA serve amostra de base velha.AUD12— AUD12 · Para banco, a lista genérica não é apresentada como se valesse.AUD13— AUD13 · O auditor consegue refazer a ORDENAÇÃO, não só os scores.AUD14— AUD14 · O universo declara uma conta que tem de fechar com o /saude.AUD15— AUD15 · Publicamos as linhas EXCLUÍDAS do D&A, não só as somadas.CV01— CV01 · Toda definição de EBITDA que o olho leu na escritura, a lente acha.CV02— CV02 · Discricionário ou objetivo é o que o OLHO leu, não o que a lente diz.CV03— CV03 · Reintroduzido o defeito, a flag de discricionariedade TEM de mudar.CV04— CV04 · "40% do EBITDA consolidado" não é definição de EBITDA.CV05— CV05 · Documento que não cita EBITDA não vira linha com definição.CV06— CV06 · O limiar em texto corrido é lido; o de TABELA não é, e a página diz.
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 | 438 | 290 |
| 2024 | 444 | 296 |
| 2023 | 442 | 298 |
| 2022 | 429 | 295 |
| 2021 | 423 | 296 |
| 2020 | 410 | 274 |
| 2019 | 371 | 164 |
| 2018 | 326 | 164 |
| 2017 | 317 | 162 |
| 2016 | 311 | 152 |
| 2015 | 303 | 143 |
| 2014 | 301 | 139 |
| 2013 | 292 | 130 |
| 2012 | 291 | 111 |
| 2011 | 284 | 97 |
| 2010 | 277 | 34 |
Cobertura ao vivo
456 empresas · 876,076 pontos de preço · 8,654 reapresentações registradas · última atualização 2026-09-27 00:20:28. 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-09-27-reapresentacao-agreg · página gerada em 2026-09-27 03:37 UTC. Se isto não bater com o /saude, você está lendo uma cópia em cache.