Étapes du bundle
Tous les champs d'une étape de produit et d'une étape d'information, et la formule par laquelle une étape détermine ses propres lignes de facture.
Dernière mise à jour le
Cette page décrit les champs de la carte Lignes de facture supplémentaires sur la page du produit. La manière de construire un bundle est expliquée dans Configurer des lignes de facture supplémentaires.
Étape de produit
Tillor transforme une étape de produit en zéro, une ou plusieurs lignes de facture avec ce produit. Sans formule, il s'agit d'une seule ligne avec la quantité définie ; avec une formule, vous déterminez vous-même si des lignes sont créées, combien et lesquelles.
| Champ | Ce qu'il fait |
|---|---|
| Produit | Le produit qui figure sur la ligne enfant, par exemple un supplément NFC ou une location de compteur. Obligatoire |
| Quantité | La quantité de la ligne si l'étape n'a pas de formule, ou si la formule renvoie true. Supérieure à 0 |
| Multiplier par la quantité de la ligne principale | Multiplie chaque quantité calculée par la quantité de la ligne principale, par exemple 0,5 pour un demi-an de Loyer d'emplacement. Le résultat est arrondi à deux décimales. Tillor supprime les lignes qui tombent ainsi à 0 ; une ligne que la formule renvoie elle-même avec la quantité 0 est conservée |
| Description (optionnel) | Remplace le nom du produit sur la ligne de facture. Une formule qui renvoie des lignes peut donner à chaque ligne sa propre description |
| Style de ligne | Par défaut (produit), DEFAULT ou INFO. Avec INFO, la ligne enfant devient une note grise dans le PDF et dans l'éditeur |
| Une fois par facture | Pertinent uniquement si la même facture contient deux lignes principales ou plus avec un bundle. L'étape n'appartient alors qu'à la première ligne principale dans l'ordre de la facture |
| Jours supplémentaires après la fin de la ligne principale (méthodes d'accès) | N'a de sens que si le produit principal a Prolonger l'occupation comme action. Lorsqu'une ligne de cette étape est payée, Tillor prolonge les méthodes d'accès du client jusqu'à la date de fin de la ligne principale plus ce nombre de jours ; les types et les statuts viennent de Prolonger le mode d'accès sur le produit principal, voir Prolonger le NFC via le bundle |
| Formule | Facultatif. TypeScript qui détermine si l'étape figure sur la facture, avec quelle quantité, ou quelles lignes précisément, voir Formule par étape |
Étape d'information
Une étape d'information n'est que du texte, sans produit ni montant. Tillor l'affiche comme ligne d'explication.
| Champ | Ce qu'il fait |
|---|---|
| Texte de la ligne info | Le texte visible, par exemple « Inclusief toeristen-, gemeente- en provincietaksen ». Obligatoire |
| Style de ligne | INFO par défaut. Vous pouvez choisir DEFAULT si vous voulez afficher la ligne comme une ligne ordinaire |
| Formule | Facultatif. Si la formule renvoie false, la ligne d'information est omise |
Lorsqu'une étape d'information se trouve sous une ligne principale, le PDF place automatiquement ↳ devant le texte.
Formule par étape
Chaque étape peut avoir une Formule : du TypeScript, comme la formule de tarif, que Tillor exécute lors de l'enregistrement d'une facture contenant ce bundle. Ainsi, une étape dépend du client, de l'occupation, du terrain, des compteurs ou des méthodes d'accès, par exemple via un champ personnalisé dans lequel vous notez une exception.
Ce que la formule renvoie
| Valeur renvoyée | Effet |
|---|---|
true | Une ligne avec la Quantité définie |
false ou null | Aucune ligne |
| Un nombre supérieur à 0 | Une ligne avec ce nombre comme quantité |
| Une liste de lignes | Exactement ces lignes, dans cet ordre. Une liste vide signifie aucune ligne |
Une ligne d'une telle liste est un objet avec ces champs :
| Champ | Signification |
|---|---|
quantity | Obligatoire. La quantité, 0 ou plus. Une ligne à 0 est conservée, même avec Multiplier par la quantité de la ligne principale |
description | Facultatif. La description de cette ligne ; sinon la Description de l'étape, sinon le nom du produit |
unitPrice | Facultatif. Prix unitaire TVA incluse, comme le tarif du produit ; sinon le tarif du produit. 0 crée une ligne gratuite |
accessMethodValue | Facultatif. La valeur de la méthode d'accès concernée par cette ligne (l'UID du badge NFC), pour la prolongation lors du paiement |
Ce que la formule peut lire
Vous lisez les champs avec des accolades, comme dans les automatisations. Le menu Variable à côté du champ affiche tout ce qui est disponible, y compris vos propres champs.
| Variable | De quoi il s'agit |
|---|---|
{customer.…} | Le client de la facture, par exemple {customer.createdAt} ou {customer.customFields.meterhuurVrijgesteld} |
{occupation.…} | L'occupation de la ligne principale. Si le produit principal n'est pas sur Prolonger l'occupation, l'unique occupation du client ; vide (null) si le client occupe plusieurs terrains |
{terrain.…} | Le terrain de cette occupation |
{anchor.…} | La ligne principale : {anchor.quantity} (par exemple 0,5 pour un demi-an), {anchor.terrainId}, {anchor.occupationId} et {anchor.endDate} |
{meters} | La liste des compteurs concernés : sur le terrain de la ligne principale avec Prolonger l'occupation, sinon sur tous les terrains que le client occupe. Chaque compteur a name, provider (par exemple ICY), type (par exemple ELECTRICITY, GAS), les métadonnées de son fournisseur (par exemple icyMetadata.switchState pour l'alimentation activée), son terrain et customFields |
{accessMethods} | La liste des méthodes d'accès du client, les plus anciennes d'abord, de chaque type et de chaque statut. Chaque méthode a type (par exemple NFC), status (par exemple ACTIVE), value, un label lisible (le nom connu du badge NFC, sinon la valeur) et customFields |
Tillor ne charge les listes {meters} et {accessMethods} que si la formule les utilise.
Exemples
Ignorer une étape pour les clients exemptés :
if ({customer.customFields.exemptFromSurcharges} === true) return false;
return true;Une ligne par compteur d'électricité ICY avec alimentation activée, et pour les clients depuis 2026 aussi avec alimentation coupée :
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}` }));Le premier badge NFC gratuit comme explication, chacun des suivants au tarif du produit (deux étapes avec le même produit, ou une seule étape qui renvoie les deux sortes de lignes) :
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}`,
}));Une ligne avec le nombre de chiens tiré d'un champ personnalisé du client, aucune ligne sans chien :
const dogs = Math.max(0, Math.floor(Number({customer.customFields.animals.dogs}) || 0));
return dogs === 0 ? false : [{ quantity: dogs, description: `Honden (${dogs})` }];Avec Insérer un exemple sous le champ, vous obtenez un point de départ contenant ces formes en commentaire.
Erreurs
Vous ne pouvez pas enregistrer une formule qui ne compile pas ; le message sous le champ indique ce qui ne va pas. Si une formule se bloque lors de l'enregistrement d'une facture, ou renvoie autre chose que true, false, un nombre ou des lignes valides, l'enregistrement échoue avec le nom de l'étape dans le message d'erreur, afin qu'une formule défectueuse n'ajoute ou ne supprime jamais une ligne en silence.
Voir aussi
Configurer des lignes de facture supplémentaires
Laissez Tillor placer automatiquement des suppléments et des explications sous une ligne principale de la facture.
JSON de bundle
La structure JSON d'un bundle (version 1), pour les imports et pour celles et ceux qui construisent un bundle en dehors de l'écran.