Nordlet

← Dokumentacija / Vodiči

Selitev iz drugega sistema

Prenesite poslovne knjige podjetja z enim klicem – kontni načrt, partnerje, začetna stanja ali celotno zgodovino, odprte račune, osnovna sredstva in zaloge.

Ko podjetje prestopi na Nordlet iz drugega računovodskega programa, se njegove poslovne knjige ne začnejo z ničle. Uvoznik zgodovinskih poslovnih knjig vzame vse, kar vam je zapustil stari sistem, in to zapisuje v enem klicu in eni podatkovni transakciji: če ena sama vrstica pade na preverjanju, se ne shrani nič. Isti paket lahko najprej poženete prek končne točke (endpoint) samo za preverjanje, ki izvede vsa preverjanja in jih razveljavi (roll back).

POST /v1/migration/books/validate   # preveri vse, ne zapisuje ničesar
POST /v1/migration/books/import     # zapiše vse ali nič

Spletna aplikacija ima enaka dva gumba pod možnostjo Račun (Account) → Selitev (Migration) (kjer prilepite JSON ali naložite datoteko). API ključ potrebuje obseg ledger:write ter obseg pisanja za vsak vključen razdelek (partners:write, catalog:write, sales:write, purchases:write, assets:write, inventory:write). Obbe končni točki sprejemata telo (body) do velikosti 32 MB.

Datum prehoda

Izberite datum prehoda (cut-over date): prvi dan, ko podjetje posluje v Nordletu. Vse pred tem datumom ostane v starem sistemu (ali se prenese kot zgodovina, glejte spodaj); vse od tega dne dalje se v Nordlet vnese prek običajnih končnih točk. Vsi zneski v paketu so „na dan pred datumom prehoda“: zaključna salda, računi, ki so še neplačani, zaloge na polici in sredstva v registru.

Pred uvozom v Nordletu storite naslednje:

  1. Ustvarite podjetje in uveljavite predlogo kontnega načrta (ledger/accounts/apply-template) – ali pa naštete konte, ki jih potrebujete, v razdelku accounts v paketu.
  2. Ustvarite vsaj eno skladišče (inventory/warehouses/create), če uvozite zaloge.
  3. Poženite paket skozi migration/books/validate, dokler ne javi nobenih napak in sprejmete njegovih opozoril.

Paket

Vsak razdelek je opcijski; vključite tiste, ki jih imate. Vse povezave med razdelki temeljijo na šifrah (šifra konta, šifra partnerja, šifra artikla, šifra skupine sredstev, šifra skladišča), pri čemer se šifra lahko nanaša na zapis, ki že obstaja v Nordletu, ali na tistega, ki ga je ustvaril prejšnji razdelek istega paketa.

{
  "cutoverDate": "2026-01-01",
  "source": "Rivilė GAMA",
  "accounts": [
    { "code": "6210", "name": "Advertising expenses", "type": "expense", "parentCode": "6" }
  ],
  "partners": [
    { "code": "301111222", "name": "UAB Klientas", "vatCode": "LT100001112223", "isCustomer": true },
    { "code": "302222333", "name": "UAB Tiekėjas", "isCustomer": false, "isSupplier": true }
  ],
  "items": [
    { "code": "SKU-1", "name": "Widget", "type": "product", "unit": "vnt", "vatRatePercent": "21" }
  ],
  "assetGroups": [
    { "code": "TRANSP", "name": "Vehicles", "assetAccountCode": "1230", "depreciationAccountCode": "1239",
      "defaultUsefulLifeMonths": 60 }
  ],
  "openingBalances": {
    "balancingAccountCode": "3410",
    "entries": [
      { "accountCode": "2710", "debit": "5000.00" },
      { "accountCode": "2410", "debit": "1500.00" },
      { "accountCode": "2040", "debit": "300.00" },
      { "accountCode": "1230", "debit": "12000.00" },
      { "accountCode": "1239", "credit": "2400.00" },
      { "accountCode": "4430", "credit": "700.00" },
      { "accountCode": "3010", "credit": "10000.00" }
    ]
  },
  "openReceivables": [
    { "partnerCode": "301111222", "number": "SF-1050", "issueDate": "2025-12-10", "dueDate": "2026-01-09",
      "grossTotal": "1210.00", "vatTotal": "210.00" },
    { "partnerCode": "301111222", "number": "SF-1049", "issueDate": "2025-11-20",
      "grossTotal": "500.00", "outstanding": "290.00" }
  ],
  "openPayables": [
    { "partnerCode": "302222333", "documentNumber": "T-77", "documentDate": "2025-12-15", "grossTotal": "700.00" }
  ],
  "fixedAssets": [
    { "groupCode": "TRANSP", "code": "CAR-1", "name": "Delivery van", "acquisitionDate": "2025-01-01",
      "acquisitionCost": "12000.00", "accumulatedDepreciation": "2400.00", "depreciatedMonths": 12 }
  ],
  "stock": [
    { "itemCode": "SKU-1", "quantity": "30", "unitCost": "10" }
  ]
}

