Nordlet

← Blogi

What Defines an Immutable Double-Entry Ledger API

A practical breakdown of the features that separate a real accounting ledger for EU marketplaces from a mutable balance table with good marketing.

Nordlet Team · · 9 min lugemist

Turgupõhise raamatupidamise pearaamatut ei defineeri mitte see, kas see talletab rahavoogusid – seda teevad enamik süsteeme. Seda defineerib hoopis see, mis juhtub siis, kui makseteenuse pakkuja saadab sama veebikonksu (webhook) kaks korda, kui tagasimakse laekub pärast seda, kui müüjale on juba väljamakse tehtud, või kui audiitor küsib, kuidas müüja saldo jõudis oma praeguse numbrini. Just need olukorrad toovad ilmsiks, kas tegemist on muutumatu kahekordse kirjendamisega pearaamatu (immutable double-entry ledger) või lihtsalt ilusa turundusjutuga muudetava andmeväljaga.

Turuplatvormi jaoks on lühike vastus järgmine: muutumatu kahekordse kirjendamisega pearaamatu API registreerib iga finantsiliselt olulise sündmuse tasakaalus ajakirja kande (journal transaction) kujul, postitab selle aatomitena (atomically), ei kirjuta seda kunagi üle ning võimaldab teil tuletada saldosid, teostada vastastikust võrdlust (reconcile) väliste süsteemidega ning eksportida ajalugu programmiliselt. Kõik muu on selle tuuma ümber rippuv detail.

Tasakaalus ajakirja kanded, mitte jooksev saldoväli

Kõige selgem test on see, kuidas API esitab müüja saldot. Kui saldo on number, mida teie rakendus otse suurendab või vähendab, ei ole tegemist kahekordse kirjendamisega pearaamatuga. Kui saldo on postitatud ajakirja ridupõhine tuletatud vaade, siis võib tegu olla õige lahendusega.

Iga tehing peab sisaldama võrdseid deebet- ja kreeteerkirjeid. Kui ostja maksab tellimuse eest 100 eurot ja turupoolne komisjonitasu on 15 eurot, registreerib pearaamat arvelduskonto deebeti 100 eurot, müüja võlgnevuste kreediti 85 eurot ja komisjonitulu kreediti 15 eurot. Need kaks poolt summeeruvad alati samaks numbriks. See struktuurne reegel püüab kinni suure hulga vigu enne, kui need aruannetesse jõuavad.

Ajakirja tehing peaks kuvama vähemalt järgmist:

  • Unikaalne, muutumatu tehingu ID
  • Deebeti ja kreediti read, millest igaüks sisaldab kontot, summat ja valuutat
  • Tehingu kuupäev ja postitamise ajatempel
  • Ärisündmuse tüüp (müük, tagasimakse, väljamakse, tagasinõue ehk chargeback)
  • Idempotentsuse võti (idempotency key)
  • Lähteviide tellimusele, maksele või teenusepakkuja sündmusele
  • Staatus (ootel, postitatud, tühistatud)
  • Teenus või mandaat, mis selle lõi

Müüja kasutada olevad vahendid on sel juhul päring nendele ridadele, mitte väärtus, mida keegi rakenduse koodis uuendas. See on oluline, sest otse muudetud saldo kaotab iga liikumise põhjuse. Nordleti mudel käsitleb kahekordse kirjendamisega pearaamatut autoriteetse kirjutamisteena: iga dokument postitab tasakaalus ajakirja kanded ning andmebaas ise keeldub tasakaalustamata kannete vastuvõtmisest. See on õige vaikimisi lähenemine kõigile, kes integreerivad raamatupidamist turuplatvormi.

Ainult lisatav (append-only) postitamine koos korrigeerivate kannetega

Muutumatus (immutability) peaks tähendama, et postitatud ajakirja kannet ei saa kohapeal muuta. Vead parandatakse edasisuunaliste kannetega, mitte kustutamisega. Vales summas komisjonitasu kanne saab tühistamiskande, mis tühistab algse, ning selle järel korrigeeritud kande, mis kajastab soovitud tulemust. Mõlemad viitavad algsele kandele ja auditiajalugu näitab, kes muudatuse algatas ja millal.

