Quase toda empresa deste mercado publica um número de acurácia. Pergunte qual é o denominador e normalmente não há nenhum publicado. Esta página é a outra metade da pergunta: com que frequência este motor erra sobre um documento legítimo, com que frequência acerta sobre um adulterado separado por como a adulteração foi feita, e um caso em que a resposta honesta é que ele não detecta nada.
Como ler um número desta página
Em todo o resto deste site, uma página de guia não pode carregar um número que vai envelhecer — afirmações datadas ficam no blog, onde a data delimita o que foi dito. Esta página é a exceção deliberada, e ela é contida de duas formas em vez de ficar na boa intenção.
- Cada número traz a versão do motor em que foi medido e a data. Uma taxa medida na 1.17.0 é uma afirmação sobre a 1.17.0. Onde uma versão posterior mexeu no número, os dois valores estão aqui, e a versão que mexeu também.
- Um teste na CI prende esta página ao motor publicado. Ele verifica que a versão que esta página chama de atual é a versão que está no código do motor — então nenhuma release do motor sobe sem que alguém volte e releia o que está escrito aqui. O motor rodando em produção hoje é a 1.28.0.
Duas palavras são usadas com rigor daqui para baixo. Medição significa que o motor rodou sobre os arquivos. Projeção significa que o cálculo de pontuação foi reexecutado sobre laudos já armazenados, o que é mais fraco — e sempre que aparece está rotulado assim.
Falsos positivos em 1.728 documentos que ninguém selecionou
Todo corpus que este motor tinha até agosto de 2026 foi escolhido por nós — processos judiciais, contratos do PNCP, amostras de extrato. Uma taxa calculada sobre documentos que você escolheu é um fato sobre a escolha, não sobre o motor. Então foram medidas duas populações que ninguém aqui montou:
- 743 PDFs da web brasileira, sorteados de blocos igualmente espaçados do índice do Common Crawl, em 421 hosts brasileiros. É a população que se parece com o que chega na sua mesa: comprovante de residência, holerite, contrato, nota.
-
985 PDFs de
.govamericanos, do conjunto aleatório “1000 .gov PDF dataset” da Library of Congress (CC0), como contraprova de uma população estrangeira e igualmente não curada.
São 1.728 documentos e 0 falhas de parsing. Todos foram publicados pela própria organização que os produziu, então cada um é presumido legítimo e qualquer pontuação acima de baixo conta contra nós. A medição é de 4 de agosto de 2026 e é ela que forçou a reespecificação do motor 1.17.0: quatro famílias de sinal foram limitadas ou reescopadas porque afirmavam “alterado depois de criado” sobre arquivos cuja própria contagem de revisões diz que foram escritos uma única vez.
| População | Acima de baixo | Na faixa alto |
|---|---|---|
| Web brasileira (743) | 82,8% → 30,0% | 38,2% → 10,0% |
.gov americano (985) |
68,5% → 18,6% | 11,8% → 7,4% |
À esquerda da seta: medido, no motor como ele estava antes da 1.17.0, 4 de agosto de 2026. À direita: motor 1.17.0, 4 de agosto de 2026 — uma projeção, não uma nova medição.
A coluna da direita é uma projeção e não vamos chamá-la de outra coisa. Ela vem de reexecutar o cálculo de pontuação sobre os laudos já armazenados dos 1.728 documentos, porque as regras do corpus apagam os arquivos originais depois de cada rodada. O que a torna confiável é que a reexecução reproduz a faixa atual do motor em 1.728 de 1.728 documentos; o que a mantém uma projeção é que ninguém rebaixou os bytes e rodou o motor inteiro de novo. Os dois manifestos de coleta sobreviveram, então uma nova rodada de verdade é reproduzível — ela não foi feita.
Isso não foi remedido no nível da população inteira desde a
1.17.0, e a leitura honesta da lacuna é que o número acima
está, se tanto, alto demais para o motor de hoje: 1.19.0, 1.22.0 e
1.23.0 tiraram disparos dessas mesmas populações em vez de acrescentar,
e a verificação nova da 1.27.0 entra como low, que sozinha
não tira um documento da faixa baixo. O relato da rodada
original, com as quatro famílias e o que cada uma fazia de errado, está
aqui.
Por que a amostra brasileira dispara mais
A diferença entre 82,8% e 68,5% não é sobre o Brasil produzir documento pior. É estrutural, e vale entender antes de olhar qualquer laudo daqui.
Uma assinatura ICP-Brasil anexa uma revisão incremental por signatário. Um contrato assinado por três pessoas tem três revisões — exatamente a forma que um detector ingênuo chama de adulteração. Some a isso os fluxos de cá: o documento sai de um sistema, passa por um portal que reescreve o arquivo, é assinado, é carimbado com protocolo. Cada etapa é uma escrita legítima que deixa marca. Rodamos 250 contratos do PNCP, 62 modelos de governo e 33 PDFs publicados por bancos para separar as duas coisas; o relato está aqui.
A consequência prática é a que este site repete em todo lugar: revisão não é fraude. O motor reporta a estrutura e a evidência bruta; quem decide é você, com o contexto que o arquivo não carrega. É também por isso que a reespecificação da 1.17.0 derrubou a faixa alto brasileira de 38,2% para 10,0% — a maior queda das quatro células da tabela acima.
Detecção, por tipo de adulteração
Especificidade é a metade fácil: documento legítimo se acha aos milhares. A outra metade é difícil, porque nenhum corpus público rotula documentos como adulterados — os conjuntos acadêmicos de falsificação são forense de imagem em nível de pixel, e os corpora de PDF guardam arquivos malformados e maliciosos, que é outro problema. Um PDF malicioso ataca o leitor; um adulterado mente para ele.
Então os positivos foram construídos. 160 documentos
legítimos, publicados pelos próprios emissores e tirados das
duas populações acima, todos pontuando baixo e com uma
única revisão antes da edição — para não haver falso positivo
embutido no resultado — com oito edições conhecidas aplicadas a cada um,
gerando 1.006 arquivos adulterados. Que eles são
adulterações e não arquivos quebrados foi verificado de três formas:
qpdf --check devolveu 944 limpos, 62 com aviso e 0
quebrados, e todo aviso vem de uma fonte que já os tinha; as páginas
foram renderizadas e inspecionadas; e cada retângulo de cobertura foi
mirado num trecho de texto que o parser tinha retido, não numa faixa
chutada — caixa sobre espaço em branco não esconde nada.
| Como a adulteração foi feita | Detectado |
|---|---|
| Edição salva como revisão incremental — caixa sobre um valor, tarja preta, linha redigitada | 100% |
| Imagem enxertada na página | 100% |
| Edição seguida de remoção dos metadados | 100% |
| Composição por Form XObject — o que um editor de PDF online escreve | 89,4% |
Edição e reescrita do arquivo inteiro pelo qpdf |
71,1% |
| Edição e redestilação do arquivo inteiro pelo Ghostscript | 65,5% |
Medido, motor 1.23.0, 5 de agosto de 2026 — 1.006 arquivos adulterados a partir de 160 fontes legítimas, rebaixadas byte a byte idênticas, com 0 confusões: nenhuma das 160 fontes pontuava acima de baixo antes de ser editada. Primeira rodada na 1.18.0 (4 de agosto de 2026); remedido e idêntico até a casa decimal na 1.19.0, 1.22.0 e 1.23.0.
Não publicamos o número agregado, e isso é uma decisão, não um esquecimento. Uma média entre as oito operações trataria o fraudador como quem sorteia uniformemente entre elas. Ninguém mediu essa distribuição, ela é certamente falsa, e é exatamente o número que vira propaganda sem denominador. As linhas da tabela são a afirmação.
Em uma frase: a adulteração ingênua é pega sempre; a composição por Form XObject é pega em cerca de 9 de cada 10 casos; lavar o arquivo inteiro numa reescrita derruba a detecção para uns dois terços. A linha do Form XObject era 0,7% antes do motor 1.18.0 (4 de agosto de 2026) — o leitor de conteúdo parava na fronteira do formulário, então uma caixa branca desenhada dentro de um nunca era comparada com o texto embaixo. Isso era divulgado em todo laudo na época, o que era honesto e não tornava a falha mais barata.
E delimita o que o número significa: estas são as adulterações em que nós pensamos. Oito operações aplicadas por um script não são um adversário.
O resultado nulo: um arquivo gerado limpo
Todo número de detecção acima parte de um documento legítimo e aplica uma edição — a classe para a qual a forense de bytes existe. A classe que ninguém tinha medido é a que nunca foi editada: um documento diagramado e impresso do zero, já com conteúdo falso desde o primeiro byte. No Brasil isso tem nome e endereço: o holerite e o comprovante feitos num gerador, não adulterados a partir do original do banco.
Vinte deles foram construídos — 8 imitações de extrato e holerite
diagramadas em HTML e impressas pelo Chromium headless, 6 adulterações
já detectadas achatadas em imagem com pdftoppm, e 6
escritas byte a byte numa passada limpa, com string de produtor de
biblioteca de servidor ou sem string nenhuma.
0 de 20 pontuaram acima de baixo — motor 1.22.0, medido em 4 de agosto de 2026. O número mais duro está na classe achatada: os mesmos seis documentos, com o mesmo conteúdo falso, pontuam alto em 100 como edição incremental e baixo em 10 depois de uma única rasterização. Um comando lava para zero uma adulteração que era pega inteira.
Isso não é um defeito, e não vamos consertar com limiar.
Nada foi editado, então não há edição a encontrar. O motor se comportou
exatamente como projetado no mesmo teste: os subconjuntos de fonte do
Chromium e os pares /ID novos saíram como info,
pontuando zero, que é precisamente para o que serviu a recalibração da
1.17.0 — um motor anterior à 1.17 teria “pego” as oito impressões do
Chromium e estaria errado sobre o motivo.
O que isso significa na prática é uma regra de escopo, não uma ressalva: este motor responde este arquivo foi alterado depois de feito. Ele não responde este documento é verdadeiro. Um arquivo gerado limpo é a fronteira entre as duas perguntas, e a resposta da segunda tem de vir de outro lugar — uma linha de base do emissor, o Open Finance, um telefonema para o RH. Se linhas de base privadas do emissor pegam essa classe ainda não foi medido, e é o próximo benchmark.
A única família que sobrevive à lavagem do arquivo
A redaction-exposure pergunta se o texto que alguém quis
remover continua legível embaixo da tarja desenhada sobre ele. Ela pesa
de forma desproporcional por um motivo: é a única família de sinal que
sobrevive a uma reescrita do arquivo inteiro — a reescrita destrói o
histórico de revisões que todas as outras leem, mas texto embaixo de uma
caixa continua sendo texto embaixo de uma caixa. Ela respondeu por
38,3% de todas as detecções no conjunto adulterado, e
por cerca de 41% do que sobra depois de uma reescrita.
Ela também foi, por um tempo, nossa pior fonte de falso positivo — e corrigi-la valeu todo esse trabalho justamente pelo parágrafo acima. O método não envolveu ler nenhum documento pelo conteúdo: renderize a página e olhe os pixels onde o trecho supostamente escondido está. Texto embaixo de uma caixa é um bloco chapado; texto que não está escondido tem o contraste de glifos. Em 1.693 trechos cobertos, nada ficou entre 0,7 e 12,2 — o limiar é um vazio nos dados, não uma constante calibrada.
| Motor | Web brasileira | .gov americano |
O que mudou |
|---|---|---|---|
| 1.18.0 · 4 ago 2026 | 17,0% | 5,1% | O ponto de partida |
| 1.19.0 · 4 ago 2026 | 49/743 — 6,6% | 19/985 — 1,9% | Caminhos de recorte eram ignorados (85% dos documentos que disparavam definem um); um trecho coberto só de espaços era reportado como texto coberto |
| 1.22.0 · 5 ago 2026 | 46/742 — 6,2% | 18/985 — 1,8% | Recortes desenhados com linhas, e não com retângulos, passaram a ser reconhecidos |
| 1.23.0 · 5 ago 2026 | 29/742 | 16/985 | Imagem desenhada sobre texto deixou de pontuar |
A detecção fica inalterada em cada um desses passos — a tabela por tipo de adulteração foi remedida depois de cada um e é idêntica até a casa decimal, com 0 adulterações perdidas. E o achado que mais importa para quem lê um laudo: nesses 1.728 documentos publicados, esta família não encontrou nenhuma tarja mal feita, em nenhuma das duas populações. Cerca de 9 em cada 10 dos disparos originais eram comprovadamente errados ou vazios.
O que sobra está declarado, não escondido. O resíduo depois da 1.19.0
eram 18 documentos americanos: doze falsos positivos genuínos, vindos de
recortes não retangulares que este parser não modela, e seis que
escondem texto de verdade — todos artefato de diagramação, rótulo de
gráfico atrás do preenchimento, mapa sobre o próprio parágrafo de
rascunho, rodapé de modelo. O rebaixamento da imagem-cobertura na 1.23.0
foi decidido do mesmo jeito: nas 1.006 adulterações, imagens cobrindo
texto responderam por zero detecções, contra 385 das
caixas preenchidas — então a observação continua no laudo como
info e deixa de pontuar.
O verificador de tarja roda
exatamente esta família num arquivo que você tem em mãos.
O mesmo número, por ferramenta
Uma taxa de falso positivo sobre a população inteira é o número certo para decidir se vale contratar isto. É o número errado para ler um laudo específico, porque a taxa não é espalhada por igual — ela é, em boa parte, uma propriedade do software que escreveu o arquivo. Dentro de uma mesma população, a taxa de disparo de um sinal foi de 0% a 100% conforme o programa que gerou o documento. É isso que um achado anterior — um corpus muito mais barulhento que outro — acabou sendo: efeito de produtor vestido de efeito de origem.
Por isso a versão por ferramenta do número principal desta página já
existe: a referência de
strings de produtor lista as 40 strings /Producer
frequentes o bastante naquele corpus para terem sido medidas, e a última
coluna dela é a nossa própria taxa de falso positivo sobre a
saída legítima daquela ferramenta, nunca uma taxa de fraude.
Todo documento por trás dela foi publicado pela organização que o fez,
então lá também cada pontuação acima de baixo conta contra nós.
Mesmo corpus, pontuado no motor 1.22.0: 432 strings de produtor distintas nos 1.728 documentos, 252 delas aparecendo uma única vez — o que é o fato mais útil daquela página. A cauda longa é o caso normal, e uma string que você nunca viu não é evidência de nada.
O que ainda não foi medido
Uma página de medições que lista só as favoráveis é propaganda. Estas são as perguntas em que a resposta honesta hoje é que não temos número.
- Se linhas de base do emissor pegam um arquivo gerado limpo. É a contramedida que vendemos para o resultado nulo acima, e ela não passou por benchmark. Vai ser medida e publicada de um jeito ou de outro.
- Uma taxa de falso positivo de população inteira no motor atual. O que existe é a projeção da 1.17.0 acima, mais as remedições por família na 1.19.0, 1.22.0 e 1.23.0. A rodada completa é reproduzível a partir dos manifestos que sobreviveram e não foi feita.
- Detecção contra um adversário real. Os positivos são construídos por um script a partir de oito operações que nós escolhemos. Nada aqui diz como o motor se sai contra quem lê esta página.
-
Se um falsário esconderia texto em uma camada. Um
PDF pode carregar conteúdo em um grupo de conteúdo opcional
desligado por padrão: está no arquivo e não está na tela. O motor
1.28.0 lê e guarda esses trechos e não julga nenhum, e a mesma versão
estabeleceu que
glyph-anomalies,br-identifier-checksumerunning-balance-breakleem esse texto como se estivesse na página. Medido nos mesmos 1.727 documentos em 06/08/2026: 85 declaram conteúdo opcional (4,92%), 3 têm um grupo desligado por padrão (0,17%) e nenhum pinta texto dentro de um — nesta população, nenhum número acima é afetado e as três famílias nunca leram uma linha oculta. O que isso não resolve é o que interessa: são documentos em que ninguém estava escondendo nada. Um resultado nulo em arquivo publicado é evidência sobre acidente, não sobre adversário. -
Metadado de imagem se apaga em um comando.
exiftool -all=remove toda identidade e todo carimbo de tempo que o motor de imagem encontra. Uma coincidência é evidência forte; uma ausência não é evidência nenhuma, e todo achado de imagem diz isso no próprio texto. -
O motor de Office não renderiza o documento. Texto
escondido por estar na cor do fundo, com tamanho zero, ou coberto por
uma forma não é detectado lá — a passagem de ordem de pintura que faz
a
redaction-exposurefuncionar ainda não tem equivalente em OOXML. É o maior buraco no meio mais novo, e ele é declarado em todo laudo de Office em vez de ficar subentendido. - PDF criptografado é declarado, não atacado. Um arquivo protegido por senha é reportado como “não analisado no conteúdo”, e não varrido como texto cifrado e reportado como limpo.
O número que ninguém neste mercado publica
O cenário concorrente foi lido diretamente em 31 de julho de 2026: Resistant AI, Inscribe, Snappt, Ocrolus, Truv, Veryfi, DocuClipper, VerifyPDF e HTPBE. Vários publicam um número de acurácia na casa dos 99% sem metodologia publicada, sem denominador declarado e sem verdade de referência — e é por isso que nenhum desses números é repetido aqui.
Nenhum deles publica com que frequência o sistema aponta um documento legítimo. Essa ausência é a razão de esta página existir. Não é uma afirmação de que nosso motor é melhor que os deles: vários fazem coisas que este não faz, numa escala para a qual este não foi construído. É uma afirmação sobre o que dá para conferir. Um número de detecção sem denominador não se discute, só se acredita; uma taxa de falso positivo sobre uma população pública, nomeada e não curada pode ser reproduzida por qualquer um que baixe os mesmos manifestos.
Vale para o mercado brasileiro em particular: o concorrente mais próximo daqui tem centro de gravidade em consulta de base de dados, e uma taxa de erro sobre documento legítimo é justamente o que a área de risco precisa para dimensionar quanta revisão manual um fluxo vai gerar.
O que fazer com esta página. Rode pelo verificador gratuito um documento cuja resposta você já conhece — sem conta, nada é armazenado — e compare o que ele diz com as taxas acima. Depois leia o que cada família de sinal realmente olha e como o serviço é construído e operado, que é a outra metade de uma análise de fornecedor.
As fontes de cada número desta página são arquivos versionados no
repositório do produto: as notas de release do motor em
CHANGELOG.md (1.17.0, 1.18.0, 1.19.0, 1.22.0, 1.23.0,
1.27.0), a seção “Honest gaps” do STATUS.md e a compilação
de evidências em docs/EVIDENCE.md §5.2 para a leitura de
mercado acima. Achados por documento não são publicados: as regras do
corpus apagam os arquivos depois da rodada, e publicar uma lista de nomes
de arquivo de organizações ao lado de uma faixa de risco não é algo de
que uma medição precise.