Formatos, campos y fórmulas
Todo lo que entra se convierte en una plantilla (aunque sea de un solo uso) y se calcula con el mismo motor.
Campos del CRM
En títulos, conceptos, comentarios y condiciones, entre llaves dobles:
| Campo | Qué es |
|---|---|
{{deal.dealname}}, {{deal.amount}}, {{deal.mi_propiedad}} | Propiedades del negocio (también las personalizadas) |
{{company.name}}, {{company.city}}… | Empresa principal del negocio |
{{contact.firstname}}, {{contact.fullname}}, {{contact.email}} | Primer contacto del negocio |
{{owner.fullname}}, {{owner.email}} | Propietario del negocio |
{{inputs.clave}} | Datos que pide la plantilla |
{{today()}}, {{addDays(30)}}, {{addMonths(12)}} | Fechas |
Filtros: upper, lower, capitalize, money, money:'USD', number:2, round:2, date, default:'—', truncate:40. Ejemplo: {{deal.amount | money}}.
Fórmulas (cantidad, precio, descuentos, condiciones)
inputs.usuarios * 12
deal.amount > 5000 && inputs.formacion
inputs.plan == 'pro' ? 49 : 29
tier(quantity, [[1, 30], [20, 25], [100, 21]]) precio por tramos
lookup(inputs.plan, 'basic', 10, 'pro', 20, 0) tabla de valores
round(product.price * 0.9, 2) precio del producto de HubSpot
max(0, inputs.usuarios - 100) cantidad 0 = la línea no entra
Operadores: + - * / %, == != < <= > >= (también =), && || ! (también and or not, y o no), condición ? a : b.
Funciones: min max round ceil floor abs if coalesce number text upper lower len contains concat tier lookup today addDays addMonths.
Dentro de una línea: quantity (cantidad ya calculada), price y product.*.
HTML con «quote markup»
<article data-quote data-title="Propuesta {{company.name}}" data-expires="30" data-currency="EUR">
<var data-variable="users" data-type="number" data-default="10" data-required>Número de usuarios</var>
<var data-variable="plan" data-type="select" data-options="basic=Básico|pro=Pro">Plan</var>
<section data-group="Licencias">
<div data-line data-sku="LIC-PRO" data-qty="{{inputs.users}}" data-frequency="monthly" data-term="12">Licencia Pro</div>
</section>
<table>
<tr><th>Concepto</th><th>Cant.</th><th>Precio</th></tr>
<tr data-line data-optional>
<td data-field="name">Formación</td><td data-field="qty">2</td><td data-field="price">450,00 €</td>
</tr>
<tr data-line data-condition="inputs.plan == 'pro'"><td data-field="name">Soporte prioritario</td><td data-field="price">99 €/mes</td></tr>
</table>
<div data-quote-comments>Precios sin IVA.</div>
<div data-quote-terms>50 % a la aceptación.</div>
</article>
| Atributo | En | Valor | |
|---|---|---|---|
data-quote | contenedor | data-title, data-expires (días, fecha o fórmula), data-currency, data-language, data-buyer-email, data-hubspot-template | |
data-line | cualquier elemento | data-name, data-sku, data-product-id, data-qty, data-price, data-total, data-discount («10 %» o importe), data-tax, data-frequency, data-term, data-condition, data-group, data-optional | |
data-field | hijo de una línea | name, description, sku, qty, price, total, discount, tax, frequency, term, condition, group (también en español: concepto, cantidad, precio…) | |
data-variable | <var> u otro | data-type (number, text, boolean, select, date), data-default, data-required, `data-options="a=A | b=B", data-help` |
data-group / data-section | contenedor | sección de las líneas de dentro | |
data-quote-comments, data-quote-terms, data-quote-title | cualquier elemento | su texto | |
data-quote-property="hs_x" | cualquier elemento | propiedad adicional del presupuesto | |
<meta name="quote:title" content="…"> | <head> | alternativa para título, quote:expires, quote:currency… |
Sin markup, se usa la tabla que más parece de líneas (cabeceras reconocidas: concepto, descripción, referencia/SKU, cantidad/uds/horas, precio/PVP/tarifa, importe/total, dto., IVA, frecuencia, duración, sección); si no hay tablas, el texto visible.
CSV, TSV y pegado de hojas de cálculo
Separador detectado; cabeceras como arriba (también sin cabecera: se deduce por el contenido). Las filas de una sola celda son secciones; las de total, base, IVA, IRPF se ignoran.
Texto libre y Markdown
# Web corporativa ACME
Válido hasta: 31/12/2026
Email: compras@acme.es
## Diseño
- 3 x Plantillas de página a 400 €
- Logo: 350 €
## Mantenimiento
Hosting y soporte 49 €/mes, 12 meses
Formación 2 h × 60 € (dto. 10 %)
Notas: Precios sin IVA.
Y tablas Markdown (| Concepto | Cantidad | Precio |).
JSON
{
"title": "Pedido web",
"expires": 15,
"currency": "EUR",
"buyer": { "email": "compras@acme.es" },
"variables": [{ "key": "users", "label": "Usuarios", "type": "number", "required": true }],
"lines": [
{ "sku": "LIC-PRO", "quantity": "{{inputs.users}}", "billing_frequency": "monthly", "term": 12 },
{ "name": "Formación", "quantity": 2, "price": 450, "discount_percent": 10 }
],
"comments": "Precios sin IVA."
}
También vale cualquier JSON con una lista de líneas (items, line_items, products, conceptos…): se busca en profundidad.
Excel
Por la API (multipart, campo file) o por URL. Se usa la hoja con más líneas.