პროექტი
ყავის ერთობლივი შეკვეთები ოფისის გუნდისთვის
შიდა სერვისი ოფისში ყავის ერთობლივი შეკვეთისთვის: საბითუმო კატალოგი, ერთიანი მიწოდება, ავტომატური კალათა, გადახდები, მიღება და გაცემა.
ამოცანა
IT კომპანიის ოფისში თანამშრომლები ყავას საბითუმო მომწოდებლისგან ერთად უკვეთავენ: მარცვლად ან დაფქულს, ასევე ჩაისა და თანმხლებ პროდუქტებს. ადრე განაცხადები საერთო Google Sheets ცხრილში გროვდებოდა. ორგანიზატორი ამ სტრიქონების მიხედვით Tasty Coffee-ის საბითუმო კაბინეტში კალათას ხელით აწყობდა, თანხებს ითვლიდა და გადახდებს ამოწმებდა.
ასეთ პროცესში შეცდომა ადვილია: შეიძლება აგერიოს დაფქვა ან შეფუთვა, გამოგრჩეს სტრიქონი ან ვერ შეამჩნიო, რომ პროდუქტი მომწოდებელს აღარ აქვს. ძნელი იყო იმის გაგებაც, რა ეტაპზეა კონკრეტული შეკვეთა და გადახდილია თუ არა.
რა გავაკეთე
სერვისი 2026 წლის სექტემბერსა და ოქტომბერში დავაპროექტე და შევქმენი: თანამშრომლის ინტერფეისი, ადმინისტრირების პანელი, მომწოდებელთან ინტეგრაცია, მონაცემთა ბაზა და განთავსება. ის production-ში მუშაობს სტუდიის საკუთარ სერვერზე, Docker-ში, Nginx-ისა და Let's Encrypt-ის TLS სერტიფიკატის უკან. სერვისის მხარდაჭერასაც მე ვუწევ.
როგორ მუშაობს
თანამშრომლის შეკვეთა
თანამშრომელი იწყებს ყავის სახელის აკრეფას და მინიშნებებიდან ზუსტ პოზიციას ირჩევს. როცა კატალოგი გამოქვეყნებულია, თავისუფალი ტექსტის გაგზავნა შეუძლებელია. ყავისთვის აუცილებელია ფორმატის არჩევა, მარცვლად თუ დაფქული, შემდეგ კი შეფუთვისა და რაოდენობის. ფორმა მხოლოდ იმ კომბინაციებს გვთავაზობს, რომლებიც მომწოდებლის კალათაში რეალურად ჯდება, ხოლო თუ საბითუმო API ნაშთს გადმოსცემს, მეტ რაოდენობას არ მიიღებს.
ფორმაში ფასები არ ჩანს. თანხა შეკვეთის ბარათში მას შემდეგ ჩნდება, რაც ორგანიზატორი მომწოდებლის რეალურ კალათას შეამოწმებს. ისტორიაში ჩანს მიმდინარე ეტაპი და შემდეგი ნაბიჯი. საიტის ტელეფონზე დაყენება PWA-ს სახით შეიძლება.
ერთიანი მიწოდება და ავტომატური კალათა
ადმინისტრირების პანელში განაცხადები რიგში გროვდება. ორგანიზატორი ერთი მოქმედებით აერთიანებს მათ მიწოდებაში, სერვისი კი Tasty Coffee-ის საბითუმო კალათას თავად ავსებს: ასუფთავებს მას და შენახულ სტრიქონებს ამატებს. თუ მიწოდება შემდეგ შეიცვალა, კალათის ხელახლა შევსება შეიძლება და ძველი რაოდენობები მასში აღარ რჩება. სტრიქონს, რომლის გადატანაც ვერ მოხერხდა, სერვისი მიზეზით მონიშნავს, ორგანიზატორი კი მას ხელით ამატებს და ნიშნით ადასტურებს. შეკვეთის გაფორმება და გადახდა მომწოდებელთან ხელით რჩება: ინტეგრაცია საბოლოო ღილაკს არასოდეს აჭერს.
გვიან შემოსული განაცხადები ჯერ მიუღებელ მიწოდებას შეიძლება დაემატოს. მიღების დასრულებამდე მიწოდების გასწორება, ხელახლა ექსპორტი ან სრულად გაუქმება შეიძლება, ამ დროს განაცხადები რიგში ბრუნდება.
გადახდა
ორგანიზატორი თანხებს მომწოდებლის ფასდაკლების შემდეგ რეალური კალათის მიხედვით აფიქსირებს და შეგროვებას ხსნის. თითოეული თანამშრომელი საკუთარ თანხასა და გადახდის ბმულს ხედავს, აჭერს „გადავიხადე“ და სურვილისამებრ სკრინშოტს ურთავს. შეკვეთა გადახდილად მხოლოდ მაშინ ითვლება, როცა ორგანიზატორი თანხის შემოსვლას დაადასტურებს. შემოწმებული გადახდები შეიძლება დადასტურდეს ცალ-ცალკე ან ჯგუფად, ერთ ჯერზე 100 შეკვეთამდე. სტატუსს „შეკვეთილია“ სერვისი მხოლოდ ყველა გადახდის შემოწმებისა და მომწოდებელთან შეკვეთის რეალურად განთავსების შემდეგ უშვებს.
მიღება და გაცემა
როცა მიწოდება ჩამოდის, ორგანიზატორი მას სტრიქონ-სტრიქონ იღებს: მიღებულია სრულად, ნაწილობრივ, არ არის მარაგში ან შეიცვალა. თუ ყველაფერი ადგილზეა, საკმარისია ერთი დადასტურებული მოქმედება. სერვისი შედეგს თითოეული თანამშრომლისთვის თავად ითვლის. გაცემა მხოლოდ სრულად მიღებული შეკვეთის შეიძლება, დანარჩენები ნაკლებობის რიგში გადადის.
ადმინისტრირების პანელში მუშაობა ოთხ რიგზეა აგებული: ახალი განაცხადები, გადახდების შემოწმება, გაცემა და ნაკლებობა. შეკვეთები და მიწოდებები CSV და PDF ფორმატში ექსპორტდება.
ძველი ცხრილიდან გადასვლა
სანამ ზოგი კოლეგა ჯერ კიდევ Google Sheets ცხრილს იყენებდა, გადასვლა თანდათანობით უნდა მომხდარიყო. შევქმენი იმპორტი წინასწარი ნახვით: ყოველი სტრიქონი მოწმდება სახელზე და გვარზე, კატალოგის ზუსტ ვარიანტზე და რაოდენობაზე, ხოლო ნებისმიერი შეცდომა იმპორტს ბლოკავს და მსგავს პროდუქტს არ ანაცვლებს. ცხრილიდან ფასები და გადახდის აღნიშვნები არ გადმოდის. იმპორტის ჟურნალი თითოეულ შეკვეთას საწყისი სტრიქონის ნომერთან აკავშირებს, ამიტომ განმეორებითი ჩატვირთვა დუბლიკატებს არ ქმნის, შეცვლილი სტრიქონი კი კონფლიქტად ჩანს. ცალკე შემოწმება იმპორტირებულ განაცხადებს ხელით აწყობილ კალათას ადარებს და მასში არაფერს ცვლის.
საინჟინრო გადაწყვეტილებები
კატალოგი და ზუსტი ვარიანტები
კატალოგი Tasty Coffee-ის საბითუმო API-სთან სინქრონდება მოთხოვნით ან განრიგით, კვირაში სამ გაშვებამდე. განრიგს სერვერი თავად ამოწმებს, ამიტომ ადმინისტრირების პანელის ღიად დატოვება საჭირო არ არის, წარუმატებელი მცდელობა კი გამოქვეყნებულ კატალოგს არ შლის. თითოეული ვარიანტისთვის ბაზა ინახავს ზუსტ შესაბამისობას მომწოდებლის API-ის პროდუქტთან, შეთავაზებასთან, დაფქვასთან და შეფუთვასთან. ეს გასაღები განაცხადიდან კალათის სტრიქონამდე გადადის, ამიტომ სერვისს პროდუქტის სახელით გამოცნობა არ უწევს.
უსაფრთხოება
ყველა გარე მოთხოვნა Nginx-სა და Node.js-ზე აგებულ gateway-ზე გადის. Gateway შლის კლიენტის მიერ გამოგზავნილ იდენტობის სათაურებს და მომხმარებელს თავად ადგენს ხელმოწერილი HttpOnly cookie-ის მიხედვით. ადმინისტრატორის სესია 8 საათი გრძელდება, ერთი მისამართიდან ხუთი წარუმატებელი შესვლის შემდეგ შესვლა 15 წუთით იბლოკება, პაროლი კი მხოლოდ scrypt ჰეშის სახით ინახება. გადახდის სკრინშოტები Yandex Object Storage-ის დახურულ bucket-ში ინახება და მხოლოდ gateway-ით იხსნება. საბითუმო კაბინეტის მონაცემები სერვერის დახურულ ცვლადებშია, ტოკენი კი მხოლოდ მეხსიერებაში არსებობს. მოთხოვნები მომწოდებელთან და Google Sheets-თან შიდა პროქსებით გადის, რომლებიც საჯარო ქსელიდან მიუწვდომელია.
მუშაობა პატარა სერვერზე
აპლიკაცია დაწერილია React-სა და TypeScript-ზე და მუშაობს Cloudflare Workers-ის გარემოში D1 API-ით, რომელიც Docker volume-ში არსებულ ლოკალურ SQLite ბაზას იყენებს. სერვერი საერთოა და 2 GB მეხსიერება აქვს, ამიტომ კონტეინერებს მეხსიერების მკაცრი ლიმიტები აქვთ, განახლებისას კი ძველი ეგზემპლარი ახლის გაშვებამდე ჩერდება. თუ აწყობას მეტი მეხსიერება სჭირდება, ვიდრე სერვერს აქვს, image სხვაგან იწყობა და მზა სახით იტვირთება.
შედეგი
სერვისმა ჩაანაცვლა საერთო ცხრილი და კალათის ხელით აწყობა. განაცხადები თავიდანვე კატალოგის ზუსტ ვარიანტებს უკავშირდება, ამიტომ დაფქვასთან, შეფუთვასთან და რაოდენობასთან დაკავშირებული შეცდომები ნაკლებია, შეკვეთისა და გადახდის სტატუსს კი თანამშრომელიც ხედავს და ორგანიზატორიც. ჩემი შეფასებით, სერვისი თანამშრომლებსა და ადმინისტრატორებს ჯამში თვეში 100 საათზე მეტ სამუშაო დროს უზოგავს. ეს შეფასებაა და არა ცალკე გაზომვის შედეგი.
განვიხილოთ თქვენი ამოცანა
თუ თქვენს გუნდში შეკვეთები, გადახდები ან განაცხადები ჯერ კიდევ ცხრილში ინახება და ხელით გადაიტანება, მომიყევით, სად იხარჯება ყველაზე მეტი დრო. განვიხილოთ მსგავსი ამოცანა.
დაკავშირებული მიმართულებები: შიდა სისტემები, API ინტეგრაციები და ცხრილების ავტომატიზაცია. წასაკითხი: როდის სჯობს ცხრილების სისტემით შეცვლა.
იგივე ტექნოლოგიები, სხვა ამოცანები
2023 წლიდან: ქსელები, სერვერები, ბეკენდი და მიკროკონტროლერები სათბურის კლიმატისა და პარამეტრების სამართავ ინტერფეისთან.
სერვისული ოპერაციებიზარები, CRM და გუნდის ოპერაციები სერვისულ ბიზნესში2021 წლიდან: ბეკენდი, 15-მაჩვენებლიანი რეიტინგი, ცოცხალი TV პანელები, IVR-დან GoHighLevel ლიდი და AI ანალიზი.
პერსონალი და ადაპტაციაახალი თანამშრომლის ჩართვა დაკავშირებული პროცესითროლები, დოკუმენტები, სწავლება და შეხსენება Google Workspace-თან დაკავშირებულ აპლიკაციაში.