Orux AI / Notas sobre modelos
Faturas: confira a conta antes de usar o DeepSeek
Confira linhas de faturas com Python antes de uma redação opcional no DeepSeek: teste local real, centavos inteiros e aprovação de pagamento separada.

Neste artigo
Confira a conta de cada linha antes de pedir uma explicação ao DeepSeek
Uma fatura de evento pode fechar perfeitamente e ainda estar errada. No exemplo abaixo, as três linhas informadas pelo fornecedor somam $234.00, exatamente o total declarado na fatura. Mesmo assim, uma linha cobra $80.00 por duas unidades de $45.00 cada. Quantidade multiplicada pelo preço unitário resulta em $90.00, levando o total calculado de forma independente a $244.00. A concordância entre dois totais copiados não é uma verificação independente.
Este guia entrega a quem coordena eventos um verificador Python executável para encontrar essa divergência antes de preparar uma solicitação ao DeepSeek V4.1 Flash. O resultado útil é um relatório de exceções por linha e um pequeno briefing de redação que o programa se recusa a produzir até a aritmética passar. Todos os exemplos são despesas fictícias de uma conferência, e os resultados vêm da execução local do programa. Nenhum modelo gerou ou aprovou uma fatura aqui.
O DeepSeek pode ser uma etapa opcional de redação depois que uma pessoa resolver a divergência. Ele não deve decidir qual preço foi acordado com o fornecedor, aprovar pagamento nem substituir silenciosamente uma fatura. Documento original, contrato e esclarecimento continuam sendo as evidências dessa decisão. Uma multiplicação correta comprova uma relação aritmética, não a entrega de um serviço nem a autorização de uma cobrança.