Zneski so decimalni nizi, kot povsod v vmesniku API. source je poljubna oznaka, ki se konča v opisu transakcije začetnega stanja in v opombah uvoženih računov.

accounts

Vrstice kontnega načrta: code, name, type (asset, liability, equity, income, expense), izbirno parentCode in isPostable. Obstoječe šifre ostanejo nespremenjene in se štejejo kot existing. To uporabite, kadar se kontni načrt starega sistema razlikuje od predloge, ali pa to preskočite in najprej uveljavite predlogo.

partners in items

Kupci, dobavitelji in artikli kataloga, določeni prek code. V Litvi je šifra partnerja običajno matična številka podjetja; za fizične osebe uporabite poljubno šifro, ki je edinstvena znotraj podjetja. Obstoječe šifre se preskočijo in se ne posodobijo. Artikli sprejemajo type (product ali service), unit, barcode, vatRatePercent, salePriceExclVat, purchasePriceExclVat.

openingBalances

Zaključna salda starega sistema, ena vrstica na kont: accountCode z ustreznim bremenom (debit) ali dobro (credit). Vrstice se knjižijo kot ena dnevniška transakcija z datumom openingBalances.date (privzeto je to datum prehoda) in vrsto dokumenta migration_opening. Vrstice se morajo nanašati na konte, na katere je mogoče knjižiti.

Transakcija mora biti uravnotežena. Če saldo starega sistema ni uravnotežen – zaradi zaokroževanja, dobička, ki nikoli ni bil prenesen v kapital, ali manjkajočega konta –, navedite balancingAccountCode (običajno preneseni dobiček, 3410 v litovski predlogi) in razlika se knjiži tja; odziv poroča o znesku kot balancingAmount.

Za posamezno podjetje je lahko prisotna samo ena transakcija začetnega stanja. Drugi uvoz z openingBalances je zavrnjen (409). Naknadni popravki so običajne ročne dnevniške transakcije (ledger/journal/transactions/create); knjižene transakcije so nespremenljive, zato izvirnik ostane takšen, kot je bil uvožen.

journal – celotna zgodovina namesto ali poleg stanj

Če želite transakcije starega sistema v Nordletu (tako da delujejo poročila za prejšnja obdobja), jih pošljite sem: en objekt na transakcijo z date, izbirnim description in reference ter vnosoma entries za accountCode + debit/credit. Vsaka transakcija mora biti sama po sebi uravnotežena. Knjižijo se z vrsto dokumenta migration.

Datumi morajo biti pred datumom prehoda. Ko paket vsebuje tudi openingBalances, mora imeti zgodovina datum na ali po openingBalances.date – običajni vzorec so stanja na začetku prejšnjega poslovnega leta plus transakcije tega leta, s prehodom na prvi dan tekočega leta. Ne pošiljajte stanj in zgodovine za isto obdobje: stanja bi bila prešteta dvakrat.

Vsak mesec, ki ga zajemajo začetna stanja ali zgodovina, mora biti odprto računovodsko obdobje (v nasprotnem primeru vrne 409).

openReceivables in openPayables

Računi, ki so bili ob prehodu še neplačani (v celoti ali delno). Ustvarijo se kot izdani izredni računi in knjiženi prejeti računi z vrednostjo paidAmount = grossTotal − outstanding, tako da usklajevanje bančnih izpiskov (bank/transactions/match, bank/transactions/suggest-matches), poročilo o zapadlosti terjatev in spletni kljukci (webhooks) za plačila delujejo z njimi tako kot pri katerem koli drugem računu.

  • outstanding je privzeto enak grossTotal; vatTotal je privzeto 0 (neto znesek se izračuna).
  • dueDate je privzeto enak datumu dokumenta.
  • currency je privzeto valuta računa podjetja. Za katero koli valuto, ki ni osnovna valuta podjetja, je obvezen fxRate – enote te valute na 1 enoto osnovne valute, kar sledi isti konvenciji kot preostali del vmesnika API – in se shrani na račun, tako da kasnejša plačila pravilno izračunajo realizirano tečajno razliko.
  • Številka izdanega računa number je polna številka iz starega sistema in mora biti edinstvena v podjetju. Prejeti računi so edinstveni glede na partnerja in documentNumber.
  • Računi niso ponovno knjiženi: njihov saldo terjatev/obveznosti je že del začetnih stanj. Povezani so s transakcijo začetnega stanja, zaradi česar openPayables zahteva openingBalances v istem paketu.
  • Postavke računa se ne uvozijo; račun vsebuje samo skupne zneske. Stari sistem ostane vir za podrobnosti postavk in za DDV registre obdobij pred prehodom.

Če je stari sistem sledil saldom kupcev brez odprtih postavk, ustvarite en račun na partnerja za saldo (na primer s številko OB-301111222), tako da ga je mogoče poravnati.