API peaks tagasi lükkama tavapärased UPDATE ja DELETE päringud postitatud raamatupidamiskirjete kohta. See võib lubada mittefinantsiliste metaandmete lisamist, näiteks viidet klienditoe juhtumile, eeldusel, et summad, kontod ja ajatemplid jäävad puutumatuks.

Abiks on kolme mõiste eristamine, mida sageli segi aetakse:

  • Operatiivne muutumatus: rakenduse kasutajad ei saa postitatud ridu muuta ega kustutada.
  • Auditi muutumatus: süsteem suudab tõestada, et ajalugu ei ole muutunud.
  • Õiguslik säilitamine: kirjeid säilitatakse kohalduva seadusega nõutud aja jooksul.

Ainult lisatavat (append-only) tüüpi relatsiooniline andmebaas rangete õiguste, varukoopiate ja korrastatud paranduste töövoogudega tagab tõeliselt muutumatu pearaamatu. Plokiahel ei ole siin vajalik ning Euroopa Liidu raamatupidamisandmete puhul toob see tavaliselt kaasa privaatsus- ja parandusprobleeme, mis kaaluvad üles selle pakutava võltsimiskindluse.

Aatomilisus ja idempotentsus

Turuplatvormi sündmus peab postituma aatomitena – kas kõik ajakirja read salvestatakse või mitte üksi. 100-eurose laekumise salvestamine ilma 15-eurost komisjonitasu kirja panemata loob tasakaalustamata ja eksitava tulemuse, mille keegi peab hiljem lahti harutama. Nordlet tagab selle rakenduse kihist madalamal: edasilükatud andmebaasi käivitaja (trigger) kontrollib, et iga postitus on commit'i hetkel tasakaalus, nii et tasakaalustamata tehingut ei olegi võimalik salvestada.

Idempotentsus on koht, kus enamik integratsioone vaikselt laguneb. Maksesüsteemid teevad võrgutõrgete korral korduskatseid ja arveldusfaile esitatakse uuesti. Ilma rentniku või kontoga seotud idempotentsuse võtmeta loob üksainus korduv päring topeltraamatupidamise. Korduv päring sama võtmega peab tagastama algse tehingu, mitte teise.

Võti peaks olema seotud algse sündmuse, sündmuse tüübi, teenusepakkuja sündmuse ID, juriidilise isiku ja päringu sisu räsiga (hash). Kui sama võti saabub erineva summa või valuutaga, peab API seda käsitlema kokkupõrkena ja tagasi lükkama, mitte uut sisu vaikimisi aktsepteerima. Vaikimisi aktsepteerimine ongi see, kuidas auditijäljed lagunevad. Nordleti Idempotency-Key päis toimib täpselt nii: sama võtme ja sisuga korduskatse esitab uuesti salvestatud vastuse ning sama võti erineva sisuga lükatakse tagasi veaga idempotency_key_reuse. See on väike funktsioon, millel on üllatavalt suur mõju vastastikusele võrdlusele (reconciliation).

Mitmepoolne jagatud raamatupidamine (multi-party split accounting)

Turuplatvormi tellimus ei ole üksainus liikumine. Üksainus müük võib puudutada ostja raha, müüja tulu, turuplatvormi komisjonitasu, maksetöötlustasusid, komisjonitasu käibemaksu, saatmiskulusid ja reserve. Pearaamat vajab kontostruktuure, mis hoiavad need eraldi, selle asemel et suruda need kokku üheks netosummaks.

Levinud on eeldus, millele tasub vastu vaielda: makseteenuse pakkuja "split payout" ehk väljamaksete jagamise funktsioon ei ole sama mis turuplatvormi raamatupidamine. Raha jagamine saajate vahel liigutab sularaha. See ei anna teile täielikku ja muutumatut arvestust teenitud komisjonitasu, kogutud käibemaksu, maksmisele kuuluvate tagasimaksete ega hoitud reservide kohta. Teil on siiski vaja oma pearaamatut ja te peate seda teenusepakkujaga võrdlema.

