Nivel: principiante con nociones de datos. Proyecto: presupuesto ficticio. Verificado: n8n 2.44.5, 21 de octubre de 2026. Ejemplos ejecutados con datos ficticios.
Las expresiones permiten calcular un campo a partir de otros datos del flujo. Para practicar construiremos un presupuesto sencillo: tres cuadernos a 19,90 cada uno, con un descuento del 10 %. El objetivo es entender cómo entran los datos y cómo se transforma el resultado, sin añadir un nodo Code.
No es un sistema de facturación. El ejemplo no incluye impuestos, condiciones comerciales ni cálculo financiero de precisión decimal.
Qué necesitas
n8n abierto y el archivo 03-calcular-presupuesto.json. El proyecto utiliza un disparador manual y dos nodos Edit Fields. Todo funciona con datos ficticios y sin servicios externos.
1. Importa el workflow
Crea un workflow nuevo e importa el archivo. Comprueba la conexión Ejecutar prueba → Datos del presupuesto → Calcular importes. Guarda el proyecto sin publicarlo; se ejecuta manualmente para que puedas revisar cada ensayo.

2. Revisa los campos de entrada
Datos del presupuesto contiene el producto Cuaderno de ejemplo, cantidad 3, precio_unitario 19.9 y descuento_porcentaje 10. Los tres últimos campos son Number. El punto del precio es el separador decimal del valor numérico; no escribas el símbolo del euro dentro de él.
Antes de añadir cálculos, ejecuta hasta este nodo y confirma los valores. Si una cifra llega como texto, el problema debe resolverse en la entrada y no ocultarse con una expresión más complicada.
3. Calcula el subtotal
La operación es cantidad por precio_unitario. La expresión completa del ejemplo es {{ Number(($json.cantidad * $json.precio_unitario).toFixed(2)) }}.
toFixed(2) redondea y devuelve un texto con dos decimales. Number(...) vuelve a convertir ese resultado en número. Por eso la salida puede verse como 59.7 y no 59.70: ambos representan el mismo valor numérico. El formato de presentación es una decisión posterior.
4. Aplica el descuento
El total utiliza {{ Number(($json.cantidad * $json.precio_unitario * (1 - $json.descuento_porcentaje / 100)).toFixed(2)) }}.
Con un descuento de 10, el factor es 0,9. Multiplicamos el importe por ese factor y redondeamos al final. Los campos subtotal y total se calculan desde los datos de entrada; no necesitamos depender del orden en que se evalúen los campos de un mismo nodo.
5. Prueba el resultado
Ejecuta el flujo completo. Para los valores iniciales esperamos subtotal 59.7 y total 53.73. Después cambia descuento_porcentaje a 0 y ejecuta de nuevo: el total esperado pasa a 59.7.
Compara ambos ensayos. Si el total no cambia, revisa que el campo sea una expresión y que estés mirando la salida de la última ejecución.
Errores que conviene detectar
Un precio con coma, moneda y espacios puede requerir limpieza antes de convertirse a número. Una cantidad negativa o un descuento fuera del intervalo previsto necesita validación. Este proyecto no intenta adivinar cómo tratar esos casos.
JavaScript usa números de coma flotante. Para un sistema de cobros real hacen falta reglas de redondeo, validación y una estrategia de precisión adecuada, además de los requisitos propios de facturación. Aquí el valor está en aprender el recorrido de los datos con un caso pequeño y comprobable.
Resultados comprobados y capturas reales
Comprobado: 3 × 19,90 = subtotal 59,70; descuento 10 % → total 53,73; descuento 0 % → total 59,70.

Descarga y prueba el proyecto
Descargar el workflow en ZIP. Descomprime el archivo y selecciona el JSON en la opción de importar desde archivo de n8n. El proyecto utiliza datos ficticios y no contiene credenciales.
¿Todavía no tienes n8n? Consulta la instalación local en Windows.
Volver a los tutoriales de n8nfácil →
Construye este workflow desde cero
Puedes crear los nodos manualmente en lugar de importar el ZIP. Los ajustes siguientes corresponden al archivo del proyecto y a la versión indicada al comienzo de la guía; los nombres de los controles pueden variar en otras versiones.
Ejecutar prueba · Manual Trigger
Añade Manual Trigger como inicio del flujo. Permite ejecutar la práctica pulsando Execute workflow, sin publicar un disparador automático.
Datos del presupuesto · Edit Fields (Set)
Añade Edit Fields (Set) y selecciona Manual Mapping. Crea los siguientes campos; utiliza Fixed para valores literales y Expression para fórmulas. Conserva solo los campos configurados para reproducir la salida del proyecto.
| Campo | Tipo | Modo | Valor |
|---|---|---|---|
| producto | string | Fixed | "Cuaderno de ejemplo" |
| cantidad | number | Fixed | 3 |
| precio_unitario | number | Fixed | 19.9 |
| descuento_porcentaje | number | Fixed | 10 |
Las comillas de los valores de texto de la tabla indican que son cadenas: no las escribas en el campo Fixed. Conserva los espacios cuando formen parte de los datos de prueba.
Calcular importes · Edit Fields (Set)
Añade Edit Fields (Set) y selecciona Manual Mapping. Crea los siguientes campos; utiliza Fixed para valores literales y Expression para fórmulas. Conserva solo los campos configurados para reproducir la salida del proyecto.
| Campo | Tipo | Modo | Valor |
|---|---|---|---|
| producto | string | Expression | {{ $json.producto }} |
| subtotal | number | Expression | {{ Number(($json.cantidad * $json.precio_unitario).toFixed(2)) }} |
| total | number | Expression | {{ Number(($json.cantidad * $json.precio_unitario * (1 - $json.descuento_porcentaje / 100)).toFixed(2)) }} |
Las comillas de los valores de texto de la tabla indican que son cadenas: no las escribas en el campo Fixed. Conserva los espacios cuando formen parte de los datos de prueba.
Conecta los nodos y revisa el recorrido
- Ejecutar prueba → Datos del presupuesto.
- Datos del presupuesto → Calcular importes.
Ejecuta desde el inicio y abre la salida de cada nodo. Comprueba los valores y el número de elementos antes de seguir. Un nodo verde indica ejecución completada, pero debes comparar su salida con los resultados esperados de esta guía.

Leave a Reply