Kroki pakietu
Wszystkie pola kroku produktu i kroku informacyjnego oraz formuła, za pomocą której krok określa własne linie faktury.
Ostatnio zaktualizowano
Ta strona opisuje pola w karcie Dodatkowe linie faktury na stronie produktu. Jak zbudować pakiet, wyjaśniono w Ustawianiu dodatkowych linii faktury.
Krok produktu
Krok produktu Tillor zamienia na zero, jedną lub kilka linii faktury z tym produktem. Bez formuły jest to jedna linia z ustawioną ilością; za pomocą formuły sam decydujesz, czy, ile i jakie linie powstaną.
| Pole | Co robi |
|---|---|
| Produkt | Produkt, który trafia do linii podrzędnej, na przykład dopłata za NFC lub wynajem licznika. Wymagane |
| Ilość | Ilość linii, gdy krok nie ma formuły albo gdy formuła zwraca true. Większa niż 0 |
| Pomnóż przez ilość wiersza kotwicy | Mnoży każdą obliczoną ilość przez ilość linii głównej, na przykład 0,5 przy pół roku Opłaty za postój. Wynik jest zaokrąglany do dwóch miejsc po przecinku. Linie, które w ten sposób wyjdą na 0, Tillor pomija; linia, którą formuła sama zwróci z ilością 0, zostaje |
| Opis (opcjonalnie) | Zastępuje nazwę produktu na linii faktury. Formuła zwracająca linie może nadać każdej linii własny opis |
| Styl linii | Domyślny (produkt), DEFAULT lub INFO. Przy INFO linia podrzędna staje się szarym objaśnieniem w PDF i w edytorze |
| Raz na fakturę | Istotne tylko wtedy, gdy na tej samej fakturze są dwie lub więcej linii głównych z pakietem. Krok należy wtedy tylko do pierwszej linii głównej w kolejności na fakturze |
| Dodatkowe dni po końcu wiersza głównego (metody dostępu) | Ma sens tylko wtedy, gdy produkt główny ma jako akcję Przedłuż okres zajęcia miejsca. Gdy linia tego kroku zostanie opłacona, Tillor przedłuża metody dostępu klienta do daty końcowej linii głównej plus ta liczba dni; typy i statusy pochodzą z Przedłuż metodę dostępu w produkcie głównym, zobacz Przedłużanie NFC przez pakiet |
| Formuła | Opcjonalne. TypeScript, który określa, czy krok trafia na fakturę, z jaką ilością albo jakie dokładnie linie, zobacz Formuła dla kroku |
Krok informacyjny
Krok informacyjny to sam tekst, bez produktu i kwoty. Tillor pokazuje go jako linię objaśnienia.
| Pole | Co robi |
|---|---|
| Tekst linii informacyjnej | Widoczny tekst, na przykład "Inclusief toeristen-, gemeente- en provincietaksen". Wymagane |
| Styl linii | Domyślnie INFO. Możesz wybrać DEFAULT, jeśli chcesz pokazać linię jako zwykłą |
| Formuła | Opcjonalne. Jeśli formuła zwraca false, linia informacyjna zostaje pominięta |
Jeśli krok informacyjny znajduje się pod linią główną, PDF automatycznie dodaje ↳ przed tekstem.
Formuła dla kroku
Każdy krok może mieć Formułę: TypeScript, tak jak formuła taryfy, który Tillor wykonuje przy zapisie faktury z tym pakietem. Dzięki temu krok może zależeć od klienta, zajęcia miejsca, terenu, liczników lub metod dostępu, na przykład poprzez własne pole, w którym zapisujesz wyjątek.
Co zwraca formuła
| Zwrócona wartość | Skutek |
|---|---|
true | Jedna linia z ustawioną Ilością |
false lub null | Brak linii |
| Liczba większa niż 0 | Jedna linia z tą liczbą jako ilością |
| Lista linii | Dokładnie te linie, w tej kolejności. Pusta lista oznacza brak linii |
Linia na takiej liście to obiekt z następującymi polami:
| Pole | Znaczenie |
|---|---|
quantity | Wymagane. Ilość, 0 lub więcej. Linia z 0 zostaje, także przy Pomnóż przez ilość wiersza kotwicy |
description | Opcjonalne. Opis tej linii; w przeciwnym razie Opis kroku, a w przeciwnym razie nazwa produktu |
unitPrice | Opcjonalne. Cena jednostkowa z VAT, jak taryfa produktu; w przeciwnym razie taryfa produktu. 0 tworzy darmową linię |
accessMethodValue | Opcjonalne. Wartość metody dostępu, której dotyczy ta linia (UID tagu NFC), na potrzeby przedłużenia przy płatności |
Co formuła może czytać
Pola czytasz w nawiasach klamrowych, tak jak w automatyzacjach. Menu Zmienna przy polu pokazuje wszystko, co jest dostępne, łącznie z Twoimi własnymi polami.
| Zmienna | Co to jest |
|---|---|
{customer.…} | Klient na fakturze, na przykład {customer.createdAt} lub {customer.customFields.meterhuurVrijgesteld} |
{occupation.…} | Zajęcie miejsca linii głównej. Jeśli produkt główny nie ma akcji Przedłuż okres zajęcia miejsca, jest to jedyne zajęcie klienta; puste (null), jeśli klient zajmuje kilka terenów |
{terrain.…} | Teren tego zajęcia |
{anchor.…} | Linia główna: {anchor.quantity} (na przykład 0,5 przy pół roku), {anchor.terrainId}, {anchor.occupationId} i {anchor.endDate} |
{meters} | Lista liczników w zakresie: na terenie linii głównej przy Przedłuż okres zajęcia miejsca, w przeciwnym razie na wszystkich terenach zajmowanych przez klienta. Każdy licznik ma name, provider (na przykład ICY), type (na przykład ELECTRICITY, GAS), metadane swojego dostawcy (na przykład icyMetadata.switchState dla włączonego zasilania), swój terrain i customFields |
{accessMethods} | Lista metod dostępu klienta, od najstarszej, każdego typu i statusu. Każda metoda ma type (na przykład NFC), status (na przykład ACTIVE), value, czytelną label (znana nazwa tagu NFC, w przeciwnym razie wartość) i customFields |
Listy {meters} i {accessMethods} Tillor ładuje tylko wtedy, gdy formuła z nich korzysta.
Przykłady
Pominięcie kroku dla klientów zwolnionych:
if ({customer.customFields.exemptFromSurcharges} === true) return false;
return true;Jedna linia na każdy licznik energii elektrycznej ICY z włączonym zasilaniem, a dla klientów od 2026 także z wyłączonym:
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}` }));Pierwszy tag NFC za darmo jako objaśnienie, każdy kolejny według taryfy produktu (dwa kroki z tym samym produktem albo jeden krok, który zwraca oba rodzaje linii):
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}`,
}));Jedna linia z liczbą psów z własnego pola klienta, bez linii, gdy nie ma psów:
const dogs = Math.max(0, Math.floor(Number({customer.customFields.animals.dogs}) || 0));
return dogs === 0 ? false : [{ quantity: dogs, description: `Honden (${dogs})` }];Za pomocą Wstaw przykład pod polem dostajesz punkt wyjścia z tymi postaciami w komentarzu.
Błędy
Formuły, która się nie kompiluje, nie można zapisać; komunikat pod polem mówi, co jest nie tak. Jeśli formuła zawiesza się przy zapisie faktury albo zwraca coś innego niż true, false, liczbę lub poprawne linie, zapis się nie udaje, a komunikat błędu zawiera nazwę kroku, żeby zepsuta formuła nigdy po cichu nie dodała ani nie pominęła linii.