Turuplatvormi pearaamat peaks eristama ka enamat kui ühte müüja saldot:

Saldo staatus Mida see esindab
Ootel (Pending) Vahendid, mis on seotud sündmusega, kuid ei ole veel väljamaksmiseks kõlblikud
Saadaval (Available) Vahendid, mis läbivad vabastamise, reservi, tagasimakse ja vaidluste reeglid
Kinni / reserveeritud (Held / reserved) Tagasinõuete, tagastuste või pettuste tõrje jaoks kinni hoitud summad
Välja makstud (Paid out) Müüjale üle kantud summad
Negatiivne / sissenõutav (Negative / recoverable) Summad, mida müüja on võlgu pärast seda, kui tagasimaksed või tasud ületavad saadaolevaid vahendeid

Raha liigutamine ootel staatusest saadaval staatusesse peaks ise olema tasakaalus ajakirja kanne, mitte ümber märgistatud väli.

Tagasipööramised, tagasimaksed ja negatiivsed saldod

Turuplatvormi raha voolab mõlemas suunas, sageli vales järjekorras. Keerulised juhul on tagasimaksed pärast väljamakset ja tagasinõuded, mis saabuvad nädalaid hiljem. Tõsine pearaamat defineerib, mis juhtub siis, kui müüja saadaval saldo ei kata tagasimakset: luuakse negatiivne saldo, summa kantakse müüja nõuete alla, kasutatakse reservi või piiratakse edasisi väljamakseid.

Iga selline sündmus peaks viitama algsele tehingule ja säilitama selle. Pearaamat registreerib tagasimakse raamatupidandusliku tagajärje. See ei otsusta turuplatvormi tagasimaksepoliitikat ega juriidilist vastutust. Selle piiri selgena hoidmine hoiab ära palju segaseid arutelusid disaini üle.

Valuutad ja täpsus

Piiriülesed turuplatvormid vajavad selget rahakäitlust. Summad peaksid kasutama ISO 4217 valuutakoode ja täpset esitust, kas täisarvulisi sendiühikuid (minor units) või fikseeritud täpsusega kümnendkohtade stringe, mitte kunagi ujukomaarve (floats). Ei mingeid vaikimisi ümardamisi. Konverteerimisel peab pearaamat säilitama algse summa, valuutakursi, kursi allika, ajatempli ja tulemuse summa, kusjuures ümardamiserinevused postitatakse määratud kontole.

Üksainus tasakaalus tehing ei tohiks segada valuutasid ilma selge valuutavahetusmehhanismita. Kui see nii on, ei lähe teie aruanded tegelikkusega kokku viisil, mida on kuu lõpus valus tuvastada.

Vastastikune võrdlus väliste süsteemidega (reconciliation)

Sisemiselt tasakaalus pearaamat ei ole iseenesest autoriteetne. See peab olema kooskõlas välismaailmaga: makseteenuse pakkuja tehingud, teenusepakkuja tasud, arveldusaruanded, pangaväljavõtted, väljamaksefailid ja tagasinõuete aruanded.

Küps API toetab imporditud väliseid sündmusi ja sobitusolekuid, nagu sobitatud (matched), osaliselt sobitatud (partially matched), sobitamata (unmatched), duplikaat, summa ei klapi (amount mismatch) ja vajab ülevaatamist (needs review). Võrdluserinevused peaksid looma selged erandkirjed või raamatupidamiskanded. Need ei tohiks kunagi vaikselt pearaamatu ajalugu ümber kirjutada. Nordleti lähenemine pangakonto ja maksete sobitamisele põhineb sellel põhimõttel: imporditud väljavõtted ja Stripe'i ekspordid jätavad vahele kõik, mis on juba imporditud, maksesoovitused hinnatakse summa, viite, vastaspoole ja IBAN-i alusel, ühe klõpsuga sobitamine lahendab rutiinsed juhud ja erandid tuuakse esile, selle asemel et neid varjata.

EL-i piirid, mida API peaks austama, ja need, mida see ei saa teha

Siin kipuvad turunduslubadused tegelikkusest ette jooksma. Pearaamat aitab EL-i kohustuste täitmisel, kuid see ei täida neid iseenesest.

