Nordlet

← Blog

Čo definuje API nezmeniteľnej účtovníctva s podvojným zápisom (immutable double-entry ledger API)

Praktický pohľad na vlastnosti, ktoré oddeľujú skutočnú účtovnú knihu pre európske trhoviská od tabuľky so zmeniteľnými zostatkami a dobrým marketingom.

Nordlet Team · · 11 min. čítania

Účtovná kniha (ledger) pre trhovisko sa nerozpoznáva podľa toho, či ukladá pohyby peňazí. To robí väčšina systémov. Rozpoznáva sa podľa toho, čo sa stane, keď poskytovateľ platatieb pošle rovnaký webhook dvakrát, keď dorazí vrátenie peňazí (refundácia) po tom, čo predajca už dostal vyplatené peniaze, alebo keď auditor položí otázku, ako zostatok predajcu dospel k aktuálnemu číslu. Tieto momenty ukážu, či máte nezmeniteľnú účtovnícku knihu s podvojným zápisom (immutable double-entry ledger), alebo len pole so zmeniteľnými hodnotami a pekným názvom.

Stručná odpoveď pre platformu prevádzkujúcu trhovisko je nasledovná: API nezmeniteľného účtovníctva s podvojným zápisom zaznamenáva každú finančne významnú udalosť ako vyrovnanú transakciu denníka (journal transaction), zaúčtuje ju atómovo, nikdy ju neprepisuje a umožňuje vám odvodzovať zostatky, párovať ich s externými systémami a programovo exportovať históriu. Všetko ostatné je len nadstavba visiaca na tomto jadre.

Vyrovnané položky denníka namiesto poľa pre priebežný zostatok

Jediným najjasnejším testom je to, ako API reprezentuje zostatok predajcu. Ak je zostatok číslo, ktoré vaša aplikácia priamo zvyšuje alebo znižuje, nejde o účtovnú knihu s podvojným zápisom. Ak je zostatok odvodeným zobrazením zaúčtovaných riadkov denníka, potom ním byť môže.

Každá transakcia musí obsahovať rovnaké sumy na strane má dať (debit) a dal (credit). Keď kupujúci zaplatí 100 EUR za objednávku, pri ktorej si trhovisko berie províziu 15 EUR, účtovná kniha zaeviduje zúčtovací účet so záťažou 100 EUR oproti záväzku voči predajcovi v sume 85 EUR a výnosom z provízií v sume 15 EUR. Obidve strany dávajú vždy v súčte rovnakú hodnotu. Toto štrukturálne pravidlo zachytí veľké množstvo chýb predtým, než sa dostatočne prejavia v reportoch.

Transakcia denníka by mala vykazovať minimálne:

  • Unikátne, nezmeniteľné ID transakcie
  • Riadky má dať a dal, pričom každý obsahuje účet, sumu a menu
  • Dátum uskutočnenia účtovného prípadu a časovú pečiatku zaúčtovania
  • Typ obchodnej udalosti (predaj, vrátenie peňazí, výplata, chargeback)
  • Identifikátor idempotencie (idempotency key)
  • Zdrojový odkaz na objednávku, platbu alebo udalosť poskytovateľa
  • Stav (čakajúce, zaúčtované, stornované)
  • Službu alebo prihlasovacie údaje, ktoré záznam vytvorili

Dostupné prostriedky predajcu sa potom zistia dopytom nad týmito riadkami, nie hodnotou, ktorú niekto aktualizoval v kóde aplikácie. To je dôležité, pretože priamo mutovaný zostatok stráca dôvod pre každý jeden pohyb. Model Nordletu pristupuje k účtovnej knihe s podvojným zápisom ako k smerodajnej ceste zápisu (/en/features/): každý dokument zaúčtuje vyrovnané položky denníka a samotná databáza odmietne tie, ktoré nie sú vyrovnané. To je správne predvolené správanie pre každého, kto implementuje účtovníctvo do trhoviska.

Zápis len na pridávanie (append-only) s kompenzačnými opravami

Slovo „nezmeniteľný“ (immutable) by malo znamenat, že zaúčtovaný denník sa nedá upravovať priamo na mieste. Chyby sa opravujú vpred, nie vymazávaním. Nesprávny záznam provízie dostane storno, ktoré vynuluje pôvodný zápis, a následne opravený záznam, ktorý zaeviduje zamýšľaný výsledok. Obidva sú prepojené s pôvodným záznamom a auditná história ukazuje, kto zmenu inicioval a kedy.