Figura: caso sintético em USD, não uma fatura real de fornecedor.
A divergência de $10 escondida por um total que confere
A exportação sintética contém crachás, sinalização de salas e serviço de legendagem. As quantidades representam unidades inteiras de serviço. O verificador usa o mesmo esquema de cinco colunas em cada linha e um total de fatura fornecido separadamente. Esse valor separado importa: comparar a soma com ela mesma produziria outra conferência tranquilizadora, porém inútil.
| Linha | Quantidade | Valor unitário | Valor informado da linha | Cálculo independente |
|---|---|---|---|---|
| L1: Crachás | 40 | USD 2.50 | USD 100.00 | USD 100.00 |
| L2: Sinalização de salas | 3 | USD 18.00 | USD 54.00 | USD 54.00 |
| L3: Serviço de legendagem | 2 | USD 45.00 | USD 80.00 | USD 90.00 |
| Total | — | — | USD 234.00 | USD 244.00 |
Deslize para os lados para ver toda a tabela.
Isso não significa automaticamente que faltam $10 no pagamento. Talvez o fornecedor pretendesse um desconto na linha; talvez a quantidade ou o valor unitário esteja errado. O programa não consegue escolher entre essas explicações. Seu resultado é mais restrito e mais útil: L3 não cumpre a regra declarada de quantidade vezes preço unitário, então a fatura precisa de esclarecimento antes de o fluxo criar um briefing comum de redação.
Guarde as duas versões se o fornecedor corrigir a exportação. O conjunto de teste corrigido mais adiante muda L3 para USD 90.00 e o total para USD 244.00 ao mesmo tempo. É um reparo construído deliberadamente para testar, não uma afirmação sobre a intenção de um fornecedor real. Em uma fatura real, quem revisa ainda precisa da correção efetivamente aprovada.
Defina um formato monetário em vez de adivinhar a localidade
O código aceita valores USD não negativos, com exatamente duas casas decimais, e quantidades inteiras positivas. Converte as strings de valores em centavos inteiros e usa multiplicação e adição de inteiros. Não há comparação em ponto flutuante binário nem tolerância que esconda um centavo de diferença. É um contrato de entrada intencionalmente pequeno, não um parser universal de faturas.
Valores como 2.500, -2.50, 234,00 e notação científica são rejeitados. Espaços no início ou no fim dos campos numéricos também são rejeitados. Uma exportação europeia não está errada só porque usa outra convenção; ela precisa de uma etapa separada e revisada de normalização antes de entrar neste verificador específico. Não adivinhe se um separador indica decimais ou milhares.
A documentação CSV do Python explica as diferenças de delimitadores e regras de aspas. O programa usa o parser CSV em vez de dividir linhas por vírgulas e abre o fluxo em memória com o tratamento de quebras de linha descrito na documentação. Uma descrição entre aspas contendo vírgula pode permanecer em um único campo. Colunas inesperadas e identificadores de linha duplicados são rejeitados, não ignorados silenciosamente.
Quantidades fracionárias, impostos, descontos, frete, várias moedas e notas de crédito estão fora desse contrato. Se a fatura contiver esses componentes, pare e defina as regras aritméticas correspondentes antes de usar o resultado. Remover linhas não suportadas para obter aprovação anularia a finalidade da conciliação.
Execute o verificador completo localmente
Salve o código abaixo como check_invoice.py e rode python3 check_invoice.py. Ele usa a biblioteca padrão do Python, não precisa de API Key e não faz requisições de rede. Os dados de teste e as asserções fazem parte da entrega: você pode reproduzir a divergência oculta e o caso corrigido sem comprar uma chamada de modelo.
"""Offline synthetic invoice check. No model/API request; USD integer cents only."""
import csv
import io
import json
import re
HEADER = ['line_id', 'description', 'qty', 'unit_usd', 'line_usd']
CSV = '''line_id,description,qty,unit_usd,line_usd
L1,Name badges,40,2.50,100.00
L2,Room signage,3,18.00,54.00
L3,Captioning service,2,45.00,80.00
'''
def cents(value):
if not isinstance(value, str) or not re.fullmatch(r'[0-9]+\.[0-9]{2}', value):
raise ValueError('Use unsigned USD amounts with exactly two decimals')
whole, fraction = value.split('.')
return int(whole) * 100 + int(fraction)
def check(text, invoice_total):
reader = csv.reader(io.StringIO(text, newline=''), strict=True)
if next(reader, None) != HEADER:
raise ValueError('Unexpected CSV header')
seen, rows, issues = set(), [], []
for fields in reader:
if len(fields) != len(HEADER):
raise ValueError('Unexpected column count')
ident, description, quantity, unit, quoted = fields
if not ident or ident in seen or not description.strip():
raise ValueError('Missing or duplicate line identity')
if not re.fullmatch(r'[0-9]+', quantity) or int(quantity) < 1:
raise ValueError('Quantity must be a positive whole number')
seen.add(ident)
expected, stated = int(quantity) * cents(unit), cents(quoted)
rows.append(dict(line_id=ident, expected_cents=expected, stated_cents=stated))
if expected != stated:
issues.append(dict(line_id=ident, expected_cents=expected, stated_cents=stated))
if not rows:
raise ValueError('No invoice lines')
declared = cents(invoice_total)
expected_total = sum(x['expected_cents'] for x in rows)
stated_sum = sum(x['stated_cents'] for x in rows)
return dict(currency='USD', line_count=len(rows), line_issues=issues,
expected_total_cents=expected_total, stated_line_sum_cents=stated_sum,
declared_total_cents=declared, declared_matches_lines=declared == stated_sum,
eligible_for_draft=not issues and declared == expected_total)
def draft_brief(report):
if not report['eligible_for_draft']:
raise ValueError('Resolve arithmetic before creating a drafting brief')
return {k: report[k] for k in ['currency', 'line_count', 'expected_total_cents']}
def planned_microcredits(inputs, outputs, rate_in, rate_out):
if any(type(x) is not int or x < 0 for x in [inputs, outputs, rate_in, rate_out]):
raise ValueError('Planning quantities and rates must be nonnegative integers')
numerator = inputs * rate_in + outputs * rate_out
return (numerator + 999999) // 1000000
if __name__ == '__main__':
bad = check(CSV, '234.00')
assert bad['declared_matches_lines'] and not bad['eligible_for_draft']
assert bad['expected_total_cents'] - bad['declared_total_cents'] == 1000
try:
draft_brief(bad)
except ValueError:
pass
else:
raise AssertionError('Bad invoice became a drafting brief')
fixed = check(CSV.replace('45.00,80.00', '45.00,90.00'), '244.00')
assert draft_brief(fixed) == dict(currency='USD', line_count=3, expected_total_cents=24400)
rejected = 0
for text, total in [
(CSV.replace('L2,', 'L1,'), '234.00'),
(CSV.replace(',40,', ',0,'), '234.00'),
(CSV.replace(',40,', ',1e2,'), '234.00'),
(CSV.replace('2.50', '2.500'), '234.00'),
(CSV.replace('2.50', '-2.50'), '234.00'),
(CSV.replace('L1,Name badges,', 'L1,Name badges,EXTRA,'), '234.00'),
(CSV, '234,00'),
]:
try:
check(text, total)
except ValueError:
rejected += 1
else:
raise AssertionError('Invalid fixture accepted')
rates = {'catalog_low': (18333360, 73333440), 'catalog_high': (36666720, 146666880)}
plans = {key: planned_microcredits(1000, 300, *value) for key, value in rates.items()}
assert plans == {'catalog_low': 40334, 'catalog_high': 80667}
print(json.dumps(dict(bad=bad, corrected_brief=draft_brief(fixed),
negative_fixtures_rejected=rejected, planned_microcredits=plans), indent=2))O script retorna deliberadamente um relatório para divergências aritméticas, mas gera um erro para entradas malformadas. São situações diferentes: uma fatura compreensível pode conter uma discordância que exige investigação; linhas malformadas não podem ser interpretadas com confiança sob o contrato declarado. Uma importação de produção também precisaria de limites de tamanho, controles de acesso, convenções contábeis e revisão operacional adequados ao ambiente.
Leia o relatório sem transformá-lo em decisão de pagamento
O resultado executado tem declared_matches_lines: true e eligible_for_draft: false. O total esperado é de 24.400 centavos, enquanto o declarado e a soma das linhas informadas são de 23.400 centavos. A exceção identifica L3 com 8.000 centavos informados e 9.000 esperados. Esses valores exatos, em vez de um alerta genérico, explicam por que o total aparentemente consistente foi bloqueado.
O programa também tentou criar um briefing a partir do relatório incorreto e confirmou que a função o recusou. Com os dados explicitamente corrigidos, retornou {"currency":"USD","line_count":3,"expected_total_cents":24400}. Esse objeto compacto é a transferência local bem-sucedida. Não é resposta de modelo, prova de conformidade tributária nem autorização para pagar USD 244.00.

