Kaip veikia ERP sistemos: moduliai, duomenų srautas ir po jais esanti didžioji knyga
Viena ūkinė operacija, atsekta per visus ERP modulius, pateikiant faktinius dvejybinius įrašus ir paaiškinant, kodėl didžioji knyga yra pagrindinis šaltinis, iš kurio skaitoma visa kita.
ERP sistema veikia įrašydama kiekvieną verslo įvykį vieną kartą, vienoje duomenų bazėje, ir leidžiant kiekvienam moduliui skaityti bei rašyti į šį bendrą įrašą. Išsiųstas užsakymas yra lygiai tas pats įrašas, nesvarbu, ar į jį žiūri sandėlis, pardavimų komanda, ar buhalteris. Modulis, kuris užtikrina visos sistemos teisingumą, yra didžioji knyga (general ledger): kiekvienas piniginę vertę turintis įvykis ten baigiasi subalansuotu buhalteriniu įrašu, o visos ataskaitos yra sudaromos remiantis šiais įrašais.
Šiame straipsnyje viena pardavimo operacija sekama per modulius, parodomi jos sugeneruoti buhalteriniai įrašai ir paaiškinama, kodėl integracija su ERP yra susijusi su įvykiais ir didžiąja knyga, o ne su ekranais.
Bendroji duomenų bazė
Prieš atsirandant ERP, kiekvienas departamentas naudojo savo programą. Atsargos buvo saugomos sandėlio sistemoje, sąskaitos faktūros – sąskaitų išrašymo sistemoje, o apskaita – apskaitos pakete. Mėnesio pabaiga būdavo praleidžiama jas derinant. Straipsnyje Kas yra ERP programinė įranga paaiškinama ši kategorija; o mechanizmas, leidžiantis jai veikti, yra vienas duomenų modelis, kuriame:
- partnerio (partner) įrašą vienodai naudoja pardavimai, pirkimai ir didžioji knyga,
- prekės (item) įraše saugomi atsargų kiekis, FIFO savikainos sluoksniai, pardavimo kaina ir pajamų sąskaita,
- dokumentas (užsakymas, sąskaita faktūra, kreditinė sąskaita faktūra, pirkimas, gamybos užsakymas) nurodo partnerius bei prekes ir sukuria lygiai vieną buhalterinių įrašų rinkinį,
- buhalterinis įrašas nurodo jį sugeneravusį dokumentą, todėl kiekvieną ataskaitos skaičių galima atsekti iki jo kilmės.
Kai įrašai yra bendri, tarp modulių nebelieka ko derinti. Tai, kas lieka suderinti, yra išorinis pasaulis: banko išrašai ir mokesčių deklaracijos.
Modulių žemėlapis
| Modulis | Rašo | Skaito |
|---|---|---|
| Pardavimai | Užsakymus, sąskaitas faktūras, kreditines sąskaitas faktūras | Partnerius, prekes, kainas, PVM taisykles |
| Pirkimai | Pirkimo užsakymus, tiekėjų sąskaitas faktūras | Partnerius, prekes, sąnaudų sąskaitas |
| Atsargos | Atsargų judėjimą, FIFO savikainos sluoksnius, inventorizacijas | Prekes, sandėlius |
| Gamyba | Gamybos užsakymus, sunaudotas medžiagas, pagamintą produkciją | Medžiagų specifikacijas, atsargas |
| Bankas | Importuotas operacijas, mokėjimų sudengimus | Atviras sąskaitas faktūras, banko sąskaitas |
| Darbo užmokestis | Atlyginimų skaičiavimus, įmokas, ataskaitas | Darbuotojus, sutartis, mokesčių lenteles |
| Ilgalaikis turtas | Turto registrą, nusidėvėjimo skaičiavimus | Turto grupes, naudingo tarnavimo laiką |
| Mokesčiai | PVM deklaracijas, ES prekybos ataskaitas, Intrastat, e. sąskaitas faktūras | Išrašytus ir užregistruotus dokumentus |
| Didžioji knyga | Buhalterinius įrašus, periodų užrakinimą | Visa tai, kas išvardyta aukščiau |
| Ataskaitos | Nerašo nieko | Didžiąją knygą ir analitines sąskaitas (subledgers) |
Kiekviena eilutė, išskyrus paskutines dvi, baigiasi įrašu didžiojoje knygoje. Tai yra projektavimo taisyklė, skirianti ERP nuo tarpusavyje sujungtų įrankių rinkinio.
Veikiantis duomenų srautas
Toliau pateiktame pavyzdyje naudojami Nordlet galiniai punktai (endpoints) ir numatytosios lietuviškojo sąskaitų plano, su kuriuo ji tiekiama, sąskaitos. Bet kuri ERP sistema atlieka tuos pačius veiksmus; tik sąskaitų kodai ir galinių punktų pavadinimai skiriasi.
1. Užsakymas
El. parduotuvė pateikia užsakymą per POST /v1/ecommerce/orders/create: perduodamas partneris, eilutės su prekėmis ir kiekiais, pristatymo šalis. Į didžiąją knygą dar niekas neįrašoma. Užsakymas yra įsipareigojimas, o ne ūkinė operacija.
2. Atsargų rezervavimas
orders/reserve atsideda kiekius, kad antras užsakymas negalėtų parduoti tų pačių vienetų. Buhalterinio įrašo vis dar nėra: rezervuotos atsargos tebėra įmonės nuosavybė.
3. Įvykdymas (Fulfilment)
orders/fulfill užregistruoja prekių išvykimą iš sandėlio. Vienos duomenų bazės transakcijos metu įvyksta du dalykai:
- Atsargos nurašomos taikant FIFO savikainą: pirmiausia sunaudojami seniausi kiekvienos prekės savikainos sluoksniai, kaip aprašyta FIFO atsargų įvertinimo žodyno įraše.
- Tų vienetų savikaita įtraukiama į apskaitą kaip buhalterinis įrašas: debetuojama parduotų prekių savikaita, kredituojamos atsargos.
| Sąskaita | Debetas | Kreditas |
|---|---|---|
| 6000 Parduotų prekių savikaita | 600.00 | |
| 2040 Atsargos | 600.00 |
Įvykdymo metu taip pat sukuriama sąskaitos faktūros juodraštis (draft invoice) užsakymui ir, remiantis pristatymo šalimi, nustatomas PVM apmokestinimas naudojant ES PVM variklį.
4. Sąskaitos faktūros išrašymas
Sąskaitos faktūros išrašymas yra momentas, kai pripažįstamos pajamos už vienu metu įvykdytą pardavimą. Dokumentas gauna savo nuoseklų numerį ir sugeneruojamas vienas subalansuotas įrašas: bendra suma debetuojama gautinose sumose, PVM – mokėtino PVM sąskaitoje, o grynoji suma – pajamų sąskaitoje.
1 000 EUR grynojo pardavimo sumai, taikant 21 % Lietuvos PVM tarifą:
| Sąskaita | Debetas | Kreditas |
|---|---|---|
| 2410 Gautinos sumos | 1 210.00 | |
| 5000 Prekių pajamos | 1 000.00 | |
| 4492 Mokėtinas PVM | 210.00 |
Jei kuriai nors eilutėjė taikomas kitoks nei momentinis pajamų pripažinimo būdas, grynoji suma keliauja į ateinančių laikotarpių pajamas (deferred income), o pajamų pripažinimo variklis ją pripažįsta pagal grafiką. Gautinų sumų ir PVM įrašymas nesikeičia.
Sąskaita faktūra dabar gali būti išsiųsta kaip PDF failas, Peppol BIS 3.0 el. sąskaita faktūra arba įmonės šalies reikalaujamu nacionaliniu el. sąskaitų faktūrų formatu.
5. Banko sudengimas
Po dviejų savaičių gauti 1 210 EUR. Šis judėjimas patenka per PSD2 banko išrašų srautą (bank feed) arba importuojant camt.053 failą. Banko modulis įvertina galimas sąskaitas faktūras pagal sumą, mokėjimo paskirtį, kontrahento pavadinimą bei IBAN, o bank/transactions/match užregistruoja apmokėjimą:
| Sąskaita | Debetas | Kreditas |
|---|---|---|
| 2710 Bankas | 1 210.00 | |
| 2410 Gautinos sumos | 1 210.00 |
Sąskaitos faktūros būsena pasikeičia į „apmokėta“ ir išsiunčiamas sale_invoice.paid internetinis pranešimas (webhook). Mokėjimų sudengimo įraše išsamiau paaiškinama sudengimo logika. Mokėjimas kita valiuta tuo pačiu žingsniu įtraukia realizuotą valiutų kursų skirtumą į pelno arba nuostolių sąskaitą.
6. PVM deklaracija
Mėnesio pabaigoje nieko nereikia suvedinėti iš naujo. PVM deklaracija apskaičiuojama iš išrašytų ir užregistruotų dokumentų: declarations/eu/vat-return/compute nacionalinei deklaracijai (Lietuvoje – FR0600), declarations/eu/oss/compute tarpvalstybiniams B2C pardavimams pagal ES vieno langelio (OSS) schemą. Anksčiau minėtas pardavimas patenka į vidaus deklaracijos standartinio tarifo laukelį, nes jo PVM schema yra domestic (vidaus).
7. Periodo užrakinimas
Pateikus deklaraciją, ledger/periods/lock uždaro mėnesį. Nuo to momento bet koks įrašas, kurio data patenka į šį periodą (įskaitant vėlyvą banko sudengimą ar pakartotinį API iškvietimą), yra atmetamas grąžinant HTTP 409 klaidą. Užrakinimas taip pat inicijuoja bet kokių atidėtų pajamų pripažinimą, kurių terminas suėjo iki periodo pabaigos, todėl mėnuo negali užsidaryti su uždirbtomis pajamomis, likusiomis įsipareigojimų sąskaitoje.
Kodėl didžioji knyga yra pagrindinė apskaitos sistema (system of record)
Kiekvienas aukščiau minėtas modulis palaiko analitinę sąskaitą (subledger): gautinas sumas pagal klientus, mokėtinas sumas pagal tiekėjus, atsargas pagal prekes, turtą pagal turto vienetus. Didžiojoje knygoje kaupiamos bendros sumos, su kuriomis šios analitinės sąskaitos turi sutapti. Straipsnyje Analitinė sąskaita vs didžioji knyga aptariamas šių sąvokų ryšys; praktinis aspektas yra tas, kad ataskaita, sugeneruota iš didžiosios knygos, ir ataskaita, sugeneruota iš analitinės sąskaitos, turi rodyti tą pačią sumą, o ERP tai užtikrina abidvi generuodamas iš tų pačių buhalterinių įrašų.
Didžiąją knygą patikimu įrašų šaltiniu padaro trys savybės:
- Užtikrinamas balansas. Nordlet duomenų bazė atmeta įrašą, kurio debetas nelygus kreditui. Modulio klaida negali sukurti nesubalansuoto įrašo.
- Istorija yra tik papildoma (append-only). Užregistruotas įrašas niekada nėra koreguojamas. Klaida ištaisoma sukuriant stornavimo įrašą ir naują teisingą įrašą, kurių abu yra susiję su pradiniu. Nekintamos didžiosios knygos (immutable ledger) įraše paaiškina, kodėl to reikalauja auditoriai.
- Periodai užsidaro. Užrakintas mėnuo negali keistis, todėl skaičiai, kuriuos deklaravote, yra tie skaičiai, kurie lieka sistemoje.
Integracija: įvykiai ir idempotentiškumas, o ne naktiniai paketinis duomenų siuntimai (batches)
Senesnės ERP integracijos rėmėsi naktį keičiamais failais: eksportuoti užsakymus, importuoti juos, ryte patikrinti klaidų žurnalą. Modernūs ERP suteikia API, todėl integracija tampa dviejų disciplinų reikalu.
Išoriniai įvykiai (Events out). Kažkam pasikeitus, ERP jus apie tai informuoja. Nordlet įrašo kiekvieną internetinio pranešimo (webhook) įvykį į siunčiamųjų pranešimų srautą (outbox) toje pačioje duomenų bazės transakcijoje kaip ir pakeitimą, todėl dokumentas, kurio vykdymas buvo atšauktas, niekada neišsiunčia įvykio ir joks įvykis nepasimeta. Pristatymai yra pasirašomi naudojant HMAC-SHA256 ir pakartotinai siunčiami taikant eksponentinio vėlinimo (exponential backoff) strategiją. Jūsų sistema reaguoja į sale_invoice.paid, o ne kas penkias minutes klausinėja, ar kas nors apmokėta.
Saugūs pakartotiniai iškvietimai (Safe retries in). Tinklai kartais sutrinka, o pakartotinai išsiųstas užklausimas neturi sukurti antros sąskaitos faktūros. Nordlet priima Idempotency-Key antraštę (header) kiekvieno duomenis keičiančio kvietimo metu: tas pats raktas su tuo pačiu duomenų rinkiniu grąžina išsaugotą atsakimą, tas pats raktas su kitu duomenų rinkiniu yra atmetamas, o raktai galioja 24 valandas. Idempotentiškumo žodyno įrašas ir API gairės aprašo tikslų elgesį.
Kadangi kiekviena operacija yra POST /v1/{module}/{resource}/{action} iškvietimas ir programa naudoja tuos pačius galinius punktus, integracija gali paleisti visą aukščiau aprašytą srautą niekam netneatidarant jokio ekrano. Straipsnyje Kaip integruoti debesų buhalterijos API į SaaS platformą žingsnis po žingsnio parodyta, kaip tokį sprendimą sukurti.
Ką skaito ataskaitos
Ataskaitos nesaugo skaičių. Tai yra užklausos, atliekamos didžiojoje knygoje ir analitinėse sąskaitose konkrečiu laiko momentu:
- Bandomasis balansas (trial balance), balansas, pelno (nuostolių) ataskaita, pinigų srautų ataskaita skaito buhalterinius įrašus pagal sąskaitas ir periodus.
- Skolų senėjimo ataskaita skaito atviras gautinas ir mokėtinas sumas pagal apmokėjimo terminus.
- Atsargų likutis ir judėjimas skaito atsargų analitinę sąskaitą ir jos FIFO sluoksnius.
- PVM suvestinė skaito išrašytų ir užregistruotų dokumentų PVM eilutes.
- Sąnaudų centrų ataskaitos skaito sąnaudų centro dimensiją kiekvienoje buhalterinio įrašo eilutėje.
Nordlet sistemoje ataskaita sugeneruojama fone XLSX, PDF arba JSON formatu, o kai failas paruošiamas, suveikia internetinis pranešimas (webhook). Grupės rodikliai gaunami per konsolidavimą, kuris sujungia kelių įmonių didžiąsias knygas atsižvelgiant į valdymo dalį (ownership weighting) ir valiutos konvertavimą.
Kur tai sugriūva praktikoje
Dauguma ERP problemų kyla dėl bendro įrašo principo nesilaikymo, o ne dėl pačios programinės įrangos. Dažniausi atvejys:
- Lygiagreti skaičiuoklė (spreadsheet) kažkam, ko ERP „negeba padaryti“, ir kuri vėliau nesutampa su knygomis.
- Rankiniai buhalteriniai įrašai, naudojami modulių rezultatams taisyti, vietoj to, kad būtų taisomas pats dokumentas, o tai sugadina atsekamumą nuo ataskaitos iki pirminio dokumento.
- Integracijos, kurios rašo likučius, o ne dokumentus, todėl didžiojoje knygoje kaupiasi bendros sumos, kurių niekas negali paaiškinti.
- Atviri periodai, palikti neužrakintais kelis mėnesius, dėl ko praėjusio ketvirčio pateikti skaičiai išsikraipo.
Kodėl ERP diegimai paturia nesėkmę aprašo, kaip šie įpročiai susiformuoja diegimo metu, o Realistiški ERP diegimo grafikai parodo, kurioje projekto vietoje jie dažniausiai pasireiškia.
D.U.K.
Kas yra ERP sistemos šerdis?
Didžioji knyga ir aplink ją esantis bendras duomenų modelis. Kiekvienas modulis rašo dokumentus, kurie sugeneruoja subalansuotus buhalterinius įrašus, o kiekviena ataskaita yra kildinama iš šių įrašų.
Kaip duomenys juda per ERP?
Įvykis užregistruojamas vieną kartą kaip dokumentas (užsakymas, sąskaita faktūra, judėjimas, darbo užmokesčio skaičiavimas). Dokumentas sukuria buhalterinius įrašus didžiojoje knygoje ir judėjimus atitinkamoje analitinėje sąskaitoje. Ataskaitos ir mokesčių deklaracijos apskaičiuojamos iš šių įrašų. Tarp modulių niekas nėra kopijuojama.
Kuo skiriasi modulis nuo integracijos?
Modulis rašo į tą pačią duomenų bazę ir tą pačią didžiąją knygą kaip ir likusi sistemos dalis. Integracija yra išorinė programa, kuri kviečia ERP API sąsają. Naudojant į API orientuotą ERP, šis skirtumas yra nedidelis, nes integracija naudoja tuos pačius galinius punktus, kuriais naudotis ir moduliai.
Ar ERP buhalterinius įrašus sukuria automatiškai?
Taip. Sąskaitos faktūros išrašymas, užsakymo įvykdymas, mokėjimo sudengimas, darbo užmokesčio skaičiavimas ar turto nusidėvėjimas sugeneruoja savo buhalterinį įrašą be jokio žmogaus įsikišimo dėliojant debetus ir kreditus. Naudojamos sąskaitos parinktues nustatomos pagal registravimo taisykles, kurias galima keisti kiekvienai įmonei atskirai.
Kodėl ERP užrakina apskaitos periodus?
Tam, kad už periodą deklaruoti ar pateikti skaičiai vėliau negalėtų pasikeisti. Užrakintas periodas neleidžia įtraukti naujų įrašų, o tai apsaugo audito pėdsaką ir priverčia klaidas taisyti einamajame periode, kur jos yra matomos.