Oštevilčenje se nadaljuje. Ko ima številka uvoženega izdanega računa obliko PREFIX-N in je njen datum izdaje v letu prehoda, se serija številk za to predpono in leto nastavi na N + 1 (nikoli se ne zniža). Odziv navaja nastalo numberSeries; za druge primere sami nastavite serijo s klicem reference/series/create ({ documentType: "sale_invoice", prefix, year, startAt }).

assetGroups in fixedAssets

Osnovna sredstva se prenesejo skupaj z dosedanjim odpisanjem: acquisitionCost, salvageValue, accumulatedDepreciation, depreciatedMonths in usefulLifeMonths (ali privzeta vrednost skupine). Linearni izračun (assets/depreciation/post) se nadaljuje od preostale vrednosti v preostalih mesecih. Sredstva, katerih popravek vrednosti že dosega vrednost, ki se amortizira, se ustvarijo kot fully_depreciated (v celoti amortizirana). Nič se ne knjiži – nabavna vrednost in popravek vrednosti sta del začetnih stanj.

Skupine so določene prek code ter potrebujejo assetAccountCode in depreciationAccountCode (privzeti konto stroškov 6206).

stock

Zaloge na zalogi na posamezen artikel: itemCode, quantity, unitCost (strošek na enoto v EUR) in izbirno warehouseCode (privzeto: privzeto skladišče), lotNumber in expiryDate za artikle, ki jim sledimo po serijah ali šaržah. Vsaka vrstica postane vhodni premik zaloge z datumom na dan prehoda in vrsto dokumenta migration ter sproži FIFO sloj po tem strošku. Nič se ne knjiži – vrednost zaloge je del začetnih stanj.

Preverjanja in opozorila

Končna točka za preverjanje vrne napako (422) v primeru manjkajočih kontov, kontov, na katere ni mogoče knjižiti, neuravnoteženih transakcij, neznanih šifer partnerjev/artiklov/skupin/skladišč, podvojenih šifer ali številk znotraj paketa, odprtih zneskov nad bruto zneskom, popravka vrednosti nad amortizirljivo vrednostjo in manjkajočih tečajev. Šifre ali številke, ki že obstajajo v Nordletu, vrnejo status 409.

Poleg tega obe končni točki primerjata analitične evidence (sub-ledgers) s konti glavne knjige v istem paketu in vrnejo razlike kot warnings (opozorila) namesto napak:

  • skupni odprti znesek openReceivables v primerjavi s saldom na kontu terjatev (pravila knjiženja sales.receivable, privzeto 2410);
  • skupni odprti znesek openPayables v primerjavi s kontom obveznosti (purchases.payables, 4430);
  • skupni strošek stock v primerjavi s kontom zalog (inventory.stock, 2040);
  • na skupino sredstev: nabavna vrednost sredstev v primerjavi s kontom sredstev skupine in njihov popravek vrednosti v primerjavi s kontom amortizacije.

Opozorilo pomeni, da se analitična evidenca in glavna knjiga starega sistema ne ujemata. Pred uvozom popravite paket (ali zavestno sprejmite razliko).

Odziv

{
  "dryRun": false,
  "cutoverDate": "2026-01-01",
  "accounts": { "created": 1, "existing": 0 },
  "partners": { "created": 2, "existing": 0 },
  "items": { "created": 1, "existing": 0 },
  "assetGroups": { "created": 1, "existing": 0 },
  "openingBalances": { "journalTransactionId": "…", "date": "2026-01-01", "entries": 8,
                        "debitTotal": "18800.00", "creditTotal": "18800.00", "balancingAmount": "5700.00" },
  "journal": { "transactions": 0, "entries": 0 },
  "openReceivables": { "created": 2, "outstandingTotal": "1500.00" },
  "openPayables": { "created": 1, "outstandingTotal": "700.00" },
  "fixedAssets": { "created": 1, "costTotal": "12000.00", "accumulatedDepreciationTotal": "2400.00" },
  "stock": { "movements": 1, "costTotal": "300.00" },
  "numberSeries": [],
  "warnings": []
}

dryRun: true označuje preizkusni zagon (validate); v tem primeru je journalTransactionId enak null. Uvoz se zabeleži v revizijski sledi (audit log) kot migration.imported z istim povzetkom.

Po uvozu

  • Zaklenite obdobja pred datumom prehoda (ledger/periods/lock), da se nič pomotoma ne knjiži v uvoženo zgodovino.
  • Preverite bilanco stanja in izkaz poslovnega izida na dan prehoda glede na zaključna poročila starega sistema.
  • Nadaljujte z običajnim potekom: izdajajte račune, uvažajte bančne izpiske, usklajujte plačila – uvoženi odprti računi se poravnajo tako kot kateri koli drugi.

Česar uvoznik ne zajema: postavke računov in DDV registri preteklih obdobij (hranite jih v starem sistemu ali njegovem arhivu), zgodovina plač in dokumenti, ki niso računi (naročila, dobavnice, pogodbe).