API by malo odmietnuť bežné príkazy UPDATE a DELETE nad zaúčtovanými účtovnými záznamami. Môže vám však umožniť pripojiť nefinančné metadáta, napríklad odkaz na prípad podpory (support case), pokiaľ sumy, účty a časové pečiatky zostanú nedotknuté.

Je užitočné oddeliť od seba tri veci, ktoré si ľudia často mýlia:

  • Prevádzková nezmeniteľnosť: používatelia aplikácie nemôžu meniť ani vymazávať zaúčtované riadky.
  • Auditná nezmeniteľnosť: systém dokáže preukázať, že história sa nezmenila.
  • Zákonná archivácia: záznamy sa uchovávajú po dobu vyžadovanú príslušnými právnymi predpismi.

Relačná databáza fungujúca výhradne na pridávanie záznamov (append-only) s prísnymi oprávneniami, zálohami a disciplinovanými postupmi stornovania vytvára skutočne nezmeniteľnú účtovnú knihu. Blockchain tu nie je nutnosťou a v prípade účtovných údajov v EÚ zvyčajne prináša problémy s ochranou súkromia a opravami, ktoré prevyšujú pridanú hodnotu dôkazu proti neoprávnenej manipulácii.

Atómovosť a idempotencia

Udalosť na trhovisku sa musí zaúčtovať atómovo. Buď sa zaevidujú všetky riadky denníka, alebo žiaden. Zaznamenanie príjmu 100 EUR bez zaznamenania provízie 15 EUR vedie k nevyrovnanému a zavádzajúcemu výsledku, ktorý musí niekto neskôr rozpletať. Nordlet vynucuje toto pravidlo pod vrstvou aplikácie: odložený databázový trigger kontroluje, či je každý zápis v čase commitu vyrovnaný, takže nevyrovnanú transakciu nie je možné vôbec uložiť.

Idempotencia je miesto, kde sa väčšina integrácií potichu kazí. Platobné systémy opakujú požiadavky pri výpadkoch siete a súbory so zúčtovaním sa spúšťajú opakovane. Bez kľúča idempotencie obmedzeného na konkrétneho nájomcu (tenant) alebo účet vytvorí jediná opakovaná požiadavka duplicitné účtovníctvo. Opakovaná požiadavka s rovnakým kľúčom by mala vrátiť pôvodnú transakciu, nie druhú v poradí.

Kľúč by mal byť viazaný na pôvodnú udalosť, typ udalosti, ID udalosti poskytovateľa, právny subjekt a hash dátovej časti požiadavky (payload). Ak dorazí rovnaký kľúč s inou sumou alebo menou, API by to malo považovať za kolíziu a odmietnuť ho namiesto toho, aby ticho prijalo nové dáta. Tiché prijatie je spôsob, akým sa rozpadávajú auditné stopy. Hlavička Idempotency-Key v Nordlete (/en/api-docs/) funguje presne takto: opakovaný pokus s rovnakým kľúčom a payloadom zopakuje uloženú odpoveď a rovnaký kľúč s iným payloadom sa odmietne s chybou idempotency_key_reuse. Je to malá funkcia s obrovským vplyvom na párovanie a rekonciliáciu.

Viacstranové rozdelené účtovníctvo (split accounting)

Objednávka na trhovisku nie je jeden pohyb. Samotný predaj sa môže dotýkať prostriedkov kupujúceho, výťažku predajcu, provízie trhoviska, poplatkov za spracovanie platby, DPH z provízie, dopravy a rezerv. Účtovná kniha potrebuje štruktúry účtov, ktoré tieto zložky udržujú oddelené namiesto toho, aby ich zlúčili do jednej čistej sumy.

Existuje bežný predpoklad, voči ktorému sa oplatí vymedziť: funkcia „rozdelenej výplaty“ (split payout) od poskytovateľa platatieb nie je to isté ako účtovníctvo trhoviska. Rozdeľovanie peňazí medzi príjemcov iba presúva hotovosť. Poskytuje vám to kompletný, nezmeniteľný záznam o zarobenej provízii, vybranej DPH, dlžných refundáciách alebo zadržaných rezervách? Nie celkom, stále potrebujete vlastnú účtovnú knihu a musíte ju párovať s poskytovateľom.

