Pereiti prie turinio

Nuomos valdymo sistema: nuo svetainės iki išdavimo punkto

Kaip sukūrėme AFKnuoma – nuomos valdymo sistemą su rezervacijomis internetu, išdavimu punkte ir nekeičiamomis sąskaitomis, kurioje dvigubas rezervavimas neįmanomas.

AFKzona Group · 5 min. skaitymo

Tikri produkto ekranai

Trumpas atsakymas

  • Pinigai saugomi sveikaisiais euro centais, todėl sąskaitų, užstatų žurnalo ir dienos uždarymo sumos sutampa iki cento.
  • Dvigubą rezervavimą blokuoja PostgreSQL išskyrimo apribojimas. Testas vienu metu siunčia penkiasdešimt rezervacijų paskutiniam vienetui – pavyksta lygiai viena.
  • Kiekvieną išrašytą sąskaitą faktūrą užrakina pati duomenų bazė. Klaidos taisomos kreditine sąskaita, o numeracija ištisinė – be tarpų ir dublikatų.
  • Prieš kiekvieną kitą nuomą elektronikos prietaisas praeina visą duomenų ištrynimo kontrolinį sąrašą.

AFKnuoma – nuomos valdymo sistema, kurią suprojektavome ir sukūrėme savo nuomos verslui: įrankiams, dronams, žaidimų konsolėms ir VR akiniams, kuriuos klientai rezervuoja internetu ir atsiima punkte. Ją sudaro vieša svetainė lietuvių ir anglų kalbomis su rezervavimu ir apmokėjimu bei administravimo sistema atsargoms, rezervacijoms, išdavimui ir grąžinimui, sąskaitoms, užstatams ir priežiūrai. Svarbiausią taisyklę – kad nieko negalima rezervuoti du kartus – užtikrina pati duomenų bazė, o tai įrodo testas.

Šioje atvejo analizėje aprašome, ką sistema daro, kurias taisykles sąmoningai perkėlėme į duomenų bazę ir kaip jas tikriname. Sistemoje yra 69 puslapiai, 45 duomenų modeliai ir 74 testų failai.

Kokią problemą turi išspręsti nuomos sistema?

Nuomos verslas parduoda laiką su fiziniais daiktais. Kiekvienas daiktas vienu metu gali būti tik vienoje vietoje, o kiekviena klaida kainuoja: dvigubas rezervavimas – prarastą klientą, dingęs užstato įrašas – pinigus, o tarpas sąskaitų numeracijoje – nemalonų pokalbį su buhalteriu. Sistema turi tokias klaidas padaryti neįmanomas, o ne tik mažai tikėtinas.

Čia „Excel“ lentelės ir kalendorių programėlės nebepadeda. Jos parodo užimtumą, bet niekas nesutrukdo dviem žmonėms tuo pačiu metu išsaugoti persidengiančių rezervacijų, ir niekas nesieja rezervacijos su išdavimu, užstatu ir sąskaita. Mums reikėjo vieno įrašo, kuris lydėtų daiktą nuo svetainės iki išdavimo punkto ir atgal.

Ką apima AFKnuoma?

AFKnuoma – viena sistema su dviem pusėmis. Viešoje svetainėje klientai randa ir rezervuoja įrangą, o administravimo sistemoje darbuotojai tvarko atsargas, rezervacijas, išdavimo punktą, pinigus ir priežiūrą. Abi pusės dirba su tais pačiais duomenimis, todėl svetainėje rodomas užimtumas sutampa su tuo, kurį mato punkto darbuotojas.

SritisKą daro
Vieša svetainė (LT ir EN)Katalogas, kuris realiuoju laiku rodo laisvus daiktus ir kainas pasirinktomis datomis; rezervavimas ir apmokėjimas internetu
AtsargosKiekvienas fizinis vienetas su serijiniu numeriu: išduotas, sandėlyje, remontuojamas ar karantine
Rezervacijų kalendoriusRezervacijos internetu ir per darbuotojus, rinkiniai, kartu parduodamos eksploatacinės prekės, pakeitimo prašymai
Išdavimo punktasIšdavimas ir grąžinimas, klientai be išankstinės rezervacijos, užstatų paėmimas ir grąžinimas
Sąskaitos faktūrosPo išrašymo nekeičiamos, ištisinė numeracija, taisoma kreditine sąskaita
Techninė priežiūraLaikotarpiai, kai vienetas išimamas iš apyvartos, be persidengimų
Duomenų ištrynimasElektronika neišnuomojama, kol neatliktas visas ištrynimo kontrolinis sąrašas
Dienos uždarymasKasos Z ataskaita lyginama su sistemos įrašais, suskaičiuoti grynieji – su laukiama suma

Rinkinys – komplektas, nuomojamas kaip vienas produktas, bet sudarytas iš kelių atsargų vienetų. Rezervuojant rinkinį, kiekviena jo dalis rezervuojama atskirai, todėl drono komplekto negalima išduoti, jei viena iš baterijų jau išnuomota.

