Pasos del paquete
Todos los campos de un paso de producto y de un paso de información, y la fórmula con la que un paso determina sus propias líneas de factura.
Última actualización el
Esta página describe los campos de la tarjeta Líneas de factura adicionales en la página del producto. Cómo construir un paquete está en Configurar líneas de factura adicionales.
Paso de producto
Tillor convierte un paso de producto en cero, una o varias líneas de factura con ese producto. Sin fórmula es una sola línea con la cantidad configurada; con una fórmula decides tú si hay líneas, cuántas y cuáles.
| Campo | Qué hace |
|---|---|
| Producto | El producto que se añade a la línea hija, por ejemplo un recargo NFC o el alquiler de un contador. Obligatorio |
| Cantidad | La cantidad de la línea si el paso no tiene fórmula, o si la fórmula devuelve true. Mayor que 0 |
| Multiplicar por la cantidad de la fila principal | Multiplica cada cantidad calculada por la cantidad de la línea principal, por ejemplo 0,5 con medio año de tarifa de estancia. El resultado se redondea a dos decimales. Tillor omite las líneas que así quedan en 0; una línea que la propia fórmula devuelve con cantidad 0 se mantiene |
| Descripción (opcional) | Sustituye el nombre del producto en la línea de factura. Una fórmula que devuelve líneas puede dar a cada línea su propia descripción |
| Estilo de línea | Predeterminado (producto), DEFAULT o INFO. Con INFO, la línea hija pasa a ser una explicación en gris en el PDF y en el editor |
| Una vez por factura | Solo es relevante si hay dos o más líneas principales con un paquete en la misma factura. El paso pertenece entonces solo a la primera línea principal en el orden de la factura |
| Días extra tras el fin de la línea principal (métodos de acceso) | Solo tiene sentido si el producto principal tiene Prolongar periodo de ocupación como acción. Cuando se paga una línea de este paso, Tillor prolonga los métodos de acceso del cliente hasta la fecha de fin de la línea principal más este número de días; los tipos y estados vienen de Prolongar método de acceso en el producto principal, consulta Prolongar NFC mediante el paquete |
| Fórmula | Opcional. TypeScript que determina si el paso aparece en la factura, con qué cantidad o qué líneas exactamente, consulta Fórmula por paso |
Paso de información
Un paso de información es solo texto, sin producto ni importe. Tillor lo muestra como línea de explicación.
| Campo | Qué hace |
|---|---|
| Texto de línea informativa | El texto visible, por ejemplo "Inclusief toeristen-, gemeente- en provincietaksen". Obligatorio |
| Estilo de línea | Por defecto INFO. Puedes elegir DEFAULT si quieres mostrar la línea como una línea normal |
| Fórmula | Opcional. Si la fórmula devuelve false, la línea de información se omite |
Si un paso de información está debajo de una línea principal, el PDF añade automáticamente ↳ delante del texto.
Fórmula por paso
Cada paso puede tener una Fórmula: TypeScript, igual que la fórmula de tarifa, que Tillor ejecuta al guardar una factura con este paquete. Así, un paso depende del cliente, la ocupación, la parcela, los contadores o los métodos de acceso, por ejemplo mediante un campo propio en el que registras una excepción.
Qué devuelve la fórmula
| Valor devuelto | Efecto |
|---|---|
true | Una línea con la Cantidad configurada |
false o null | Ninguna línea |
| Un número mayor que 0 | Una línea con ese número como cantidad |
| Una lista de líneas | Exactamente esas líneas, en ese orden. Una lista vacía significa ninguna línea |
Una línea de esa lista es un objeto con estos campos:
| Campo | Significado |
|---|---|
quantity | Obligatorio. La cantidad, 0 o más. Una línea con 0 se mantiene, también con Multiplicar por la cantidad de la fila principal |
description | Opcional. La descripción de esta línea; si no, la Descripción del paso, y si no, el nombre del producto |
unitPrice | Opcional. Precio unitario con IVA incluido, como la tarifa del producto; si no, la tarifa del producto. 0 crea una línea gratuita |
accessMethodValue | Opcional. El valor del método de acceso al que se refiere esta línea (el UID de la etiqueta NFC), para la prolongación al pagar |
Qué puede leer la fórmula
Los campos se leen con llaves, como en las automatizaciones. El menú Variable junto al campo muestra todo lo disponible, incluidos tus campos propios.
| Variable | Qué es |
|---|---|
{customer.…} | El cliente de la factura, por ejemplo {customer.createdAt} o {customer.customFields.meterhuurVrijgesteld} |
{occupation.…} | La ocupación de la línea principal. Si el producto principal no tiene Prolongar periodo de ocupación, es la única ocupación del cliente; vacío (null) si el cliente ocupa varias parcelas |
{terrain.…} | La parcela de esa ocupación |
{anchor.…} | La línea principal: {anchor.quantity} (por ejemplo 0,5 con medio año), {anchor.terrainId}, {anchor.occupationId} y {anchor.endDate} |
{meters} | La lista de contadores en el ámbito: en la parcela de la línea principal con Prolongar periodo de ocupación, si no en todas las parcelas que ocupa el cliente. Cada contador tiene name, provider (por ejemplo ICY), type (por ejemplo ELECTRICITY, GAS), los metadatos de su proveedor (por ejemplo icyMetadata.switchState para suministro activado), su terrain y customFields |
{accessMethods} | La lista de métodos de acceso del cliente, del más antiguo al más reciente, de cualquier tipo y estado. Cada método tiene type (por ejemplo NFC), status (por ejemplo ACTIVE), value, una label legible (el nombre conocido de la etiqueta NFC, si no el valor) y customFields |
Tillor solo carga las listas {meters} y {accessMethods} si la fórmula las usa.
Ejemplos
Omitir un paso para los clientes exentos:
if ({customer.customFields.exemptFromSurcharges} === true) return false;
return true;Una línea por contador de electricidad ICY con suministro activado, y para los clientes desde 2026 también con suministro desactivado:
const newCustomer = new Date({customer.createdAt} ?? 0) >= new Date("2026-01-01T00:00:00+01:00");
return {meters}
.filter((m) => m.provider === "ICY" && m.type === "ELECTRICITY")
.filter((m) => m.icyMetadata?.switchState === true || newCustomer)
.map((m) => ({ quantity: 1, description: `Huur digitale elektriciteitsmeter ${m.name}` }));La primera etiqueta NFC gratis como explicación, cada siguiente a la tarifa del producto (dos pasos con el mismo producto, o un paso que devuelve ambos tipos de línea):
const nfc = {accessMethods}.filter((a) => a.type === "NFC" && a.status === "ACTIVE");
return nfc.map((a, i) => ({
quantity: i === 0 ? 0 : 1,
unitPrice: i === 0 ? 0 : undefined,
accessMethodValue: a.value,
description: i === 0 ? `Toegangsmethode inclusief: ${a.label}` : `Toeslag extra toegangsmethode: ${a.label}`,
}));Una línea con el número de perros de un campo propio del cliente, ninguna línea si no hay perros:
const dogs = Math.max(0, Math.floor(Number({customer.customFields.animals.dogs}) || 0));
return dogs === 0 ? false : [{ quantity: dogs, description: `Honden (${dogs})` }];Con Insertar ejemplo, debajo del campo, obtienes un punto de partida con estas formas en comentario.
Errores
Una fórmula que no compila no se puede guardar; el aviso debajo del campo dice qué falla. Si una fórmula se bloquea al guardar una factura, o devuelve algo distinto de true, false, un número o líneas válidas, el guardado falla con el nombre del paso en el mensaje de error, de modo que una fórmula rota nunca añade u omite una línea en silencio.