O valor pode ser um número negativo: regras de negócios separadas e regras de tipo

Escreva todos os campos de valor como `minimum: 0`, o que parece muito rigoroso superficialmente, mas bloqueará o registro normal de reembolso. Se o valor foi extraído para um número e se números negativos são permitidos neste negócio são duas questões. Você deve primeiro confirmar o significado do documento e depois escrever as regras de escopo.

Se você estiver fazendo uma extração estruturada de pedidos, faturas ou documentos financeiros, o campo de valor costuma ser o local mais sujeito a erros. Muitas pessoas escreverão todos os valores como minimum: 0, o que parece muito rigoroso, mas os registros normais de reembolso serão rejeitados por causa disso.

Se o valor foi extraído para um número e se números negativos são permitidos neste negócio são duas questões diferentes. Primeiro confirme o que representa o sinal negativo no documento e, em seguida, determine as regras de intervalo, de modo a garantir que o tipo esteja correto sem danificar acidentalmente dados razoáveis.

Este artigo utiliza amostras sintéticas para demonstrar o método de processamento. O código foi verificado com exemplos em ambiente isolado; isso não representa uma garantia de todos os arquivos reais ou do desempenho do produto. Antes de processar documentos importantes, guarde os originais e revise-os de acordo com os limites e itens de aceitação do texto.

O valor pode ser negativo? Conclusão de uma frase

Se o valor pode ser negativo depende do acordo da empresa, e não do tipo de campo em si. Defina primeiro o significado do sinal negativo e depois deixe o tipo determinar as restrições.

sua situaçãoPráticas recomendadasrazão
Os reembolsos no acordo são expressos como valores negativosO campo cobrança é restrito a valores não negativos, sendo permitidos valores negativos para reembolsos.Símbolos são semântica de negócios e não podem ter tamanho único
O sistema usa "valor positivo mais tipo de reembolso"O valor é uniformemente positivo e o campo de tipo é usado para distinguir reembolsosAmbos os métodos podem ser estabelecidos, mas apenas um pode ser selecionado para a mesma interface.
É necessária uma quantia estritamente positivaUse exclusiveMinimum em vez de minimum: 0minimum contém limites e passará valores zero
Sinais negativos nas fontes podem estar faltando ou mal colocadosSalve o fragmento de texto original e revise-o manualmente. Não tome diretamente o valor absoluto.A autocorreção pode mascarar erros reais

Primeiro defina o que o sinal negativo representa

O acordo de síntese neste artigo estipula que os encargos ordinários não são negativos e os reembolsos são expressos em montantes negativos. Os sistemas reais também podem usar um método de contabilidade de "valor positivo mais tipo de reembolso". Ambos os métodos podem ser estabelecidos, mas você não pode confiar que os leitores adivinharão na mesma interface.

O limite do ponto zero aqui é um protocolo de amostra e não um padrão unificado no setor financeiro.

Deixe o tipo determinar as restrições

minimum do esquema JSON contém limites, exclusiveMinimum não contém limites. Se o requisito de negócio for estritamente positivo, minimum: 0 não poderá ser usado.

Liste os cenários que permitem valores zero antes de selecionar palavras-chave para evitar interpretar mal itens gratuitos, baixas ou estimativas como erros.

from jsonschema import Draft202012Validator

schema = {
    "type": "object", "required": ["kind", "amount"],
    "additionalProperties": False,
    "properties": {"kind": {"enum": ["charge", "refund"]},
                   "amount": {"type": "number"}},
    "allOf": [
        {"if": {"properties": {"kind": {"const": "charge"}}},
         "then": {"properties": {"amount": {"minimum": 0}}}},
        {"if": {"properties": {"kind": {"const": "refund"}}},
         "then": {"properties": {"amount": {"exclusiveMaximum": 0}}}}
    ]
}
v = Draft202012Validator(schema)
valid = lambda x: not list(v.iter_errors(x))
assert valid({"kind": "charge", "amount": 0})
assert valid({"kind": "refund", "amount": -12.5})
assert not valid({"kind": "refund", "amount": 12.5})
assert not valid({"kind": "charge", "amount": True})
assert not valid({"amount": 12.5})

O exemplo depende de jsonschema e é verificado de acordo com o Draft 2020-12. Não realiza conversão de moeda, nem verifica a relação entre itens e totais.

Os cálculos de moeda exigem precisão clara e estratégias de arredondamento. Só porque os valores passam na verificação do esquema, você não pode usar números de ponto flutuante para acumular à vontade.

Ao relatar um erro, você precisa indicar o contexto de negócios

Quando a verificação falha, a mensagem de erro deve ajudar as pessoas a determinar a causa, em vez de apenas indicar"ilegal".

