Skip to Content
Produse

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âmpSemnificație
invoiceBundle.versionÎntotdeauna 1
invoiceBundle.stepsLista 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âmpSemnificație
productIdUn produs existent în organizația dumneavoastră. Obligatoriu
quantityNumăr mai mare decât 0, implicit 1. Cantitatea liniei fără formulă sau dacă formula returnează true
quantityScaleOpțional. "anchor_line_quantity" înmulțește fiecare cantitate calculată cu cantitatea liniei principale
descriptionOpțional. Text pentru linia de factură în locul numelui produsului; o formulă poate da fiecărei linii propriul description
styleOpțional. DEFAULT sau INFO
billOncePerInvoiceOpțional. true păstrează pasul, atunci când pe o factură sunt mai multe linii principale, doar la prima linie principală
extendAccessMethodOpțional. { "daysAfterPeriodEnd": <număr întreg, 0 până la 3660> }, consultați Prelungirea NFC
formulaOpț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.

Vezi și

A fost utilă această pagină?

Pe această pagină