JSON pentru pachet
Structura JSON a unui pachet (versiunea 1), pentru importuri și pentru cei care construiesc un pachet în afara ecranului.
Ultima actualizare la
Cardul Linii de factură suplimentare salvează un pachet ca JSON pe produs, sub cheia invoiceBundle. Pentru importuri folosiți aceeași structură. Pentru utilizarea obișnuită nu aveți nevoie de această pagină: câmpurile și explicațiile lor se află la Pașii pachetului.
Structură
| Câmp | Semnificație |
|---|---|
invoiceBundle.version | Întotdeauna 1 |
invoiceBundle.steps | Lista pașilor, cel mult 40. Ordinea este ordinea liniilor secundare de pe factură |
Fiecare pas este un pas de produs sau un pas de informare.
Pas de produs
| Câmp | Semnificație |
|---|---|
productId | Un produs existent în organizația dumneavoastră. Obligatoriu |
quantity | Număr mai mare decât 0, implicit 1. Cantitatea liniei fără formulă sau dacă formula returnează true |
quantityScale | Opțional. "anchor_line_quantity" înmulțește fiecare cantitate calculată cu cantitatea liniei principale |
description | Opțional. Text pentru linia de factură în locul numelui produsului; o formulă poate da fiecărei linii propriul description |
style | Opțional. DEFAULT sau INFO |
billOncePerInvoice | Opțional. true păstrează pasul, atunci când pe o factură sunt mai multe linii principale, doar la prima linie principală |
extendAccessMethod | Opțional. { "daysAfterPeriodEnd": <număr întreg, 0 până la 3660> }, consultați Prelungirea NFC |
formula | Opțional. TypeScript care stabilește ce linii produce pasul, consultați Formula |
Pas de informare
{
"stepKind": "info",
"description": "Inclusief toeristen-, gemeente- en provincietaksen"
}description este obligatoriu, iar un pas de informare nu are productId. Cu style (DEFAULT sau INFO) alegeți stilul liniei, implicit este INFO. O formula care returnează false omite linia de informare.
Formula
formula este TypeScript care, la salvarea unei facturi, returnează true (o linie cu quantity), false (nicio linie), un număr (cantitatea) sau o listă de linii { "quantity", "description", "unitPrice", "accessMethodValue" }. Ce câmpuri și liste puteți citi și ce face fiecare formă se află la Formula pe pas. O formulă care nu se compilează este refuzată la salvarea produsului. În JSON, formula este un singur șir de caractere, cu \n pentru sfârșiturile de rând.
"formula": "return {customer.customFields.exemptFromSurcharges} !== true;"Prelungirea NFC
Are sens doar dacă produsul principal are ca acțiune Prelungiți perioada de ocupare.
"extendAccessMethod": { "daysAfterPeriodEnd": 20 }La plata unei linii dintr-un astfel de pas, Tillor setează valabilitatea metodelor de acces ale clientului la data de sfârșit a liniei principale plus daysAfterPeriodEnd zile calendaristice. Implicit, valabilitatea durează până la 23:59 în fusul orar al organizației sau până la ziua din săptămână și ora din Prelungiți metoda de acces de pe produsul principal. Tot acolo stabiliți ce tipuri și ce stări se iau în calcul. Fără dată de sfârșit pe linia principală nu se întâmplă nimic. Cu Nu scurtați la prelungire activat, Tillor sare peste metodele a căror valabilitate se află deja la sau după noua dată. Un accessMethodValue pe linie indică metoda acelei linii; prelungirea în sine urmează setările produsului principal.
După o prelungire reușită, pe cronologia facturii apare o linie care trimite la plată.
Exemplu: explicație, supliment NFC, închiriere contor și câini
{
"invoiceBundle": {
"version": 1,
"steps": [
{
"stepKind": "info",
"description": "Inclusief toeristen-, gemeente- en provincietaksen"
},
{
"productId": "prd_nfc_toeslag",
"quantity": 1,
"quantityScale": "anchor_line_quantity",
"extendAccessMethod": { "daysAfterPeriodEnd": 20 },
"style": "INFO",
"billOncePerInvoice": true,
"formula": "const nfc = {accessMethods}.filter((a) => a.type === \"NFC\" && a.status === \"ACTIVE\");\nreturn nfc.slice(0, 1).map((a) => ({ quantity: 0, unitPrice: 0, accessMethodValue: a.value, description: `Toegangsmethode inclusief: ${a.label}` }));"
},
{
"productId": "prd_nfc_toeslag",
"quantity": 1,
"quantityScale": "anchor_line_quantity",
"extendAccessMethod": { "daysAfterPeriodEnd": 20 },
"billOncePerInvoice": true,
"formula": "const nfc = {accessMethods}.filter((a) => a.type === \"NFC\" && a.status === \"ACTIVE\");\nreturn nfc.slice(1).map((a) => ({ quantity: 1, accessMethodValue: a.value, description: `Toeslag extra toegangsmethode: ${a.label}` }));"
},
{
"productId": "prd_meterhuur",
"quantity": 1,
"quantityScale": "anchor_line_quantity",
"formula": "return {meters}.filter((m) => m.provider === \"ICY\" && m.type === \"ELECTRICITY\" && m.icyMetadata?.switchState === true).map((m) => ({ quantity: 1, description: `Huur digitale elektriciteitsmeter ${m.name}` }));"
},
{
"productId": "prd_hond",
"quantity": 1,
"quantityScale": "anchor_line_quantity",
"billOncePerInvoice": true,
"formula": "const dogs = Math.max(0, Math.floor(Number({customer.customFields.animals.dogs}) || 0));\nreturn dogs === 0 ? false : [{ quantity: dogs, description: `Honden (${dogs})` }];"
}
]
}
}Atenție
Verificați că toate valorile productId de la pașii de produs există în catalogul dumneavoastră. Pașii cu un produs necunoscut sunt săriți de Tillor.