observarO processamento aquiAinda preciso verificar
O reembolso é positivorejeitarO símbolo está faltando ou a fonte usa outro protocolo?
A cobrança é zeroaceitar estruturaÉ um projeto gratuito?
O valor é uma stringtipo de rejeiçãoSinal de posição de milhares, moeda e regras decimais
Tipo ausenterejeitarAdivinhe o tipo de documento sem depender do sinal de valor

Não use valores absolutos automáticos para encobrir erros

OCR com travessões ausentes, sinais negativos em movimento durante a tradução ou empresas que usam convenções de sinais opostas podem se manifestar como a mesma anomalia.

Ligar diretamente paraabs() eliminaria importantes pistas de diagnóstico. Uma abordagem mais segura é salvar os fragmentos de texto originais, números de página e strings antes de analisar e, em seguida, decidir se deseja extrair novamente ou revisar manualmente.

Verifique a quantidade e o tipo juntos na hora da entrega

Ao usar OmniDoc (portal de produtos) para processar documentos contendo valores, você pode usar esta tabela de regras como parte da aceitação pós-tradução: não apenas verifique se os números foram perdidos, mas também se o contexto de reembolsos, créditos, etc.

As ferramentas podem ajudar a completar a tradução, mas o acordo de valor ainda deve estar claro para o lado comercial.

📊 Comparação principal

práticaSignificado do sinal negativoAdequado para a cenaObservação
Reembolso com valor negativoUm sinal negativo indica um reembolsoO acordo concordou em usar símbolos para distinguir direçõesO campo de cobrança deve ser restrito a valores não negativos e o campo de reembolso permite valores negativos.
Valor positivo mais tipo de reembolsoO sinal negativo não tem significado comercialO sistema distingue os reembolsos por tipo de campoO valor é uniformemente positivo e o tipo deve ser verificado ao mesmo tempo.
minimum: 0Contém valor zeroValores que permitem valores zeroIrá liberar valores zero, não adequados para cenários estritamente positivos
exclusiveMinimum: 0Não contém valor zeroÉ estritamente necessário que seja um valor positivoNecessidade de confirmar que itens gratuitos ou estornos não serão rejeitados por engano

🎯 Qual método é adequado para você?

Se o seu contrato usar um valor negativo para indicar um reembolso

  • Defina restrições não negativas para o campo de cobrança, permita valores negativos para o campo de reembolso e escreva o acordo no documento.

Se o seu sistema usa "valor positivo mais tipo de reembolso"

  • O campo valor deve ser uniformemente positivo e o campo tipo deve ser verificado ao mesmo tempo para evitar julgar a natureza do documento apenas olhando os números.

Se o valor da necessidade de negócios for estritamente positivo

  • Use exclusiveMinimum e verifique primeiro se itens gratuitos, descontos e estimativas não serão rejeitados por engano.

Se o sinal negativo do arquivo de origem for perdido

  • Mantenha os fragmentos de texto originais, números de páginas e sequências pré-analisadas e revise-os manualmente antes de inseri-los no banco de dados. Não tome diretamente o valor absoluto.

❓ Perguntas frequentes (FAQ)

1. Qual é a diferença entre minimum e exclusiveMinimum?

minimum contém valores limite, exclusiveMinimum não contém valores limite. Se o requisito de negócio for estritamente positivo, minimum: 0 não poderá ser usado.

2. Se passar na verificação do esquema, o valor estará correto?

incerto. O exemplo não realiza conversão de moeda, nem verifica a relação entre itens e totais; os cálculos monetários também exigem estratégias claras de precisão e arredondamento.

3. Por que o valor não pode ser acumulado diretamente usando números de ponto flutuante?

Os cálculos de moeda exigem precisão clara e estratégias de arredondamento. Números de ponto flutuante não podem ser usados para acumular aleatoriamente apenas porque os valores passam na verificação do esquema.

4. Ao encontrar uma exceção de sinal negativo, você pode obter diretamente o valor absoluto?

Não recomendado. Palavras faltantes no OCR, sinais negativos em movimento na tradução ou convenções de símbolos comerciais diferentes podem causar anormalidades. A tomada direta do valor absoluto eliminará as pistas de diagnóstico.

📝 Resumo

A chave para o campo de valor é primeiro confirmar o que o sinal negativo representa e, em seguida, deixar o tipo determinar as restrições. Ao separar regras de negócios e regras de tipo, você não pode rejeitar reembolsos por engano nem perder erros reais.

Experimente agora: carregue o documento para iniciar a tradução, mantendo o layout original

Referências: Restrições numéricas do esquema JSON

Atualizado em 2026-11-14