# Giftoy — ჩვეულებრივი HTML / CSS / JavaScript

სამივე ერთიანი მოდული: **სალარო**, **ხარჯები**, **დაზიანებული ნივთები**.

**არ არის React, JSX, npm, build, CDN, JavaScript ბიბლიოთეკა, SQL ან WASM.**
ფაილები არის გასაგები საწყისი კოდი — შეცვალეთ პირდაპირ ტექსტურ რედაქტორში.
ახალი მობილური POS ამ პაკეტში არ შედის.

## გახსნა

1. ZIP მთლიანად გაშალეთ, საქაღალდეების სტრუქტურის შენარჩუნებით.
2. გახსენით მთავარი **`index.html`** ბრაუზერში.
3. მარცხნივ აირჩიეთ მოდული. როლის არჩევით ნახავთ თანამშრომლის, მენეჯერისა და მყიდველის ეკრანებს.

პირდაპირ გახსნას ინსტალაცია არ სჭირდება, მაგრამ ეს არის ეკრანების დათვალიერების მოხერხებული გზა, არა ერთიანი საცავის გარანტია: `file://` მისამართზე ბრაუზერებმა შეიძლება სხვადასხვა ფაილს სხვადასხვა საცავი მისცენ ან კამერა შეზღუდონ. სამივე მოდულის **ერთიანი დემოს საიმედო შემოწმებისთვის** მოათავსეთ იგივე ფაილები ნებისმიერ **სტატიკურ HTTP/HTTPS სერვერზე**. კამერა საჭიროებს HTTPS-ს ან localhost-ს და მომხმარებლის ნებართვას. სერვერი არ ნიშნავს build-ს: ფაილები უცვლელად იტვირთება.

## სად არის კოდი

```text
index.html                 მთავარი გვერდი
styles.css                 მთავარი გვერდის დიზაინი
app.js                     სამივე მოდულის მენიუ და როლის არჩევა
shared/config.js           დემო/API რეჟიმის ერთი საერთო პარამეტრი
shared/common.js           საერთო ცნობარი, კონტექსტი და fetch დამხმარე
cash/                      სალარო: თანამშრომელი, ადმინისტრატორი და ისტორია
expenses/                  ხარჯები: შეტანა, მართვა და ანგარიშები
resale/                    დაზიანებული ნივთების ატვირთვა, გაყიდვა და ბონუსი
tests/                     სურვილისამებრ გასაშვები ლოგიკის ტესტები
```

თითოეულ მოდულში **`api.js` არის backend-თან დაკავშირების წერტილი**. HTML აწყობს ეკრანს, CSS — დიზაინს, JS — მოქმედებებს. მოდულებში რამდენიმე ფაილია იმიტომ, რომ შენარჩუნებულია რეალური სამუშაო ეკრანები და ბიზნეს-წესები, არა მხოლოდ პატარა ვიზუალური მაკეტი.

## პროგრამისტისთვის — backend-ის მიერთება

1. პირველ რიგში გახსენით **`API-CONTRACTS.md`** — შეიცავს მისამართებს, ველებს, თანხის ერთეულებსა და ვერსიებს.
2. `shared/config.js`-ში შეცვალეთ:

```js
mode: 'api',
apiBase: ''
```

ცარიელი `apiBase` ნიშნავს, რომ `/api/...` მარშრუტები და HTML ერთ domain-ზეა — ეს რეკომენდებული განლაგებაა. სხვა backend-ისთვის მიუთითეთ მისი origin და მოაგვარეთ CORS, cookie/session და ფოტოებზე წვდომა.
3. რეალური შესვლა, უფლებები, მონაცემთა შენახვა და ვალიდაცია უნდა განახორციელოს backend-მა. ეკრანის როლის არჩევა **ავტორიზაცია არ არის**.
4. Laravel-ის CSRF-ისთვის HTML-ში მიაწოდეთ `<meta name="csrf-token" content="...">` ან `config.csrfToken` დინამიკურად. fetch აგზავნის credentials-ს; POST-ებზე დამხმარე გადასცემს CSRF header-ს, თუ ტოკენი მიეწოდა.
5. API რეჟიმში ლოკალური დემო არ უნდა გამოიყენოთ სერვერის შეცდომის დასამალად: გაუმართავი მოთხოვნა ეკრანზე შეცდომას აბრუნებს.
6. თუ იმავე domain-ზე წინა რთული დემო პაკეტი გქონდათ გაშვებული, მისი ძველი Service Worker შეიძლება კვლავ იჭერდეს `/api` მოთხოვნებს. გამოიყენეთ ახალი სუფთა origin ან, საჭირო დემო მონაცემების წინასწარი შენახვის შემდეგ, პროგრამისტმა ხელით გააუქმოს ძველი demo Service Worker/ქეში. ეს პაკეტი ძველ მონაცემებს ავტომატურად არ შლის.

## დემოს ზუსტი მნიშვნელობა

- ნაგულისხმევი რეჟიმი არის **ლოკალური დემო**. მონაცემები ინახება მხოლოდ ამ ბრაუზერში; სხვა მოწყობილობასთან არ სინქრონდება.
- მონაცემები სატესტოა. ბრაუზერის გასუფთავებამ შეიძლება წაშალოს. ეს არ არის სარეზერვო ან საბუღალტრო სერვერი.
- როლების შეზღუდვა მხოლოდ UI-ს დემონსტრირებაა. ბრაუზერის მფლობელს შეუძლია კოდის/საცავის შეცვლა.
- რეალური გადახდა, SMS, დაცული აუდიტი, სერვერული ტრანზაქციები და ერთდროული მრავალმომხმარებლიანი დაცვა backend-ის პასუხისმგებლობაა.
- ზუსტი ადგილობრივი მხარდაჭერა და API-ს საჭიროებები აღწერილია **`QA-PARITY.md`**-ში და მოდულების ინსტრუქციებში. API-ს საჭირო მოქმედება წარმატებულ დემო-ოპერაციად არ ინიღბება.

## კამერა და ანგარიშები

- ფოტო გადაღება იყენებს ბრაუზერის მშობლიურ კამერას.
- შტრიხკოდი იკითხება მხოლოდ მაშინ, როცა ბრაუზერს აქვს `BarcodeDetector`. სადაც არ აქვს (მათ შორის Safari-ის ბევრ ვერსიაში), გამოიყენეთ **ხელით შეყვანა** ან USB/Bluetooth სკანერი, რომელიც კლავიატურასავით წერს. გარედან სკანირების ბიბლიოთეკა არ იტვირთება.
- სალაროს/გაყიდვების მონაცემთა ექსპორტი არის **CSV**.
- ხარჯების ანგარიში არის **Excel XML (`.xml`)**, სამი ფურცლით. ეს **არ არის `.xlsx`**. გაიხსნება Excel-ის თავსებად პროგრამაში; ფაილის გაფართოება არ გადაარქვათ `.xlsx`-ად.

## შემოწმება

კოდის მუშაობისთვის Node არ გჭირდებათ. მხოლოდ ტესტების ხელახლა გასაშვებად, თუ პროგრამისტს Node უკვე აქვს:

```sh
node --test tests/*.test.* cash/tests/*.test.* expenses/tests/*.test.*
```

ჩატარებული შემოწმებები და დარჩენილი შეზღუდვები: **`QA-PARITY.md`**.
