Pașii pachetului
Toate câmpurile unui pas de produs și ale unui pas de informare, precum și formula prin care un pas își stabilește propriile linii de factură.
Ultima actualizare la
Această pagină descrie câmpurile din cardul Linii de factură suplimentare de pe pagina produsului. Cum construiți un pachet găsiți la Configurarea liniilor de factură suplimentare.
Pas de produs
Un pas de produs este transformat de Tillor în zero, una sau mai multe linii de factură cu acel produs. Fără formulă, rezultatul este o singură linie cu cantitatea setată; cu o formulă stabiliți dumneavoastră dacă apar linii, câte și care.
| Câmp | Ce face |
|---|---|
| Produs | Produsul care apare pe linia secundară, de exemplu un supliment NFC sau închirierea unui contor. Obligatoriu |
| Cantitate | Cantitatea liniei dacă pasul nu are formulă sau dacă formula returnează true. Mai mare decât 0 |
| Înmulțiți cu cantitatea rândului ancoră | Înmulțește fiecare cantitate calculată cu cantitatea liniei principale, de exemplu 0,5 pentru o jumătate de an de taxă de staționare. Rezultatul este rotunjit la două zecimale. Liniile care ajung astfel la 0 sunt omise de Tillor; o linie pe care formula însăși o returnează cu cantitatea 0 rămâne |
| Descriere (opțional) | Înlocuiește numele produsului pe linia de factură. O formulă care returnează linii poate da fiecărei linii propria descriere |
| Stilul liniei | Implicit (produs), DEFAULT sau INFO. Cu INFO, linia secundară devine o explicație gri în PDF și în editor |
| O dată per factură | Relevant doar dacă pe aceeași factură există două sau mai multe linii principale cu un pachet. Pasul aparține atunci doar primei linii principale în ordinea facturii |
| Zile suplimentare după sfârșitul liniei principale (metode de acces) | Are sens doar dacă produsul principal are ca acțiune Prelungiți perioada de ocupare. La plata unei linii din acest pas, Tillor prelungește metodele de acces ale clientului până la data de sfârșit a liniei principale plus acest număr de zile; tipurile și stările provin din Prelungiți metoda de acces de pe produsul principal, consultați Prelungirea NFC prin pachet |
| Formulă | Opțional. TypeScript care stabilește dacă pasul apare pe factură, cu ce cantitate sau care sunt exact liniile, consultați Formula pe pas |
Pas de informare
Un pas de informare este doar text, fără produs și fără sumă. Tillor îl afișează ca linie de explicație.
| Câmp | Ce face |
|---|---|
| Textul liniei de informații | Textul vizibil, de exemplu „Inclusief toeristen-, gemeente- en provincietaksen". Obligatoriu |
| Stilul liniei | Implicit INFO. Puteți alege DEFAULT dacă doriți să afișați linia ca o linie obișnuită |
| Formulă | Opțional. Dacă formula returnează false, linia de informare este omisă |
Dacă un pas de informare se află sub o linie principală, PDF-ul pune automat ↳ în fața textului.
Formula pe pas
Fiecare pas poate avea o Formulă: TypeScript, la fel ca formula de tarif, pe care Tillor o execută la salvarea unei facturi cu acest pachet. Astfel, un pas poate depinde de client, de ocupare, de parcelă, de contoare sau de metodele de acces, de exemplu printr-un câmp personalizat în care păstrați o excepție.
Ce returnează formula
| Valoare returnată | Efect |
|---|---|
true | O linie cu Cantitate setată |
false sau null | Nicio linie |
| Un număr mai mare decât 0 | O linie cu acel număr drept cantitate |
| O listă de linii | Exact acele linii, în acea ordine. O listă goală înseamnă nicio linie |
O linie dintr-o astfel de listă este un obiect cu aceste câmpuri:
| Câmp | Semnificație |
|---|---|
quantity | Obligatoriu. Cantitatea, 0 sau mai mult. O linie cu 0 rămâne, chiar și cu Înmulțiți cu cantitatea rândului ancoră |
description | Opțional. Descrierea acestei linii; altfel Descriere a pasului, altfel numele produsului |
unitPrice | Opțional. Prețul unitar cu TVA inclus, ca tariful produsului; altfel tariful produsului. 0 creează o linie gratuită |
accessMethodValue | Opțional. Valoarea metodei de acces la care se referă această linie (UID-ul etichetei NFC), pentru prelungirea la plată |
Ce poate citi formula
Câmpurile se citesc cu acolade, ca în automatizări. Meniul Variabilă de lângă câmp arată tot ce este disponibil, inclusiv câmpurile dumneavoastră personalizate.
| Variabilă | Ce este |
|---|---|
{customer.…} | Clientul de pe factură, de exemplu {customer.createdAt} sau {customer.customFields.meterhuurVrijgesteld} |
{occupation.…} | Ocuparea liniei principale. Dacă produsul principal nu are acțiunea Prelungiți perioada de ocupare, este singura ocupare a clientului; goală (null) dacă clientul ocupă mai multe parcele |
{terrain.…} | Parcela acelei ocupări |
{anchor.…} | Linia principală: {anchor.quantity} (de exemplu 0,5 pentru o jumătate de an), {anchor.terrainId}, {anchor.occupationId} și {anchor.endDate} |
{meters} | Lista contoarelor din domeniu: pe parcela liniei principale la Prelungiți perioada de ocupare, altfel pe toate parcelele ocupate de client. Fiecare contor are name, provider (de exemplu ICY), type (de exemplu ELECTRICITY, GAS), metadatele furnizorului său (de exemplu icyMetadata.switchState pentru alimentare pornită), terrain și customFields |
{accessMethods} | Lista metodelor de acces ale clientului, cele mai vechi primele, de orice tip și orice stare. Fiecare metodă are type (de exemplu NFC), status (de exemplu ACTIVE), value, o label ușor de citit (numele cunoscut al etichetei NFC, altfel valoarea) și customFields |
Listele {meters} și {accessMethods} sunt încărcate de Tillor doar dacă formula le folosește.
Exemple
Săriți peste un pas pentru clienții scutiți:
if ({customer.customFields.exemptFromSurcharges} === true) return false;
return true;O linie pentru fiecare contor de electricitate ICY cu alimentare pornită și, pentru clienții din 2026 încoace, și cu alimentare oprită:
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}` }));Prima etichetă NFC gratuită, ca explicație, fiecare următoare la tariful produsului (doi pași cu același produs sau un singur pas care returnează ambele feluri de 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}`,
}));O linie cu numărul de câini dintr-un câmp personalizat al clientului, nicio linie fără câini:
const dogs = Math.max(0, Math.floor(Number({customer.customFields.animals.dogs}) || 0));
return dogs === 0 ? false : [{ quantity: dogs, description: `Honden (${dogs})` }];Cu Inserează exemplu de sub câmp primiți un punct de plecare cu aceste forme în comentariu.
Erori
O formulă care nu se compilează nu poate fi salvată; mesajul de sub câmp spune ce este greșit. Dacă o formulă se blochează la salvarea unei facturi sau returnează altceva decât true, false, un număr sau linii valide, salvarea eșuează cu numele pasului în mesajul de eroare, astfel încât o formulă defectă să nu adauge sau să omită niciodată în tăcere o linie.