Käibemaks. Pearaamat peaks säilitama maksustamise seisukohast olulised mõõtmed: jurisdiktsioon, maksumäär, maksukategooria ja selle määratlemise viis. See peaks eristama müüja müüki ostjale turuplatvormi komisjonitasust ning eraldama teenustasude käibemaksu lihtsalt läbiliikuvatest summadest. Nordlet käsitleb riigipõhiseid käibemaksuarvutusi, VIES-i valideerimist ja i.SAF registri genereerimist koos OSS-i ja IOSS-i stsenaariumidega, millega EL-i turuplatvormid kokku puutuvad. Käsitsege pearaamatut tõendi ja maksumootorina, mitte maksunõuandena.

DAC7. Platvormi aruandluskohustused nõuavad usaldusväärseid seoseid müüja identiteedi, jurisdiktsiooni, tehingute kogusummade, tasude, tagasimaksete ja väljamaksete vahel. Tasakaalus pearaamat toodab tehingutõendid. See ei määra, kas müüja kuulub aruandluse alla, ega asenda KYC-d, kliendiks registreerimist (onboarding) või aruandluse töövoogu. Hoidke tehingute raamatupidamine ja regulatiivne aruandlus eraldi teemadena.

PSD2 ja rahaliste vahendite hoidmine. Rahavoogude registreerimine ei ole sama mis litsentseeritud makseteenuse osutamine või vahendite kaitsmine. Pearaamat peab tegema rahavood ja osapooled selgesõnaliseks. See ei saa iseenesest tagada makseteenuste litsentsi ega tõestada, et sularaha hoitakse teatud kontol. See on endiselt teie regulatiivse rolli ja makseteenuse pakkuja küsimus.

GDPR. Andmete muutumatus tekitab tõelisi pingeid andmekaitsepõhimõtetega. Turvalisem arhitektuur hoiab rahalised faktid muutumatus tuumas ja isikuandmed sellest väljas. Kasutage ajakirja ridades stabiilseid pseudonüümitud müüja ja kliendi viiteid. Salvestage muutuvad isikuandmed eraldi, juurdepääsuga piiratud süsteemis, millel on oma säilitamis- ja kustutamistöövoog. "Muutumatu" ei ole luba säilitada iga makseandmepaketti igavesti.

Kontroll-leht pearaamatu API hindamiseks

Funktsioonide sildid on odavad. Testige käitumist selle asemel liivakastis (sandbox). Käivitage need stsenaariumid ja kontrollige tõendeid:

  • Postitage 100-eurone tellimus, mis on jagatud müüja ja turuplatvormi vahel, ning kinnitage tasakaalus ajakiri selgete kontodega.
  • Saatke sama päring kaks korda ja kinnitage üks tehing, mitte duplikaati.
  • Proovige redigeerida postitatud kirjet ja kinnitage, et see lükatakse tagasi või piirdutakse mittefinantsiliste metaandmetega.
  • Parandage vale komisjonitasu ja kinnitage lingitud tagasipööramine pluss korrigeeritud kanne.
  • Väljastage osaline tagasimakse pärast väljamakset ja kinnitage jälgitav tagasimakse koos müüja nõude või vajadusel negatiivse saldoga.
  • Esitage teenusepakkuja veebikonks uuesti ja kinnitage duplikaatide tuvastamine.
  • Töötle mitme valuutaga arveldust ning kinnita valuutavahetuse üksikasjad ja konverteerimise raamatupidamine.
  • Päri müüja saldo perioodi lõpus ja kinnita reprodutseeritav tulemus dokumenteeritud sulgemisajaga.
  • Impordi teenusepakkuja arveldus ja kinnita sobitamine erandistaatusega, mis jätab ajaloo puutumatuks.
  • Ekspordi kuu tegevus ja kinnita täielik, lehekülgedeks jagatud, korratav väljavõte.

Kõige tugevam tõend on dokumentatsioon koos reprodutseeritava testiga. Sõnad nagu "reaalajas", "auditivalmis" ja "muutumatu" ei tähenda midagi ilma nende taga olevate andmemudeli, veasemantika ja säilitamiskäitumiseta.

