Todos os dígitos foram reconhecidos. Mesmo assim, o subtotal acaba no registo de dados como montante final. Erros como este parecem arrumados: JSON válido, campos preenchidos, nenhuma mensagem de erro a vermelho. O que falta está na relação entre número, rótulo e linha da tabela.
A Mistral, na sua documentação de OCR , descreve, entre outras coisas, texto estruturado, formatos de tabela e coordenadas de blocos. Document Annotations podem, adicionalmente, converter informação num formato JSON predefinido. Estes componentes resolvem partes diferentes do percurso entre o documento e a aplicação.
Quatro níveis para um único campo
Primeiro, os caracteres têm de ser lidos. Depois, a aplicação precisa da sua posição e ordem. A seguir, tem de reconhecer que campo um valor descreve. Por fim, entram as relações factuais: o montante final corresponde às linhas de artigos indicadas no exemplo e ao desconto declarado?
Um erro em qualquer um destes níveis pode acabar por produzir o mesmo número errado. É por isso que um texto de saída completo, por si só, não é uma medida de qualidade suficiente. Para um valor importante, deve preservar-se o caminho de volta até ao local onde foi encontrado.
Isto nem sempre tem de ser uma marcação gráfica elaborada. Um identificador do documento, a página e uma descrição inequívoca do campo já ajudam. Se forem usadas coordenadas, têm de pertencer à página e à renderização certas. Um retângulo sem uma versão de documento claramente identificada pode, ele próprio, causar confusão mais tarde.
Cria uma fatura cujo conteúdo conheces
Para um teste controlável, concebes o teu próprio PDF com duas linhas de artigos. O artigo A contém duas unidades a dez euros cada, o artigo B uma unidade a quinze euros. Por baixo estão um desconto de cinco euros e um montante final de trinta euros. Falta propositadamente um número de encomenda. Os valores servem apenas de explicação técnica, não de modelo para fins fiscais.
Antes da extração, anota os valores esperados e o local onde se encontram. Numa segunda versão, altera apenas a disposição: o desconto e o total ficam agora mais perto das linhas de artigos. Assim, poderás mais tarde perceber se a atribuição usa o rótulo ou depende de uma posição casual.
Deixa primeiro que uma via de OCR externa adequada forneça o texto e a estrutura. Uma extração a jusante deve devolver o montante final, a moeda, o número de encomenda e a localização no documento. O número de encomenda em falta é mantido como desconhecido. Um número de substituição inventado seria um erro, mesmo que preenchesse completamente o formato de saída.
Uma pequena verificação factual fora do modelo
A relação aritmética simples do exemplo sintético pode ser verificada de forma independente. Para montantes decimais como estes, usa, por exemplo, Decimal em vez de valores binários de vírgula flutuante. Este exemplo em Python, escrito por nós, verifica apenas o cálculo didático que definimos:
from decimal import Decimal
positionen = [
(Decimal("2"), Decimal("10.00")),
(Decimal("1"), Decimal("15.00")),
]
rabatt = Decimal("5.00")
ausgewiesen = Decimal("30.00")
berechnet = sum((menge * preis for menge, preis in positionen), Decimal("0")) - rabatt
assert berechnet == ausgewiesen
Uma verificação aritmética bem-sucedida mostraria apenas que os números aqui usados batem certo entre si. Não prova que o OCR tenha retirado esses números do documento certo. É por isso que a verificação aritmética e a verificação da origem continuam a ser dois passos diferentes.
Numa aplicação real, tens também de observar as regras do tipo de documento específico. Impostos, arredondamentos, moedas e casos especiais não podem ser deduzidos desta fatura simplificada. A tarefa aqui é apenas transferir uma atribuição conhecida de forma rastreável.
A incerteza pertence ao contrato de entrega
Define explicitamente o que acontece com um dígito ilegível ou uma contradição. Um registo de dados pode conter o valor, o local onde foi encontrado e um estado de esclarecimento. Só uma transferência confirmada desencadeia então o passo seguinte previsto.
Uma instrução adequada: «Não acrescentes informação em falta. Para cada montante que transferires, remete para o campo rotulado. Regista separadamente totais contraditórios. Produz apenas uma pré-visualização, não um lançamento contabilístico.»
O teste concreto vai, assim, além da simples leitura do PDF. Verificas separadamente os caracteres, a estrutura, o significado dos campos e uma relação conhecida. É exatamente isto que cria um caminho utilizável para dados que não só parecem arrumados como também remetem para o original.
Fontes e estado
Fontes à data de 25 de outubro de 2026. Processador OCR do Document AI · Document Annotations.