Účtovná kniha trhoviska by mala tiež rozlišovať viac ako jeden zostatok predajcu:

Stav zostatku Čo predstavuje
Čakajúce (Pending) Prostriedky viazané na udalosť, ktoré však ešte nie sú oprávnené na výber
Dostupné (Available) Prostriedky, ktoré prešli pravidlami uvoľnenia, rezerv, refundácií a sporov
Zadržané / rezervované (Held / reserved) Sumy zadržané pre prípad chargebackov, vrátení tovaru alebo kontroly podvodov
Vyplacené (Paid out) Sumy prevodené predajcovi
Záporné / vymáhateľné (Negative / recoverable) Sumy, ktoré predajca dlhuje po tom, čo refundácie alebo poplatky prevýšili dostupné prostriedky

Presun peňazí z čakajúcich na dostupné by mal byť sám o sebe vyrovnanou transakciou denníka, nie premenovaným poľom.

Storná, refundácie a záporné zostatky

Peniaze na trhovisku prúdia oboma smérami, často mimo poradia. Ťažkými prípadmi sú refundácie po výplate a chargebacky, ktoré dorazia o niekoľko týždňov neskôr. Seriózna účtovná kniha definuje, čo sa stane, keď dostupný zostatok predajcu nemôže pokryť refundáciu: vytvorí sa záporný zostatok, suma sa presunie do pohľadávok voči predajcovi, siahne sa na rezervu alebo sa obmedzia ďalšie výplaty.

Každá z týchto udalostí by mala odkazovať na pôvodnú transakciu a zachovať ju. Účtovná kniha zaznamenáva účtovný dôsledok refundácie. Nerozhoduje o pravidlách refundácie trhoviska ani o jeho právnej zodpovednosti. Udržiavanie tejto hranice zabraňuje mnohým mätúcim konštrukčným debatám.

Meny a presnosť

Cezhraničné trhoviská vyžadujú explicitnú prácu s peniazmi. Sumy by mali používať kódy mien podľa normy ISO 4217 a presnú reprezentáciu, buď celočíselné menšie jednotky (minor units), alebo desatinné reťazce s pevnou presnosťou, nikdy nie desatinné čísla s plávacou rádovou čiarkou (floats). Žiadne tiché zaokrúhľovanie. Keď dôjde k prepočtu meny, účtovná kniha by mala zachovať pôvodnú sumu, výmenný kurz, zdroj kurzu, časovú pečiatku a výslednú sumu, pričom rozdiely zo zaokrúhľovania sa zaúčtujú na určený účet.

Jediná vyrovnaná transakcia by nemala miešať meny bez explicitného mechanizmu prepočtu meny. Ak to robí, vaše reporty sa budú rozchádzať s realitou spôsobom, ktorý je na konci mesiaca bolestivé dohľadávať.

Párovanie (reconciliation) s externými systémami

Interná vyrovnaná účtovná kniha nie je sama osebe smerodajná. Musí sa zhodovať s vonkajším svetom: transakciami poskytovateľa platieb, poplatkami poskytovateľa, zúčtovacími výkazmi, bankovými výpismi, súbormi výplat a hláseniami o chargebackoch.

Vyzreté API podporuje importované externé udalosti a stavy zhody, ako sú spárované, čiastočne spárované, nespárované, duplicitné, nesúhlasná suma a vyžaduje kontrolu. Rozdiely pri párovaní by mali vytvárať explicitné záznamy o výnimkách alebo účtovné zápisy. Nikdy by nemali potichu prepisovať históriu v účtovnej knihe. Prístup Nordletu k bankovému párovanie a párovaniu platieb stojí na tomto princípe: importované výpisy a exporty zo Stripe preskakujú všetko, čo už bolo importované, návrhy platieb sa bodujú podľa sumy, variabilného symbolu/odkazu, protistrany a IBANu, párovanie jedným kliknutím rieši bežné prípady a výnimky sú zobrazené na kontrolu namiesto toho, aby sa potlačili.

Hranice v EÚ, ktoré by API malo rešpektovať, a tie, ktoré nemôže

