Linhagem — do número publicado até a linha do arquivo da CVM
Há uma diferença entre auditável e reproduzível, e ela é a razão desta página existir.
Até agora este banco dizia duas coisas: a fórmula de cada indicador (em
/metodologia) e a conta da CVM de onde cada insumo saiu. Isso é auditável
— dá para conferir se a conta certa foi usada. Mas não é reproduzível: para
refazer o número por conta própria, você teria de baixar o arquivo da CVM e
adivinhar qual linha, de qual documento, de qual versão.
A linhagem fecha essa cadeia. Para qualquer indicador publicado, ela entrega:
ROIC · WEGE3 · 2025 · 0,3846
│
├─ fórmula: NOPAT / capital investido médio
│
├─ documento: DFP 2025, versão 1
│ referência 2025-12-31 · público em 2026-02-25
│ arquivo: dfp_cia_aberta_2025.zip (dados.cvm.gov.br)
│
└─ insumos
├─ ebit ......... DRE 3.05 "Resultado Antes do Resultado Financeiro
│ e dos Tributos" = 7.998.741.000
├─ lair ......... DRE 3.07 ...
├─ ir_csll ...... DRE 3.08 ...
├─ div_curta .... BPP 2.01.04 ...
├─ div_longa .... BPP 2.02.01 ...
├─ pl_total ..... BPP 2.03 ...
├─ caixa ........ BPA 1.01.01 ...
└─ aplic_fin .... BPA 1.01.02 ...
Cada linha carrega o código da conta, a descrição que a própria empresa escreveu, o valor e a versão do documento. Se aquela conta foi reapresentada, a linhagem mostra o valor de antes e o de depois, com a diferença. E o link vai para o ZIP bruto da CVM — o arquivo de verdade, não uma cópia nossa.
Cobertura, medida e não estimada
De 60.085 indicadores publicados com valor, 58.951 (98,1%) têm todos os insumos rastreáveis até a linha exata do arquivo.
Os 1,9% restantes não são falha de rastreamento: são itens que a empresa não publicou naquela demonstração. Os dois casos dominantes:
| insumo ausente | ocorrências | o que significa |
|---|---|---|
lucro_controladores |
1.001 | a empresa não separa a parte dos não-controladores |
pl_minoritarios |
888 | idem, no balanço |
cfo (Piotroski) |
129 | a DFC não foi publicada naquele ano |
Nesses casos o insumo aparece marcado como não rastreável, com o motivo — e o indicador que dependia dele carrega a flag correspondente. Nunca há uma conta inventada para tapar o buraco.
Origem composta
O plano de contas da DFC varia de empresa para empresa: o capex às vezes mora em
uma linha, às vezes em duas. Quando a origem é composta (DFC_MI:6.02.01 +
6.02.02), a linhagem mostra as duas linhas separadas, cada uma com seu
valor, e a soma tem de dar o número publicado. Um invariante reprova a
publicação se não der — hoje, zero divergências.
O que esta página encontrou ao ser construída
Construir a linhagem foi, na prática, uma auditoria do cálculo — e ela achou um defeito que estava no ar desde o começo.
O cálculo do capital investido e da dívida líquida usava caixa or 0. Isso
trata "a empresa não publicou o caixa" e "o caixa é zero" como a mesma
coisa. São diferentes: a primeira é ausência de informação, a segunda é
informação. O efeito era inflar o capital investido (derrubando o ROIC) e a
dívida líquida — e o número saía sem nenhuma flag, ou seja, limpo.
Atingia três indicadores de uma empresa (ARMAC, exercício de 2021). Pouco em
volume, grave em natureza: é exatamente o silêncio que este banco existe para
não ter. O or 0 continua — é a única conta possível — mas agora ele avisa,
com a flag caixa_nao_publicado, e o invariante I-L03 reprova a publicação
de qualquer indicador limpo cujo insumo obrigatório não tenha lastro.
Vale registrar que o Piotroski já fazia certo desde sempre: quando falta um
critério, ele publica parcial_7_de_9 em vez de fingir que somou nove.
Os invariantes da linhagem
| id | o que trava |
|---|---|
| I-L01 | a soma das linhas de uma origem composta é o valor do fato |
| I-L02 | toda conta citada como origem existe de fato na tabela de contas |
| I-L03 | indicador limpo não pode ter insumo obrigatório sem lastro |
| I-L04 | todo indicador publicado tem os insumos declarados |
| I-L05 | contraprova ponta a ponta: a cadeia inteira, para uma amostra |
O I-L02 provou seu valor no primeiro build: reprovou porque o campo de
origem pode carregar uma anotação depois de ; (um caso de custo publicado com
sinal invertido, corrigido pela identidade da DRE) e a leitura ingênua procurava
uma conta com a anotação colada no código. Defeito do leitor, não do dado — mas
teria virado um elo quebrado na página, e ninguém veria.
Como usar
Na página de cada empresa, todo indicador abre a cadeia. Pela API, o mesmo objeto sai em JSON — a mesma verdade, servida em dois formatos, para que um agente de IA possa percorrer a procedência exatamente como uma pessoa faria.
O pedido continua de pé: ache um número que não bata com a DFP da CVM. Agora com o caminho inteiro à mão.