Genere un presupuesto con descuento y totales
Tres líneas, un descuento fijo y una validez de 21 días se convierten en un presupuesto estructurado con totales de línea, subtotal, descuento y total final, todo con su código de moneda: indique conceptos, cantidades y precios. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Descuento
- 250
- Moneda
- usd
- Días de validez
- 21
- Referencia del presupuesto
- Q-2026-104
- Nombre del cliente
- Northwind Studio
- Tipo de documento
- quote
- Moneda
- USD
Convierta una lista de servicios o productos en un presupuesto estructurado y coherente, sin copiar cifras entre una calculadora y una plantilla. El generador calcula cada partida, el subtotal, un descuento fijo y el total final, y registra durante cuántos días seguirá vigente la oferta. También admite código de moneda, nombre del cliente y referencia.
Prepare partidas claras para el presupuesto
Empiece con un registro por cada servicio o producto que esté considerando el cliente. Cada registro necesita una descripción y un precio unitario; si se omite la cantidad, se utiliza uno. Emplee descripciones que sigan siendo comprensibles cuando el presupuesto salga de la conversación comercial: indique el entregable, paquete, licencia o fase de trabajo en lugar de usar abreviaturas internas.
Las cantidades pueden representar unidades físicas, puestos de una suscripción, jornadas de consultoría o cualquier otra medida coherente. El generador multiplica cada precio unitario por su cantidad y redondea el total de la partida a dos decimales. Los precios deben ser cero o superiores y las cantidades, positivas.
Una partida con precio cero permite documentar un entregable incluido o un servicio de cortesía sin modificar el subtotal. Todas las partidas comparten el código de moneda indicado para el documento. Esta capacidad etiqueta los importes con ese código, pero no convierte divisas, añade impuestos ni consulta precios de un catálogo.
Proporcione cifras comerciales definitivas y listas para presentar. Una entrada explícita hace que el documento resultante sea predecible, revisable y apto para la automatización posterior.
Aplique el descuento y compruebe los totales
El descuento opcional es un importe fijo expresado en la misma moneda que las partidas. Si se omite, el generador utiliza cero. Primero calcula el total de cada partida, suma esos valores redondeados para obtener el subtotal, redondea el descuento a dos decimales y lo resta para producir el total final.
Este orden ofrece resultados estables para facturas, sistemas de aprobación y generadores de documentos que esperan la precisión monetaria habitual. El descuento no puede ser negativo ni superar el subtotal. Si lo supera, la solicitud devuelve un error de entrada no válida en vez de crear un presupuesto con total negativo.
Esta protección resulta especialmente útil cuando el descuento procede de un campo del CRM o de una regla comercial automática que podría haber quedado desactualizada después de cambiar las partidas. Los impuestos, anticipos, calendarios de pago y descuentos porcentuales quedan fuera de este cálculo. Convierta cualquier promoción porcentual en el importe fijo aprobado antes de usar el generador para mantener inequívocos el cálculo y el documento.
Utilice el documento estructurado y su validez
El resultado es un presupuesto estructurado, no un PDF con diseño. Identifica el tipo de documento, la moneda, el período de validez en días naturales, las partidas normalizadas y un resumen de totales. Los campos opcionales de cliente y referencia solo aparecen cuando se proporcionan, lo que conserva una salida limpia para sistemas que distinguen entre información ausente e información vacía.
El período de validez predeterminado es de treinta días y puede configurarse entre uno y 3,650 días. Como esta capacidad es determinista y nunca consulta el reloj actual, expresa la validez como duración en lugar de inventar una fecha de emisión o vencimiento. El sistema receptor puede combinar esa duración con la marca temporal real cuando envíe o almacene el presupuesto.
Esta separación evita cambios entre reintentos y permite pruebas de referencia fiables. Si necesita un archivo visual terminado, entregue esta estructura validada a su propio generador. La capacidad no realiza solicitudes de red, no almacena datos del cliente y produce siempre el mismo resultado para la misma entrada.
Qué puede hacer con ella
Prepare una propuesta de servicios
Calcule talleres, jornadas de implantación y paquetes de soporte en un único resumen coherente.
Presupueste cantidades de productos
Convierta precios unitarios y cantidades en partidas revisadas antes de generar el documento para el cliente.
Automatice aprobaciones comerciales
Cree datos estables que expongan subtotal, concesión, total y validez al flujo de aprobación.
Preguntas frecuentes
¿El descuento es porcentual?
No. El descuento es un importe monetario fijo en la moneda del presupuesto.
¿Qué sucede si el descuento supera el subtotal?
La solicitud devuelve un error de entrada no válida y no genera ningún presupuesto.
¿El generador calcula impuestos?
No. Solo calcula partidas, subtotal, descuento fijo y total final.
¿La validez incluye una fecha de vencimiento?
No. Devuelve una cantidad determinista de días para que su sistema la combine con la fecha de emisión real.
¿Puedo incluir en el presupuesto un concepto sin cargo?
Sí. Una línea con precio cero documenta un entregable incluido o un servicio de cortesía sin cambiar el subtotal, de modo que el cliente ve todo el alcance de la oferta.
Herramientas relacionadas
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/quote-estimate-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":[{"description":"Discovery workshop","price":450,"quantity":1},{"description":"Implementation day","price":800,"quantity":3}]}'const res = await fetch("https://api.kit.forhosting.com/doc/quote-estimate-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
{
"description": "Discovery workshop",
"price": 450,
"quantity": 1
},
{
"description": "Implementation day",
"price": 800,
"quantity": 3
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/doc/quote-estimate-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
{
"description": "Discovery workshop",
"price": 450,
"quantity": 1
},
{
"description": "Implementation day",
"price": 800,
"quantity": 3
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/doc/quote-estimate-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":[{"description":"Discovery workshop","price":450,"quantity":1},{"description":"Implementation day","price":800,"quantity":3}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":[{"description":"Discovery workshop","price":450,"quantity":1},{"description":"Implementation day","price":800,"quantity":3}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/doc/quote-estimate-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
{
"items": [
{
"description": "Discovery workshop",
"price": 450,
"quantity": 1
},
{
"description": "Implementation day",
"price": 800,
"quantity": 3
}
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "doc.quote_estimate_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. |
Notas técnicas
El resultado es un JSON determinista que puede alimentar aprobaciones, portales de clientes, plantillas de documentos, correos o registros internos, con cálculos fáciles de revisar.
Aplique el descuento y compruebe los totales
Antes de enviar el presupuesto, compare el resumen devuelto con la aprobación comercial: subtotal muestra el valor anterior a las concesiones, discount_amount presenta claramente la concesión y total indica el importe propuesto al cliente.
Utilice el documento estructurado y su validez
Utilice el JSON devuelto directamente en un portal de clientes, asígnelo a una plantilla corporativa, adjúntelo a una oportunidad o envíelo a un flujo de aprobación.
Preguntas técnicas
¿Cuánto cuesta una solicitud?
Cada solicitud cuesta $0.002.