Dvi detalės rodo, kokiu kruopštumu sukurta visa sistema. Paieška randa „vejapjovė“, net kai klientas įveda „vejapjove“ be lietuviškų raidžių. O kai rezervacija atmetama, nes nieko laisvo nėra, sistema įsimena, ko klientas norėjo, – savininkas mato, kurių daiktų verta įsigyti daugiau.

Kaip dvigubas rezervavimas tampa neįmanomas?

Dvigubą rezervavimą blokuoja PostgreSQL išskyrimo apribojimas, taikomas kiekvienam fiziniam vienetui ir jo laiko intervalui: duomenų bazė atmeta bet kokį antrą aktyvų to paties vieneto paskyrimą, persidengiantį su esamu, kad ir ką darytų programos kodas. Toks pat apribojimas neleidžia persidengti ir techninės priežiūros laikotarpiams.

Išskyrimo apribojimas – duomenų bazės taisyklė, kuri atmeta naują eilutę, jei ji pagal nurodytą palyginimą konfliktuoja su esama; šiuo atveju palyginimas – „tas pats vienetas ir persidengiantis laikas“. Jis naudoja btree_gist plėtinį, kuris viename patikrinime sujungia vieneto lygybę ir laiko intervalų persidengimą.

Kodėl duomenų bazėje? Programos kodas pirmiausia patikrina, ar vienetas laisvas, o tada išsaugo rezervaciją. Tarp patikros ir išsaugojimo praeina kelios milisekundės, ir du klientai, tuo pačiu metu rezervuojantys paskutinį vienetą, gali abu praeiti patikrą. Abu įrašus mato tik duomenų bazė, todėl tik ji gali patikimai vieną iš jų atmesti.

Tai įrodo lygiagretumo testas. Jis vienu metu siunčia penkiasdešimt rezervacijos užklausų paskutiniam laisvam vienetui ir tikrina keturis dalykus: sukurta lygiai viena rezervacija, likusios keturiasdešimt devynios atmestos su klaida „neprieinama“, yra lygiai vienas atsargų rezervavimas, o keturiasdešimt devyni atmetimai užfiksuoti kaip nepatenkinta paklausa. Testas vykdomas su tikra PostgreSQL duomenų baze, o ne su imitacija.

Kodėl sąskaitos faktūros nekeičiamos?

Išrašytų AFKnuoma sąskaitų faktūrų negalima nei pakeisti, nei ištrinti, nes apskaitos dokumentas, kurį galima pakeisti po išrašymo, nėra patikimas įrašas. Duomenų bazės trigeriai atmeta bet kokį išrašytos sąskaitos, jos eilučių, mokėjimų ir užstato operacijų keitimą ar trynimą. Klaida taisoma taip, kaip tikisi buhalteris, – kreditine sąskaita.

Sąskaitos eilutės ir sumos nekinta nuo išrašymo akimirkos, o išsaugotas PDF failas pridedamas prie to paties įrašo. Kaip ir dvigubo rezervavimo atveju, ši taisyklė įgyvendinta pačioje duomenų bazėje, todėl galioja, kad ir ką darytų programa.

Ištisinė numeracija reiškia, kad sąskaitų numeriai kiekvienoje serijoje eina iš eilės – 1, 2, 3 – be praleistų ir pasikartojančių. Tai sunkiau, nei atrodo: jei sistema rezervuoja numerį, o operacija nepavyksta, paprastas įgyvendinimas palieka tarpą. Testai tikrina tris atvejus:

  • skirtingiems dokumentų tipams – atskiros serijos, su metais numeryje, kai to reikalauja serija;
  • nepavykusi išrašymo operacija nesunaudoja numerio;
  • šimtas vienu metu išrašomų dokumentų gauna numerius nuo 1 iki 100, kiekvieną lygiai vieną kartą.

Pinigai saugomi sveikaisiais euro centais, o ne slankiojo kablelio skaičiais, todėl sąskaitos, užstatų žurnalo ir dienos uždarymo sumos visada sutampa iki cento.

Kaip sistema testuojama?

AFKnuoma turi 74 testų failus. Integraciniai testai tikrina verslo taisykles su tikra PostgreSQL duomenų baze, o naršyklės testai spaudo viešos svetainės, išdavimo punkto ir administravimo sistemos mygtukus taip, kaip tai darytų žmogus. Funkcija laikoma baigta, kai ji veikia su tikra duomenų baze, o ne tada, kai kodas susikompiliuoja.

Integraciniai testai skaitomi kaip verslo taisyklės, kurias jie saugo. Keli pavyzdžiai:

  • klientas, atėjęs be rezervacijos, gali nurodyti tik telefono numerį – jis atpažįstamas pagal telefoną ir negauna jokių el. laiškų;
  • atšaukta rezervacija iškart atlaisvina atsargas ir įrašoma į veiksmų žurnalą, o antras paspaudimas nieko nebekeičia;
  • rezervacijos negalima atšaukti, kai įranga jau išduota;
  • grįžtantis klientas randamas pagal el. paštą ar telefoną, o tai, ką verslas apie jį jau žino, niekada neperrašoma.

