Gere uma ordem de compra com totais calculados
Transforme dados de compras aprovados em uma ordem de compra estruturada e consistente sem recriar regras de cálculo em cada aplicativo.
Executar grátis
Informe o número da ordem, o comprador, o fornecedor e pelo menos um item com descrição, quantidade e custo unitário. O gerador valida os dados obrigatórios, calcula o total de cada item e do pedido e devolve um objeto previsível, pronto para análise interna, armazenamento, renderização, aprovação formal ou outra etapa do fluxo de compras.
Prepare todos os dados da ordem de compra
Comece com um número de ordem de compra já atribuído pelo seu sistema de compras. O gerador preserva esse valor exatamente depois de remover espaços externos; ele não inventa identificadores, consulta sequências nem reserva números. Em seguida, identifique o comprador e o fornecedor. Esses campos podem conter um nome empresarial curto ou um bloco maior com endereço e dados cadastrais, conforme a necessidade do sistema que renderizará o documento. Inclua pelo menos um item e forneça, em cada linha, uma descrição específica, uma quantidade numérica maior que zero e um custo unitário numérico não negativo. Quantidades fracionárias são aceitas para bens ou serviços comprados por peso, comprimento, tempo ou outra unidade divisível. Um custo zero é permitido para um item realmente gratuito, mas uma quantidade zero ou negativa é recusada porque não representa um pedido. Mantenha todos os custos na mesma moeda e base de preços. A capacidade não infere moedas, unidades de medida, condições de pagamento, datas de entrega, tributos, descontos nem frete; trate essas decisões comerciais antes ou depois deste cálculo, conforme necessário.
Entenda como os totais são calculados
Em cada linha, o gerador multiplica a quantidade pelo custo unitário e arredonda o total resultante para duas casas decimais. Depois, soma os totais já arredondados e arredonda a soma para produzir o subtotal da ordem de compra. Como esta capacidade não recebe tributos, frete, descontos nem outros ajustes, o total devolvido é igual ao subtotal. Essa sequência explícita é importante quando quantidades fracionárias ou custos unitários têm várias casas decimais: outro sistema que some valores intermediários não arredondados pode divergir em um centavo. A resposta preserva a descrição normalizada, a quantidade numérica original, o custo unitário arredondado e o total calculado de cada item. No nível do documento, ela devolve tipo, número informado, comprador, fornecedor, itens, subtotal e total. Todos os números devem ser finitos; textos que apenas parecem números não são convertidos silenciosamente. Custos negativos também são recusados. Essas regras expõem dados incorretos cedo e oferecem a modelos, telas de aprovação, bancos de dados e integrações um contrato de cálculo estável.
Use o documento estruturado no fluxo de compras
Use esta capacidade depois da aprovação da requisição e da atribuição do número, quando os dados editáveis estiverem prontos para virar um registro controlado. Envie nomes normalizados das partes e os itens e armazene o objeto devolvido como resultado do cálculo usado nas etapas seguintes. Um modelo pode convertê-lo em HTML ou PDF, um serviço de aprovação pode comparar o total com limites de autorização e uma integração pode transferir os itens para um ERP ou portal do fornecedor. Essas ações permanecem separadas: o gerador não envia a ordem, contata o fornecedor, cria arquivos, reserva orçamento nem atualiza estoque. Ele não usa rede, relógio, valores aleatórios, armazenamento ou estado oculto; por isso, uma solicitação idêntica sempre produz a mesma resposta. Isso facilita novas tentativas e auditorias. Corrija erros de validação antes de apresentar a ordem para assinatura, principalmente quando faltarem itens, dados das partes, número ou valores numéricos. A solicitação de API custa US$ 0,002, e o mesmo cálculo puro pode atender à experiência no navegador.
Casos de uso
Crie ordens de compra aprovadas
Converta itens de requisições aprovadas em uma ordem estruturada com totais consistentes.
Alimente um formulário de compras
Calcule totais enquanto a equipe prepara os dados para análise e renderização.
Padronize integrações de compras
Ofereça a aplicativos internos e fornecedores um contrato determinístico único de cálculo.
Perguntas frequentes
Quanto custa uma solicitação de API?
Cada solicitação de API custa US$ 0,002.
O que acontece se não houver itens?
A solicitação devolve um erro de entrada inválida, pois toda ordem deve conter pelo menos um item.
Como os valores monetários são arredondados?
Cada quantidade é multiplicada pelo custo unitário e arredondada para duas casas; depois, os totais dos itens são somados e arredondados.
O gerador atribui um número à ordem?
Não. Você deve informar o número, e o resultado o preserva como parte do documento estruturado.
O resultado inclui tributos, moeda ou PDF?
Não. Ele devolve dados estruturados e totais calculados. Tributos, moeda, renderização e entrega são etapas separadas.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/doc/purchase-order-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"po_number":"PO-2026-0142","buyer":"Contoso Retail","vendor":"Northwind Supplies","line_items":[{"description":"Ergonomic keyboard","quantity":12,"unit_cost":79.95},{"description":"USB-C dock","quantity":5,"unit_cost":149.5}]}'const res = await fetch("https://api.kit.forhosting.com/doc/purchase-order-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"po_number": "PO-2026-0142",
"buyer": "Contoso Retail",
"vendor": "Northwind Supplies",
"line_items": [
{
"description": "Ergonomic keyboard",
"quantity": 12,
"unit_cost": 79.95
},
{
"description": "USB-C dock",
"quantity": 5,
"unit_cost": 149.5
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/doc/purchase-order-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"po_number": "PO-2026-0142",
"buyer": "Contoso Retail",
"vendor": "Northwind Supplies",
"line_items": [
{
"description": "Ergonomic keyboard",
"quantity": 12,
"unit_cost": 79.95
},
{
"description": "USB-C dock",
"quantity": 5,
"unit_cost": 149.5
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/doc/purchase-order-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"po_number":"PO-2026-0142","buyer":"Contoso Retail","vendor":"Northwind Supplies","line_items":[{"description":"Ergonomic keyboard","quantity":12,"unit_cost":79.95},{"description":"USB-C dock","quantity":5,"unit_cost":149.5}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"po_number":"PO-2026-0142","buyer":"Contoso Retail","vendor":"Northwind Supplies","line_items":[{"description":"Ergonomic keyboard","quantity":12,"unit_cost":79.95},{"description":"USB-C dock","quantity":5,"unit_cost":149.5}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/doc/purchase-order-generate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"po_number": "PO-2026-0142",
"buyer": "Contoso Retail",
"vendor": "Northwind Supplies",
"line_items": [
{
"description": "Ergonomic keyboard",
"quantity": 12,
"unit_cost": 79.95
},
{
"description": "USB-C dock",
"quantity": 5,
"unit_cost": 149.5
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "doc.purchase_order_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_mb | 25 |
max_pages | 200 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |