Rivile ERP — automatizavimo konceptas ir architektūra

Rivile ERP — automatizavimo konceptas ir architektūra

Šaltinis: vidinė medžiaga (Giedrius Lukoševičius). Papildo techninę API nuorodą: rivile-erp-automatizavimo-api.html. Pritaikymo kontekstas: rivile-erp-customization-konceptas.html. Infrastruktūra, ribos, greitaveika: rivile-erp-infrastruktura-ribos-greitaveika.html.

Projekto kontekstas: atstovų mokymas apie automatizavimą ir pritaikymą; organizacija ir formatas — Tema 1 · Įvadas ir planas.


1. Automatizavimo elementai (santrauka)

Elementas Aprašymas
Metaduomenys Pavadinimas, kodas, įmonė, savininkas, pranešimai apie klaidas, isSystem ir kt.
Trigeriai ir įvykiai Kas paleidžia procesą (įvykis, laikas, webhook, UI, rankinis).
Kontekstas ir parametrai Duomenys scenarijui: kas įvyko, būsena, papildomi parametrai.
Scenarijus JavaScript: transformacijos, duomenų gavimas, veiksmų kvietimas.
Veiksmai Sisteminės mutacijos / funkcijos (vidinės ir išorinės).
Auditas Vykdymo istorija, kontekstas, rezultatai.
Apribojimai ir resursai Laikas, lygiagretumas, eilės, apsauga nuo perteklinio naudojimo.

Koncepcija: pritaikytas automatizavimas = trigeris + (sąlygos / transformacija) + veiksmai, su auditu ir resursų ribomis.


2. Juodraštinė vizija („draft design“)

  • Esami suplanuoti darbai ir vartotojo veiksmai gali būti sujungti po viena sąvoka „automations“.
  • Automatizavimų sąrašas — centrinė vieta taisyklėms peržiūrėti / valdyti.
  • Klausimas į ateitį: ar perkelti dalį esamų „User actions“ į „System“, kad partijos (pvz. batch posting) būtų matomos po Automations.

3. Trigeriai ir įvykiai

Tipas Pavyzdžiai / pastabos
Įvykio trigeris Pvz. sukurtas PVM dokumentas, patvirtintas pirkimas, atliktas atsargų judėjimas.
Suplanuotas (CRON) Kasdien / savaitę / mėnesį — ataskaitos, priminimai.
Webhook Išorinė sistema siunčia duomenis / užklausą (pvz. e‑komercija → užsakymo būsena).
UI trigeris Mygtukas, forma, lauko interaktyvus pasikeitimas.
Rankinis trigeris Vartotojas paleidžia iš konkretaus UI, pvz. formos Papildomi veiksmai („Siųsti per EDI“, „Sujungti sąskaitas“). Rankiniam trigeriui turi būti realūs frontendo formų kontekstai, iš kurių galima paleisti.

Papildomas parametrizavimas (UI): rankiniam paleidimui gali būti parametrai kaip ataskaitose — modalas su laukais prieš vykdymą.


4. Scenarijus (Script)

4.1 Kontekstas iš trigerio

Po įvykio scenarijus gauna duomenis apie: įvykį, objektą (pvz. sąskaitą), vartotoją, inicijuotoją (automatizavimas, API, vartotojas), organizaciją ir įmonę; webhook gali turėti papildomą kontekstą.

4.2 JavaScript logika

  • Įvertinti sąlygas pagal kontekstą.
  • Papildomi duomenys: RQL į Rivile DB ir/ar išoriniai šaltiniai.
  • UI trigeris gali leisti sąveiką su vartotoju (patvirtinimas ir kt.).

4.3 Parametrai (ypač rankinis paleidimas)

  • Paprasta forma su mygtukais, įspėjimais, pasirinkimais.
  • Failai: blob ar tekstiniai formatai perduodami į kontekstą (pvz. importas).

4.4 Testavimas ir derinimas

  • Galimybė testuoti su įvestu kontekstu (panašiai kaip ataskaitose).

4.5 Versijavimas

  • Istorija scenarijaus ar visos taisyklės, galimybė grįžti prie ankstesnės versijos.

4.6 Realūs scenarijų eksportai projekte

Projekto kataloge scripts/ saugomi automatizavimo apibrėžimų JSON eksportai (scriptContent, paramsFormSchema, exampleData). Ten pat aprašyta: objektas initial, formos laukai, try/catch ir UserError, output, *`log.`** naudojimas — pagal tikrus failus.


5. Įmonės apimtis (company scope)

  • Automatizavimas gali būti ribotas įmonei arba globalus (visos įmonės); ateityje — kelios įmonės vienu metu.

Vykdymo taisyklės:

  1. Jei įvykis susietas su konkrečia įmone (daug rankinių, vidinių transakcijų įvykių) — vykdomi automatizavimai tos įmonės ir globalūs.
  2. Jei įvykis be įmonės konteksto arba „visos įmonės“ (pvz. produktas visoms įmonėms, naudotojo sukūrimas) — kviečiami visi atitinkantys automatizavimai, nepriklausomai nuo taisyklėje nurodytos įmonės; scenarijus pats turi žinoti, kaip elgtis.

Rekomendacija: globalios taisyklės įvykiams be griežto įmonės konteksto.


6. Veiksmai (Actions)

Po trigerio ir sąlygų vykdomi sistemiškai apibrėžti veiksmai (skirtingi trigerių tipams).

Pavyzdžiai: el. laiškai, įrašų atnaujinimas, ataskaitos, išoriniai API, atsargų rezervavimas ir kt.

Gero veiksmo specifikacijai naudinga aprašyti: paskirtį, įvestis / išvestis, vykdymą (sinchronas / asinchronas), klaidas, žurnalą, pavyzdžius, saugumą, priklausomybes. Bendras Automation lygis async vs sync — žr. §10.


7. Audito žurnalas (Audit Logging)

Kas rodomas kaip „kas pakeitė“ duomenis priklauso nuo paleidimo būdo — žr. §12 (inicijuotojas vs scheduler / automation naudotojas).

Fiksuoti bent:

  • Iniciatorius — naudotojas, sistema, API, integracija; šaltinis (UI, API, suplanuota užduotis).
  • Laiko žymės — paleidimo ir (kur tinka) pabaigos laikas.
  • Trukmė — našumo ir „bottleneck“ stebėsenai.
  • Būsena ir rezultatas — sėkmė / nesėkmė / dalinis; klaidos ar rezultatai.
  • Kontekstas — iš trigerio ir sąlygų aktualūs duomenys.
  • Paveikti įrašai — kurie objektai buvo pakeisti / sukurti.

8. Apribojimai ir resursų valdymas

Sritis Reikalavimai (santrauka)
Vykdymo laikas Administratorius gali nustatyti max. laiką; viršijus — nutraukti, aiškios klaidos, galimybė scenarijui „išeiti tvarkingai“. Automation sesija: 15 min — žr. §13.
Naudojimo stebėsena Stebėti resursus; vykdymo laikas per organizaciją / įmonę (sąskaitų faktūrų / kainodaros kontekstas).
Resursų kvotos CPU, atmintis ir kt. — protingos ribos debesų aplinkoje. Automation užduotis: atminties riba iki 2 GB; dideli JSON ir lygiagretumas — žr. §13.
Lygiagretumas Riboti vienu metu vykstančių automatizavimų skaičių klientui.
Prioritetai ir eilės Eilių sistema, kai resursų mažai.
Debesų masteliai Elastingas skalavimas, monitoringas ir aliarmai prie slenksčių.

9. Eilės, prioritetai ir procesoriai (Automation, Email Template, Reporting)

Užduočių rūšys ir atskiros eilės. Automation, Email Template ir Reporting užduotys paskirstomos į skirtingas eilės (kiekvienas tipas turi savą eilių visumą). Kiekviena tokia eilė toliau skirstoma į mažesnes eiles pagal prioritetą (pvz. HIGH / MEDIUM / LOW ar analogiška politika aplinkoje).

Paralelumas tarp eilių. Kiekvieną eilę aptarnauja atskiri procesai (workers). Todėl skirtingose eilėse esančios užduotys gali būti vykdomos lygiagrečiai — viena eilė neblokuoja kitos tik todėl, kad „priešakyje“ stovi kitos rūšies darbai.

Procesoriai vienoje eilėje. Kiekviena eilė turi bent vieną procesorių (vieną lygiagretumo vienetą toje eilėje).

Procesorių skaičius eilėje Elgsena toje pačioje eilėje
1 Užduotys vykdomos nuosekliai (viena po kitos).
> 1 Toje pačioje eilėje kelios užduotys gali vykti lygiagrečiai (kol leidžia procesorių skaičius).

Ką tai reiškia konsultantui: laukimo laikas priklauso ne tik nuo prioriteto, bet ir nuo to, kurioje eilėje yra užduotis ir kiek procesorių ten sukonfigūruota — piko metu ilga „eilė prie vieno procesoriaus“ vis tiek reiškia nuoseklų vykdymą.

9.1 Kaip sutrumpinti laiką iki užduoties vykdymo pradžios

Du bendri būdai pagreitinti (sutrumpinti laukimą iki to momento, kai užduotis pradedama vykdyti):

  1. Dedikuotos eilės. Tam tikras užduotis galima nukreipti į atskiras, dedikuotas eilės — tada jos nebestovi bendroje eilėje su kitomis to paties tipo užduotimis ir „apeina“ ten laukiančius procesus. Praktinė pasekmė: trumpesnis laikas iki vykdymo pradžios (ne būtinai trumpesnė pati operacija).

  2. Procesorių skaičius. Galima padidinti procesorių skaičių prie pasirinktų eilių — daugiau lygiagretumo toje pačioje eilėje, trumpesnis laukimo laikas iki pradžios, kol apkrova nepasiekia naujos pusiausvyros.

Pastaba: šie instrumentai yra konfigūracijos / veiklos lygio (administravimas, debesų politika), ne vien scenarijaus JS optimizavimas; su klientu verta susieti lūkesčius (pikas, masiniai CRON, dideli ataskaitų paketai) ir stebėti auditą / eilių būseną, jei tokia diagnostika prieinama.


10. Automation vykdymo rūšys: async ir sync

Rūšis Elgsena
Async Vyksta nepriklausomai nuo pagrindinių ERP procesų (dokumento sukūrimas, patvirtinimas, atšaukimas ir pan.). Fono logika — transakcija ar vartotojo sesija gali judėti toliau, o automatizavimas užbaigiamas atskirai (eilė, užduotis).
Sync Kol automatizavimas vyksta, sistema ir vartotojas laukia jo pabaigos (blokuojantis kelias).

Konsultantui: sync tinka trumpiems, kritiniams keliams, kur reikia užtikrinti prieš tęsiant; async — kai negalima „laikyti“ UI ar transakcijos ilgai.


11. Įdėtiniai automation kvietimai ir ciklo apsauga

Scenarijus gali kviesti kitą automatizavimą, tas — trečią ir t. t. Tai leidžia komponuoti logiką, bet kelia riziką begaliniam ciklui (A → B → A → …).

Apsauga: veikia algoritmas, kuris skaičiuoja, kiek kartų tame pačiame cikle buvo pakviestas tėvinis procesas. Jei ciklas pasikartoja jau trečią kartą, vykdymas nutraukiamas (apsauga nuo amžino ciklo).


12. Auditas: kas „įrašomas“ kaip keičėjas

  • Įprastas atvejis: automatizavimas vykdomas inicijuotojo naudotojo vardu. Duomenų pakeitimai audite ir susijusioje informacijoje matosi tuo naudotoju (ne anonimiškai).
  • Scheduler tipo automatizavimai: pakeitimai fiksuojami kaip automation (sisteminio / planuotojo automatizavimo) naudotojo vardu — ne konkretaus žmogaus, kuris tuo metu gali būti neprisijungęs.

13. Sesijos laikas, async gijos scenarijuje ir atminties riba

Sesija. Automation scenarijus gali vykti tol, kol galioja automatizavimo sesija. Sesijos trukmė: 15 minučių. Pasibaigus sesijai, tolimesnis vykdymas negalimas toje pačioje sesijoje — vertinti ilgų scenarijų skaidymą, eiles ar async modelį.

Lygiagretumas scenarijuje (Automation Type). Scenarijuje galima sukurti kelias async gijas ir vykdyti skaičiavimus ar užklausas lygiagrečiai. Tai naudinga, kai lėtai atsako išoriniai resursai: kol jie grąžina duomenis, jūsų pusėje paraleliai vykdomi kiti darbai.

Atmintis. Lygiagretumas didina vienu metu naudojamą atmintį. Vienai automatizavimo užduočiai galioja riba: ne daugiau kaip 2 GB. Skaičius atrodo didelis, bet:

  • kelių tūkstančių eilučių JSON objektai gali užimti šimtus megabaitų;
  • kopijuojant didelius objektus atmintyje, sunaudojimas auga greitai ir gali baigtis Out of memory.

Rekomendacija: vertinti paralelumą ir duomenų tūrį; vengti nereikalingų kopijų, skaidyti paketus, kur įmanoma srautuoti ar apdoroti dalimis.


14. Mokymams naudingos santraukos mintys

  • Vienas „skėtis“: suplanuoti darbai + UI veiksmai + įvykiai → Automations.
  • Penki trigerių tipai = penkios skirtingos mokymų gijos (įvykis, laikas, webhook, UI, rankinis).
  • Scenarijus = JS + RQL + paruoštos funkcijos (žr. API dokumentą).
  • Įmonės apimtis ir globalumas — dažna klaidų zona; verta atskiro pavyzdžio.
  • Async vs sync — ar vartotojas laukia, ar darbas eina fonu.
  • Įdėtiniai kvietimai — ciklo apsauga trečiu pasikartojimu.
  • Auditas — inicijuotojas vs scheduler → automation naudotojas.
  • 15 min sesija, 2 GB atmintis, async gijos — našumas vs atmintis.
  • Eilės: Automation / Email Template / Reporting — atskirai; viduje — prioritetai; vienas procesorius eilėje → nuosekliai, keli → lygiagrečiai toje eilėje; tarp skirtingų eilių — paralelumas.
  • Resursai, laiko limitas ir eilės — kodėl svarbu optimizuoti scenarijų ir stebėti auditą.