Genere una orden de compra con totales calculados
Convierta los datos de compra aprobados en una orden de compra estructurada y coherente sin volver a implementar las reglas de cálculo en cada aplicación.
Ejecutar — gratis
Indique el número de orden, el comprador, el proveedor y al menos una línea con descripción, cantidad y coste unitario. El generador valida los datos obligatorios, calcula el importe de cada línea y el total del pedido, y devuelve un objeto predecible preparado para revisión interna, almacenamiento, representación, aprobación formal u otra etapa del proceso de compras.
Prepare todos los datos de la orden de compra
Comience con un número de orden de compra que su sistema de compras ya haya asignado. El generador conserva exactamente ese valor tras eliminar los espacios exteriores; no inventa identificadores, consulta secuencias ni reserva números. A continuación, identifique al comprador y al proveedor. Estos campos pueden contener un nombre comercial breve o un bloque más amplio con dirección y datos registrales, según lo que espere el sistema que represente el documento. Añada al menos una línea y proporcione en cada fila una descripción específica, una cantidad numérica superior a cero y un coste unitario numérico no negativo. Se admiten cantidades fraccionarias para bienes o servicios adquiridos por peso, longitud, tiempo u otra unidad divisible. Se acepta un coste unitario cero para un artículo realmente gratuito, pero se rechaza una cantidad nula o negativa porque no expresa un pedido. Mantenga todos los costes en la misma moneda y con la misma base de precios. La capacidad no deduce monedas, unidades de medida, condiciones de pago, fechas de entrega, impuestos, descuentos ni portes; gestione esas decisiones comerciales antes o después del cálculo, según corresponda.
Comprenda cómo se calculan los totales
En cada fila, el generador multiplica la cantidad por el coste unitario y redondea el importe resultante a dos decimales. Después suma esos importes ya redondeados y redondea la suma para obtener el subtotal de la orden. Como esta capacidad no admite impuestos, portes, descuentos ni otros ajustes, el total devuelto coincide con el subtotal. Esta secuencia explícita es importante cuando las cantidades fraccionarias o los costes contienen varios decimales: otro sistema que sume valores intermedios sin redondear podría diferir en un céntimo. La respuesta conserva la descripción normalizada, la cantidad numérica original, el coste unitario redondeado y el importe calculado de cada artículo. En el nivel del documento devuelve el tipo, el número de OC proporcionado, comprador, proveedor, líneas, subtotal y total. Todos los números deben ser finitos; las cadenas que solo parecen números no se convierten silenciosamente. También se rechazan los costes negativos. Estas reglas detectan pronto datos incorrectos y ofrecen a plantillas, pantallas de aprobación, bases de datos e integraciones un contrato de cálculo estable.
Use el documento estructurado en su proceso de compras
Sitúe esta capacidad después de aprobar la solicitud y asignar el número de OC, cuando los datos editables estén listos para convertirse en un registro controlado. Envíe los nombres normalizados de las partes y las líneas, y guarde el objeto devuelto como resultado de cálculo para los pasos posteriores. Una plantilla puede convertirlo en HTML o PDF, un servicio de aprobación puede comparar el total con límites de autorización y una integración puede transferir las líneas a un ERP o portal de proveedores. Esas acciones permanecen separadas: el generador no transmite la orden, contacta al proveedor, crea archivos, reserva presupuesto ni actualiza existencias. No usa red, reloj, valores aleatorios, almacenamiento ni estado oculto, por lo que una solicitud idéntica siempre ofrece la misma respuesta. Esto facilita los reintentos y las auditorías. Resuelva los errores de validación antes de presentar la orden para firma, sobre todo si faltan líneas, datos de las partes, número de OC o importes numéricos. La solicitud API cuesta $0.002, y el mismo cálculo puro puede respaldar la experiencia del navegador.
Qué puede hacer con ella
Cree órdenes de compra aprobadas
Convierta líneas de solicitudes aprobadas en una orden estructurada con totales coherentes.
Impulse un formulario de compras
Calcule importes y el total mientras el personal prepara los datos para revisión y representación.
Normalice integraciones de compras
Ofrezca a aplicaciones internas y proveedores un único contrato determinista de cálculo.
Preguntas frecuentes
¿Cuánto cuesta una solicitud API?
Cada solicitud API cuesta $0.002.
¿Qué ocurre si no hay líneas?
La solicitud devuelve un error de entrada no válida porque toda orden debe contener al menos una línea.
¿Cómo se redondean los importes monetarios?
Cada cantidad se multiplica por su coste unitario y se redondea a dos decimales; después se suman y redondean los importes de línea.
¿Asigna el generador un número de OC?
No. Usted debe proporcionar el número de OC y el resultado lo conserva dentro del documento estructurado.
¿Incluye el resultado impuestos, moneda o un PDF?
No. Devuelve datos estructurados y totales calculados. Los impuestos, la moneda, la representación y el envío son pasos independientes.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
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)Ejemplo de solicitud
{
"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
}
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "doc.purchase_order_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 25 |
max_pages | 200 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |