Skip to Content
Produkte

Bundle-Schritte

Alle Felder eines Produktschritts und eines Infozeilenschritts sowie die Formel, mit der ein Schritt seine eigenen Rechnungspositionen bestimmt.

Zuletzt aktualisiert am

Diese Seite beschreibt die Felder in der Karte Zusätzliche Rechnungspositionen auf der Produktseite. Wie Sie ein Bundle aufbauen, steht unter Zusätzliche Rechnungspositionen einrichten.

Produktschritt

Tillor macht aus einem Produktschritt null, eine oder mehrere Rechnungspositionen mit diesem Produkt. Ohne Formel ist das eine Position mit der eingestellten Menge; mit einer Formel bestimmen Sie selbst, ob, wie viele und welche Positionen entstehen.

FeldWas es bewirkt
ProduktDas Produkt, das auf der Unterposition erscheint, zum Beispiel ein NFC-Zuschlag oder Zählermiete. Pflichtfeld
MengeDie Menge der Position, wenn der Schritt keine Formel hat oder wenn die Formel true zurückgibt. Größer als 0
Mit Hauptzeilenmenge multiplizierenMultipliziert jede berechnete Menge mit der Menge der Hauptposition, zum Beispiel 0,5 bei einem halben Jahr Stellplatzgebühr. Das Ergebnis wird auf zwei Dezimalstellen gerundet. Positionen, die dadurch auf 0 kommen, lässt Tillor weg; eine Position, die die Formel selbst mit der Menge 0 zurückgibt, bleibt bestehen
Beschreibung (optional)Ersetzt den Produktnamen auf der Rechnungsposition. Eine Formel, die Positionen zurückgibt, kann jeder Position eine eigene Beschreibung geben
ZeilenstilStandard (Produkt), DEFAULT oder INFO. Mit INFO wird die Unterposition im PDF und im Editor zu einem grauen Hinweis
Einmal pro RechnungNur relevant, wenn zwei oder mehr Hauptpositionen mit einem Bundle auf derselben Rechnung stehen. Der Schritt gehört dann nur zur ersten Hauptposition in Rechnungsreihenfolge
Zusätzliche Tage nach Ende der Hauptzeile (Zugangsmethoden)Nur sinnvoll, wenn das Hauptprodukt Belegung verlängern als Aktion hat. Wird eine Position dieses Schritts bezahlt, verlängert Tillor die Zugangsmethoden des Kunden bis zum Enddatum der Hauptposition plus diese Anzahl Tage; Typen und Status stammen von Zugangsmethode verlängern am Hauptprodukt, siehe NFC über das Bundle verlängern
FormelOptional. TypeScript, das bestimmt, ob der Schritt auf die Rechnung kommt, mit welcher Menge oder welche Positionen genau, siehe Formel pro Schritt

Infozeilenschritt

Ein Infozeilenschritt ist nur Text, ohne Produkt und Betrag. Tillor zeigt ihn als Hinweiszeile.

FeldWas es bewirkt
Text der InfozeileDer sichtbare Text, zum Beispiel "Inclusief toeristen-, gemeente- en provincietaksen". Pflichtfeld
ZeilenstilStandard INFO. Sie können DEFAULT wählen, wenn die Zeile als normale Position erscheinen soll
FormelOptional. Gibt die Formel false zurück, bleibt die Infozeile weg

Steht ein Infozeilenschritt unter einer Hauptposition, setzt das PDF automatisch ↳ vor den Text.

Formel pro Schritt

Jeder Schritt kann eine Formel haben: TypeScript, wie bei der Tarifformel, das Tillor beim Speichern einer Rechnung mit diesem Bundle ausführt. So hängt ein Schritt vom Kunden, der Belegung, der Parzelle, den Zählern oder den Zugangsmethoden ab, zum Beispiel über ein eigenes Feld, in dem Sie eine Ausnahme festhalten.

Was die Formel zurückgibt

Zurückgegebener WertWirkung
trueEine Position mit der eingestellten Menge
false oder nullKeine Position
Eine Zahl größer als 0Eine Position mit dieser Zahl als Menge
Eine Liste von PositionenGenau diese Positionen, in dieser Reihenfolge. Eine leere Liste bedeutet keine Position

Eine Position in einer solchen Liste ist ein Objekt mit diesen Feldern:

FeldBedeutung
quantityPflicht. Die Menge, 0 oder mehr. Eine Position mit 0 bleibt bestehen, auch bei Mit Hauptzeilenmenge multiplizieren
descriptionOptional. Die Beschreibung dieser Position; sonst die Beschreibung des Schritts, sonst der Produktname
unitPriceOptional. Einzelpreis inkl. MwSt., wie der Produkttarif; sonst der Produkttarif. 0 ergibt eine kostenlose Position
accessMethodValueOptional. Der Wert der Zugangsmethode, um die es in dieser Position geht (die UID des NFC-Tags), für die Verlängerung bei Zahlung

Was die Formel lesen kann

Felder lesen Sie mit geschweiften Klammern, wie bei Automatisierungen. Das Menü Variable am Feld zeigt alles, was verfügbar ist, einschließlich Ihrer eigenen Felder.

VariableWas es ist
{customer.…}Der Kunde auf der Rechnung, zum Beispiel {customer.createdAt} oder {customer.customFields.meterhuurVrijgesteld}
{occupation.…}Die Belegung der Hauptposition. Steht das Hauptprodukt nicht auf Belegung verlängern, dann die einzige Belegung des Kunden; leer (null), wenn der Kunde mehrere Parzellen belegt
{terrain.…}Die Parzelle dieser Belegung
{anchor.…}Die Hauptposition: {anchor.quantity} (zum Beispiel 0,5 bei einem halben Jahr), {anchor.terrainId}, {anchor.occupationId} und {anchor.endDate}
{meters}Die Liste der Zähler im Geltungsbereich: auf der Parzelle der Hauptposition bei Belegung verlängern, sonst auf allen Parzellen, die der Kunde belegt. Jeder Zähler hat name, provider (zum Beispiel ICY), type (zum Beispiel ELECTRICITY, GAS), die Metadaten seines Anbieters (zum Beispiel icyMetadata.switchState für Versorgung an), seine terrain und customFields
{accessMethods}Die Liste der Zugangsmethoden des Kunden, älteste zuerst, von jedem Typ und jedem Status. Jede Methode hat type (zum Beispiel NFC), status (zum Beispiel ACTIVE), value, ein lesbares label (der bekannte Name des NFC-Tags, sonst der Wert) und customFields

Die Listen {meters} und {accessMethods} lädt Tillor nur, wenn die Formel sie verwendet.

Beispiele

Einen Schritt für befreite Kunden überspringen:

if ({customer.customFields.exemptFromSurcharges} === true) return false;
return true;

Eine Position pro ICY-Stromzähler mit Versorgung an, und für Kunden seit 2026 auch mit Versorgung aus:

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}` }));

Den ersten NFC-Tag kostenlos als Hinweis, jeden weiteren zum Produkttarif (zwei Schritte mit demselben Produkt, oder ein Schritt, der beide Arten von Positionen zurückgibt):

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}`,
}));

Eine Position mit der Anzahl Hunde aus einem eigenen Feld des Kunden, keine Position ohne Hunde:

const dogs = Math.max(0, Math.floor(Number({customer.customFields.animals.dogs}) || 0));
return dogs === 0 ? false : [{ quantity: dogs, description: `Honden (${dogs})` }];

Mit Beispiel einfügen unter dem Feld erhalten Sie einen Ausgangspunkt mit diesen Formen als Kommentar.

Fehler

Eine Formel, die nicht kompiliert, können Sie nicht speichern; die Meldung unter dem Feld sagt, was nicht stimmt. Bleibt eine Formel beim Speichern einer Rechnung hängen oder gibt sie etwas anderes zurück als true, false, eine Zahl oder gültige Positionen, dann schlägt das Speichern fehl, mit dem Namen des Schritts in der Fehlermeldung, sodass eine fehlerhafte Formel nie stillschweigend eine Position hinzufügt oder weglässt.

Siehe auch

War diese Seite hilfreich?

Auf dieser Seite