Mida me kontrolliksime esimesena

Kui me hindaksime homme turuplatvormi jaoks pearaamatu API-d, alustaksime enne millegi muu vaatamist kahest asjast. Esiteks, tehke kindlaks, et müüja saldo tuletatakse ajakirja ridadest, mitte muudetavast väljast, sest kõik allavoolu sõltub sellest. Teiseks, esitage sama veebikonks uuesti ja kinnitage täpselt üks raamatupidamistulemus. Need kaks testi räägivad teile aluseks oleva disaini kvaliteedist rohkem kui ükski funktsioonide loetelu.

Pärast seda on API-kesksed kaalutlused olulised selleks, kui kiiresti teie meeskond asju tarnib: tüübitud SDK-d, veebikonksud selliste sündmuste jaoks nagu sale_invoice.paid, toimiv liivakast ja perioodide lukustamine suletud kuude kaitsmiseks. Nordlet ehitati selle mudeli ümber, kusjuures API kaudu on saadaval samad funktsioonid mis rakenduse kaudu, mis võimaldabki platvormil käitada oma tootes auditivalmis raamatupidamist ilma kolmanda osapoole kassat lisamata. Laiema pildi saamiseks selle kohta, kuidas selline pearaamat turuplatvormi arhitektuuri sobib, vaadake meie juhendit turuplatvormi raamatupidamise kahekordse kirjendamisega pearaamatu API-de kohta.

FAQ

Kas kahekordne kirjendamine tagab minu raamatupidamise õigsuse?

Ei. Pearaamat võib olla täielikult tasakaalus, samal ajal kui kanded tehakse valedele kontodele, rakendatakse vale käibemaksumaksu või omistatakse vahendid valele müüjale. Tasakaal on struktuurne kontroll, mis püüab kinni aritmeetilised vead ja tehingu puuduvad pooled. See ei ütle midagi selle kohta, kas teie ärikingika loogika kaardistas sündmuse õigesti. Seetõttu on liivakasti testimine reaalsete stsenaariumide vastu olulisem kui pelgalt saldokontroll.

Kas makseteenuse pakkuja pearaamatust turuplatvormile piisab?

Tavaliselt mitte. Makseteenuse pakkuja jälgib vahendeid oma süsteemis, mis on kasulik liikumiseks ja väljamakseteks. Teie turuplatvorm vajab endiselt oma arvestust komisjonitulu, müüja kohustuste, tasude käibemaksu, tagasimaksete, reservide, vaidluste ja juhtkonna aruandluse jaoks. Neid kahte süsteemi tuleb omavahel võrrelda ning teenusepakkuja vaate käsitlemine teie raamatupidamisena jätab lüngad, mis tulevad auditiajal ilmsiks.

Kas ma vajan pearaamatu muutumatuks tegemiseks plokiahelat?

Ei. Ainult lisatav (append-only) relatsiooniline hoidla rangete kirjutamisõiguste, kontrollitud korrigeerimistöövoogude, audtilogimise ja usaldusväärsete varukoopiatega tagab teile operatiivse ja auditi muutumatuse. Plokiahel lisab hajutatud võltsimiskindluse, kuid toob kaasa privaatsus-, jõudlus- ja parandusraskused, mis töötavad vastu EL-i raamatupidamis- ja GDPR-i nõuetele. Enamiku turuplatvormide jaoks lahendab see probleemi, mida neil pole.

Kas muudetamatu pearaamat võib GDPR-i alusel andmeid igavesti säilitada?

Raamatupidamisdokumentide säilitamine seadusega ette nähtud aja jooksul on lubatud. Täielike isikuandmete või makseandmepakettide säilitamine määramata ajaks põhjusel, et pearaamat on muutumatu, ei ole lubatud. Hoidke rahalised faktid ja pseudonüümitud viited muutumatus tuumas ning isikuandmed eraldi süsteemis koos nõuetekohase säilitamise ja kustutamisega. Muutumatus kehtib finantssündmuse, mitte iga sellega seotud andmetüki kohta.