Tu platí, že marketingové vyhlásenia majú tendenciu predbiehať realitu. Účtovná kniha pomáha s povinnosťami v EÚ, ale sama o sebe ich nespĺňa.

DPH. Účtovná kniha by mala zachovávať rozmery relevantné pre dane: jurisdikciu, sadzbu, daňovú kategóriu a spôsob stanovenia sadzby. Mala by rozlišovať predaj predajcu kupujúcemu od provízie trhoviska a oddeliť DPH z poplatkov od súm, ktoré len prechádzajú systémom. Nordlet zvláda výpočty DPH pre jednotlivé krajiny, overovanie VIES a generovanie registrov i.SAF spolu so scenármi OSS a IOSS (/en/docs/guides/eu-vat/), s ktorými sa európske trhoviská stretávajú. Účtovnú knihu berte ako dôkaz a daňový nástroj, nie ako daňové poradenstvo.

DAC7. Pravidlá vykazovania pre platformy vyžadujú spoľahlivé prepojenia medzi totožnosťou predajcu, jurisdikciou, celkovými transakciami, poplatkami, refundáciami a výplatami. Vyrovnaná účtovná kniha produkuje dôkazy o transakciách. Neurčuje však, či je predajca podliehajúci vykazovaniu, a nenahrádza procesy KYC (poznaj svojho zákazníka), onboarding ani samotný pracovný postup vykazovania. Účtovníctvo transakcií a regulatórne hlásenia udržujte oddelene.

PSD2 a úschova peňazí. Zaznamenávanie pohybov peňazí nie je to isté ako byť licencovanou platobnou službou alebo chrániť finančné prostriedky. Účtovná kniha by mala jasne ukazovať tok peňazí a zapojené strany. Nemôže však sama o sebe poskytnúť autorizáciu na poskytovanie platobných služieb ani dokázať, že hotovosť je držaná na konkrétnom účte. To zostáva otázkou vašej regulačnej úlohy a vášho poskytovateľa platobných služieb (PSP).

GDPR. Nezmeniteľnosť vytvára skutočné napätie so zásadami ochrany údajov. Najbezpečnejšia architektúra udržuje peňažné fakty v nezmeniteľnom jadre a osobné údaje mimo neho. V riadkoch denníka používajte stabilné pseudonymné odkazy na predajcov a zákazníkov. Meniteľné osobné údaje ukladajte v samostatnom systéme s prístupom chráneným oprávneniami a s vlastným procesom uchovávania a vymazávania. „Nezmeniteľnosť“ nie je licenciou na to, aby ste navždy uchovávali každý platobný payload.

Kontrolný zoznam na hodnotenie API účtovnej knihy

Názvy funkcií sú lacné. Otestujte správanie radšej v pieskovisku (sandbox). Spustite tieto scenáre a skontrolujte výsledky:

  • Zaúčtujte objednávku v hodnote 100 EUR rozdelenú medzi predajcu a trhovisko a overte vyrovnaný denník s explicitnými účtami.
  • Pošlite rovnakú požiadavku dvakrát a overte, že vznikla iba jedna transakcia a žiadna duplicita.
  • Pokúste sa upraviť zaúčtovaný záznam a overte, že bol odmietnutý alebo obmedzený len na nefinančné metadáta.
  • Opravte nesprávnu províziu a overte, že vzniklo prepojené storno plus opravený záznam.
  • Vydajte čiastočnú refundáciu po výplate a overte sledovateľnú refundáciu s pohľadávkou voči predajcovi alebo záporným zostatkom tam, kde je to potrebné.
  • Zopakujte webhook od poskytovateľa a overte detekciu duplicity.
  • Spracujte zúčtovanie vo viacerých menách a overte detaily FX a účtovanie prepočtu.
  • Vyhľadajte zostatok predajcu na konci obdobia a overte reprodukovateľný výsledok s doloženým medzisúčtom k určitému dátumu.
  • Importujte zúčtovanie od poskytovateľa a overte párovanie so stavom výnimky, pričom história zostane nedotknutá.
  • Exportujte mesiac aktivity a overte kompletný, stránkovaný a opakovateľný výpis.