Figura: resultados do teste Python local, não uma saída do modelo DeepSeek.
Sete casos negativos foram de fato rejeitados: identificador duplicado, quantidade zero, quantidade em notação exponencial, precisão monetária excessiva, preço unitário negativo, coluna extra e total com vírgula decimal. É uma cobertura direcionada ao contrato do exemplo, não prova de que toda exportação de fornecedor é segura. Erros de sintaxe CSV também podem interromper a leitura; o script não promete recuperação automática de arquivos arbitrariamente danificados.
Dê ao DeepSeek uma tarefa resolvida e limites explícitos
Depois que o fornecedor ou a pessoa responsável pela revisão resolver a divergência, a coordenação pode pedir ao DeepSeek uma confirmação neutra de recebimento, usando somente fatos aprovados. Uma solicitação proposta seria: “Redija uma confirmação curta de que recebemos a fatura USD corrigida, com três linhas e total conciliado de 244.00. Não diga que o pagamento foi aprovado ou agendado. Peça à pessoa revisora que confirme o número de referência antes do envio.” Essa solicitação não foi executada aqui.
O formulário atual da Orux expõe messages, max_tokens e uma opção de resposta em objeto JSON para deepseek-v4.1-flash. Isso confirma os controles disponíveis, não a execução bem-sucedida desta tarefa de redação de fatura. Use o alias exato da página do modelo na Orux. O nome no serviço próprio da DeepSeek é outro identificador de serviço e não deve ser copiado como se fosse um alias Orux.
A referência de Chat Completions da DeepSeek documenta o relatório de uso. Em uma requisição executada, conte o consumo efetivamente retornado; nem caracteres CSV nem quantidade de linhas da fatura determinam o uso de tokens. Se precisar de um objeto JSON na resposta, valide seus campos e valores depois. Uma opção de formulário ou uma resposta de aparência educada não substitui essa verificação.
Como leituras complementares, o caso JSON do museu (em inglês) examina a validação de saídas, enquanto o guia de resumo de suporte (em inglês) prepara outro tipo de entrada restrita. Este fluxo de fatura acrescenta conciliação aritmética, sem repetir os controles de extração ou privacidade desses artigos.
Compare as duas linhas de tarifa publicadas na Orux
Em 2 de novembro de 2026, o catálogo público contém duas linhas dailytimeband para este alias. A tabela usa apenas entrada sem cache e saída. Não presume que repetir uma fatura garantirá preço de cache, nem deduz pelo relógio qual faixa se aplica à conta. Confirme a cotação atual e as condições aplicáveis antes de autorizar uma requisição. A tabela mantém o ponto decimal do catálogo.
| Condição publicada | Credits de entrada / 1 milhão de tokens | Credits de saída / 1 milhão de tokens | Planejado: 1.000 de entrada + 300 de saída |
|---|---|---|---|
dailytimeband=offpeak | 18.33336 | 73.33344 | 0.040334 Credits |
dailytimeband=peak | 36.66672 | 146.66688 | 0.080667 Credits |
Deslize para os lados para ver toda a tabela.
A última coluna é um cálculo de planejamento, não uso medido nem promessa de cobrança. O programa arredonda cada requisição planejada para cima em unidades inteiras de micro-Credit. Mil requisições com exatamente essas quantidades planejadas exigiriam, nessa convenção, um orçamento de 40,334 ou 80,667 Credits. Uso real, condições ou tentativas adicionais alteram o resultado. Nenhuma cobrança de conta foi medida para este artigo.
A página de preços do fornecedor descreve versões de modelo e horários do próprio serviço. Essas condições não estabelecem o horário nem a cotação de conta na Orux. Não afirmamos que o fluxo supera outro modelo em precisão de faturas, nem que um serviço seja mais barato em qualquer condição. O calculador torna um plano explícito inspecionável antes de qualquer requisição opcional.
Mantenha conciliação, redação e aprovação em registros separados
Guarde o CSV original, seu total declarado, o relatório de exceções e a correção aprovada. Execute o verificador novamente nos dados corrigidos e registre o briefing exato entregue à etapa opcional de modelo. Assim permanecem distintas a informação do fornecedor, a conta do programa e a aprovação humana. Uma confirmação gerada não deve sobrescrever nenhum desses registros.
Se a redação introduzir data de pagamento, dados bancários, referência ou aprovação não autorizados, rejeite o acréscimo e esclareça com a pessoa responsável. O guia não apresenta exemplo gerado nem afirma que um prompt específico impeça esses acréscimos. A contribuição concluída é a barreira aritmética local com evidências reproduzíveis, pronta para uma etapa de comunicação revisada separadamente.
Preços e formulário verificados em 2026-11-02. Fontes: modelo Orux, catálogo público, Python CSV, tipos numéricos Python, referência DeepSeek, preços DeepSeek.
FAQ
Um total de fatura que confere prova que todas as linhas estão corretas?
Não. O total demonstrado coincide com as linhas informadas mesmo com L3 violando quantidade vezes preço unitário. Compare valores de linha calculados de forma independente e o total geral. O programa identifica essa contradição exata; uma pessoa precisa determinar qual valor de origem deve ser corrigido.
Foi o DeepSeek que encontrou a divergência de USD 10?
Não. Foi o programa Python local, sem chamar modelo algum. O DeepSeek é uma etapa opcional posterior de redação, com controles Orux atuais verificados e tarifas de planejamento datadas. O artigo não avalia precisão em faturas, qualidade, latência nem confiabilidade do modelo.
Posso usar para impostos ou várias moedas?
Não sob o contrato atual. Ele cobre quantidades inteiras positivas e valores USD sem sinal, com duas casas decimais, sem lógica de impostos, descontos ou conversão cambial. Amplie e teste essas regras explicitamente com a especificação contábil aprovada, em vez de apagar linhas inconvenientes ou adivinhar a localidade.
Os valores em Credits são o preço de conferir este CSV?
Não. O verificador local não faz requisição à Orux nem consome Credits do site. A tabela estima uma requisição opcional futura com quantidades de tokens presumidas. Uso real do modelo e cotação atual aplicável determinam a cobrança, não o número de linhas CSV.
O que revisar antes de enviar uma confirmação gerada?
Compare com a correção aprovada e com a autorização efetiva para a comunicação. Um total conciliado não autoriza pagamento nem uma data para ele. Mantenha o relatório de origem separado, rejeite detalhes sem respaldo e confirme referência e destinatário antes de enviar qualquer mensagem.
Use estes modelos com uma única API
Uma API compatível com OpenAI para modelos de chat, imagem, vídeo e áudio, cobrada em Credits.
Artigos relacionados
Ver todos os artigos →
APIs LLM baratas: custos de 14 candidatos
Compare 14 candidatos LLM com preços datados, custos por tarefa e Python. Confira cache, contexto, mínimos e horários antes de estimar seu orçamento.

DeepSeek API: preços, horários, Flash e Pro
Compare preços DeepSeek e Credits Orux, horários e custos semanais. Inclui Python, cache e um caso real de texto, com limites e dados históricos claros.

Qwen Image 3.0 API: preços, Pro e Python
Qwen Image 3.0 custa 6 Credits na Orux AI. Compare Pro, referências e Alibaba, com Python, um pôster real e verificações antes de publicar a arte.