Transparência
Transparência — como você confere os números você mesmo
Versão do dado 2026-09-01-supressao-declarada · página gerada em 2026-09-07 21:21 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 — 285 testes automáticos, coletados ao vivo
166 são invariantes de DADO (o número fecha?) e 119 são de produto — gate de acesso, navegação, idioma, conector de IA. Chamar os 285 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.
285 de 285 testes
Nenhum teste bate.
Nível 1 — Integridade: o dado fecha? (132)
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-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-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-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-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.MCP10— MCP10 · A lista de ferramentas no `llms.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.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.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.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.
Nível 2 — Semântica: a conta significa o que o cálculo supõe? (20)
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 nunca elege uma unit nem destrona uma.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.
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 (119)
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.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 17 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 | 291 |
| 2024 | 444 | 296 |
| 2023 | 442 | 297 |
| 2022 | 429 | 294 |
| 2021 | 423 | 297 |
| 2020 | 410 | 275 |
| 2019 | 371 | 165 |
| 2018 | 326 | 167 |
| 2017 | 317 | 163 |
| 2016 | 311 | 151 |
| 2015 | 303 | 142 |
| 2014 | 301 | 140 |
| 2013 | 292 | 128 |
| 2012 | 291 | 110 |
| 2011 | 284 | 95 |
| 2010 | 277 | 34 |
Cobertura ao vivo
455 empresas · 870,622 pontos de preço · 9,467 reapresentações registradas · última atualização 2026-09-06 19:11:21. Contagens completas ao vivo em /saude.