Najsilnejším dôkazom je dokumentácia spolu s reprodukovateľným testom. Slová ako „v reálnom čase“, „pripravené na audit“ a „nezmeniteľné“ neznamenajú nič bez dátového modelu, sémantiky chýb a správania pri uchovávaní údajov, ktoré za nimi stojí.

Čo by sme skontrolovali ako prvé

Ak by sme zajtra hodnotili API účtovnej knihy pre trhovisko, začali by sme dvoma vecami predtým, než sa pozrieme na čokoľvek iné. Najprv overte, že zostatok predajcu je odvodený z riadkov denníka a nie zo zmeniteľného poľa, pretože všetko ostatné na tom závisí. Po druhé, zopakujte ten istý webhook a potvrďte presne jeden účtovný výsledok. Tieto dva testy vám o kvalite základného návrhu povedia viac než akýkoľvek zoznam funkcií.

Potom sú dôležité hľadiská zamerané na API, ktoré určujú, ako rýchlo váš tím dodá funkcie: typované SDK, webhooky pre udalosti ako sale_invoice.paid (/en/api-docs/), funkčné pieskovisko a uzávierky období na ochranu zatvorených mesiacov. Nordlet bol vytvorený okolo tohto modelu, pričom rovnaká množina funkcií je dostupná cez API aj cez aplikáciu, čo umožňuje platforme prevádzkovať auditovateľné účtovníctvo vo vlastnom produkte namiesto napájania externého pokladničného systému. Širší obraz o tom, ako takáto účtovná kniha zapadá do štruktúry trhoviska, nájdete v našom sprievodcovi API účtovnej knihy s podvojným zápisom pre účtovníctvo trhísk (/en/blog/double-entry-ledger-api-marketplace-accounting/).

FAQ

Zaručuje podvojný zápis správnosť môjho účtovníctva?

Nie. Účtovná kniha môže byť dokonale vyrovnaná, aj keď účtuje na nesprávne účty, uplatňuje nesprávnu DPH alebo priraďuje finančné prostriedky nesprávnemu predajcovi. Rovnováha je štrukturálna kontrola, ktorá zachytáva aritmetické chyby a chýbajúce strany transakcie. Nevypovedá nič o tom, či vaša podniková logika správne namapovala udalosť. Preto je testovanie v pieskovisku reálnymi scenármi dôležitežejšie než samotná kontrola zostatku.

Stačí pre trhovisko účtovná kniha poskytovateľa platatieb?

Zvyčajne nie. Poskytovateľ platatieb sleduje finančné prostriedky vo svojom vlastnom systéme, čo je užitočné pre pohyby a výplaty. Vaše trhovisko stále potrebuje vlastné záznamy pre výnosy z provízií, záväzky voči predajcom, DPH z poplatkov, refundácie, rezervy, spory a manažérske výkazy. Oba systémy je nutné vzájomne zosúladiť a spoliehanie sa na pohľad poskytovateľa ako na jediné účtovníctvo vytvára medzery, ktoré sa prejavia počas auditu.

Potrebujem blockchain na to, aby bola účtovná kniha nezmeniteľná?

Nie. Relačné úložisko fungujúce výhradne na pridávanie záznamov (append-only) s prísnymi oprávneniami na zápis, kontrolovanými pracovnými postupmi opráv, protokolovaním auditov a spoľahlivými zálohami vám poskytuje prevádzkovú a auditnú nezmeniteľnosť. Blockchain pridáva distribuovaný dôkaz proti manipulácii, ale prináša problémy s ochranou súkromia, výkonom a opravami, ktoré idú proti požiadavkám na účtovníctvo EÚ a nariadeniu GDPR. Pre väčšinu trhísk rieši problém, ktorý nemajú.

Môže nezmeniteľná účtovná kniha uchovávať údaje navždy podľa GDPR?

Uchovávanie účtovných záznamov po zákonom vyžadovanú dobu je v poriadku. Uchovávanie úplných osobných údajov alebo platobných payloadov na neurčito len preto, že účtovná kniha je nezmeniteľná, však v poriadku nie je. Peňažné fakty a pseudonymné odkazy uchovávajte v nezmeniteľnom jadre a osobné údaje držte v samostatnom systéme so správnym riadením uchovávania a vymazávania. Nezmeniteľnosť sa vzťahuje na finančnú udalosť, nie na každý údaj, ktorý je k nej pripojený.