Skip to Content
Produits

É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.

ChampCe qu'il fait
ProduitLe 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 principaleMultiplie 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 lignePar 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 facturePertinent 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
FormuleFacultatif. 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.

ChampCe qu'il fait
Texte de la ligne infoLe texte visible, par exemple « Inclusief toeristen-, gemeente- en provincietaksen ». Obligatoire
Style de ligneINFO par défaut. Vous pouvez choisir DEFAULT si vous voulez afficher la ligne comme une ligne ordinaire
FormuleFacultatif. 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éeEffet
trueUne ligne avec la Quantité définie
false ou nullAucune ligne
Un nombre supérieur à 0Une ligne avec ce nombre comme quantité
Une liste de lignesExactement ces lignes, dans cet ordre. Une liste vide signifie aucune ligne

Une ligne d'une telle liste est un objet avec ces champs :

ChampSignification
quantityObligatoire. La quantité, 0 ou plus. Une ligne à 0 est conservée, même avec Multiplier par la quantité de la ligne principale
descriptionFacultatif. La description de cette ligne ; sinon la Description de l'étape, sinon le nom du produit
unitPriceFacultatif. Prix unitaire TVA incluse, comme le tarif du produit ; sinon le tarif du produit. 0 crée une ligne gratuite
accessMethodValueFacultatif. 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.

VariableDe 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

Cette page t'a-t-elle été utile ?

Sur cette page