Naršyklės testai apima darbuotojų prisijungimą, dokumentus, atsargas, priežiūrą, rezervacijas, išdavimo punktą, katalogą, rezervavimą ir viešos svetainės prieinamumą.

Ką taip pat darytume kitam verslui

Tas pats principas tinka bet kuriam verslui, kuris rezervuoja fizinius daiktus ar laiką: įrangos ir transporto nuomai, patalpoms ir salėms, vizitams pas ribotą skaičių darbuotojų. Taisykles, kurių niekada negalima pažeisti, perkelkite į duomenų bazę, išbandykite jas lygiagrečia apkrova, o finansinius dokumentus padarykite nekeičiamus nuo pirmosios versijos.

Katalogas, kainodaros taisyklės, užstatai ir išdavimo procesas kiekviename versle skiriasi. Nesikeičia tai, kad vienas įrašas lydi kiekvieną rezervaciją nuo svetainės iki sąskaitos. Rezervacijų sistemą laikome nedidele apskaitos sistema su kalendoriumi ir taip ją projektuojame – pradėdami nuo duomenų modelio.

Sukurkime jūsų rezervacijų ar nuomos sistemą

Kokias rezervacijų, nuomos ir administravimo sistemas kuriame, aprašyta skiltyje rezervacijų ir nuomos sistemos, o AFKnuoma ekranus rasite darbų puslapyje. Produkto kūrimas kainuoja nuo 12 000 €, su raštu sutarta apimtimi ir fiksuota kaina; žr. kainas ir produktų kūrimą. Norėdami aptarti savo procesą, užsisakykite nemokamą 30 min. pokalbį.

Dažni klausimai

Ką turi turėti nuomos valdymo sistema?

Mažiausiai: katalogą, kuris realiuoju laiku rodo, kas laisva pasirinktomis datomis, rezervavimą ir apmokėjimą internetu, rezervacijų kalendorių, išdavimą ir grąžinimą punkte, užstatus, sąskaitas faktūras ir techninės priežiūros apskaitą. Elektronikai – dar ir duomenų ištrynimą prieš kitą nuomą. AFKnuoma visa tai sujungia vienoje sistemoje, todėl rezervacija, išdavimas ir sąskaita visada susiję su tuo pačiu įrašu.

Kaip išvengti dvigubo rezervavimo?

Taisyklę reikia įgyvendinti duomenų bazėje, o ne tik programos kode. AFKnuoma kiekvienam fiziniam vienetui ir jo laiko intervalui taiko PostgreSQL išskyrimo apribojimą, todėl dvi aktyvios to paties vieneto nuomos negali persidengti, kad ir ką darytų kodas. Testas vienu metu siunčia penkiasdešimt rezervacijų paskutiniam laisvam vienetui ir tikrina, ar priimta lygiai viena.

Kaip nuomos sistema apsaugo sąskaitas faktūras nuo pakeitimų?

AFKnuoma jas užrakina duomenų bazėje. Trigeriai atmeta bet kokį išrašytos sąskaitos, jos eilučių, mokėjimų ir užstato operacijų keitimą ar trynimą, kad ir ką darytų programa, o klaida taisoma kreditine sąskaita. Kiekvienoje dokumentų serijoje numeracija ištisinė – be tarpų ir dublikatų.

Kada verta kurti individualią nuomos sistemą?

Kai jūsų taisyklės savitos: rinkiniai iš atskirų daiktų, užstatai pagal kliento kategoriją, kasos suderinimas dienos pabaigoje ar duomenų trynimas elektronikai. Individuali sistema seka jūsų procesą nuo svetainės iki sąskaitos, todėl darbuotojai dirba su programa, o ne aplink ją.

Kaip testuojama nuomos valdymo sistema?

Su tikra duomenų baze. AFKnuoma turi 74 testų failus. Integraciniai testai tikrina rezervavimo, sąskaitų ir užstatų taisykles su PostgreSQL – tarp jų šimtą vienu metu išrašomų dokumentų, kurie gauna numerius nuo 1 iki 100 lygiai po vieną kartą, o naršyklės testai spaudo viešos svetainės, išdavimo punkto ir administravimo sistemos mygtukus taip, kaip tai darytų žmogus.

Šaltiniai

  1. PostgreSQL dokumentacija – išskyrimo apribojimai (Exclusion constraints)
  2. PostgreSQL dokumentacija – btree_gist plėtinys
  3. PostgreSQL dokumentacija – intervalų tipai (Range types)

Papasakokite, ką norite sukurti.

Nemokamas 30 min. pokalbis su inžinieriumi, kuris vadovautų projektui. Po jo turėsite apimties metmenis ir kainos intervalą.