## Plan: Stabilizo init_db kundër SQLite lock (DRAFT)

Qëllimi është të eliminohet gabimi “database table is locked” gjatë inicializimit dhe të ulet rreziku i rikthimit të tij në përdorim normal. Shkaku kryesor është migrimi DDL në [init_db.php](init_db.php#L73-L91) pa bllokim të qëllimshëm të shkrimit dhe me konkurencë nga kërkesa të tjera që shkruajnë në DB (p.sh. [auth.php](auth.php#L26-L31), [table.php](table.php#L38-L304), [modules/inventory.php](modules/inventory.php#L7-L29)). Ky plan vendos një rrjedhë të sigurt migrimi, forcon konfigurimin SQLite për konkurrencë, dhe ul DDL runtime në module për të shmangur lock të rastësishëm.

**Steps**
1. Shto kontroll operativ “maintenance window” në [init_db.php](init_db.php) që ndalon ekzekutimin nëse sistemi është aktiv dhe jep udhëzim të qartë për ekzekutim të sigurt.
2. Ristrukturo bllokun e migrimit te [init_db.php](init_db.php#L73-L91) në transaksion të vetëm me BEGIN IMMEDIATE, COMMIT dhe ROLLBACK në dështim, me raportim gabimi të qartë.
3. Shto retry të kufizuar vetëm për operacionet DDL kritike në [init_db.php](init_db.php#L73-L123) kur ndodh lock i përkohshëm.
4. Forco konfigurimin e lidhjes SQLite në [config.php](config.php#L15-L17): vendos pragmë për ulje konkurrencash (p.sh. journal mode i përshtatshëm) dhe timeout migrimi më të gjatë vetëm për init.
5. Hiq ose kufizo DDL runtime nga faqe operative me risk të lartë: [modules/inventory.php](modules/inventory.php#L7-L29), [modules/kds.php](modules/kds.php#L6-L15), [modules/shift_close.php](modules/shift_close.php#L15-L27), [modules/report_shifts.php](modules/report_shifts.php#L5-L13), duke i kaluar në init/migrime një-herëshe.
6. Përditëso mesazhet e gabimeve në [modules/inventory.php](modules/inventory.php#L176-L177) që të raportojnë tabelën reale që mungon, jo etiketim të përgjithshëm.
7. Dokumento procedurën e ekzekutimit të init në një file të shkurtër operativ (p.sh. runbook në root) me hapa për XAMPP/Windows.

**Verification**
- Me tab-e aktive të mbyllura, ekzekuto [init_db.php](init_db.php) dhe konfirmo që migrimi kalon pa fatal error.
- Hap [modules/inventory.php](modules/inventory.php), [table.php](table.php), dhe rrjedhën e mbylljes së turnit për të verifikuar që nuk ka lock regressions.
- Simulo ngarkesë të lehtë (dy sesione) dhe konfirmo që gabimet lock reduktohen ose trajtohen me retry pa prishur skemën.
- Verifiko që mesazhet e gabimeve tregojnë saktë tabelën/arsyen reale.

**Decisions**
- Zgjedhim transaksion të tipit IMMEDIATE për migrimin sepse minimizon dështimet e pjesshme të DDL.
- Zgjedhim zhvendosjen e DDL nga runtime modules te init/migrime për stabilitet afatgjatë.
- Mbajmë ndryshimet minimale funksionale në UI; fokusi është vetëm në stabilitetin e DB dhe diagnostikim.

Mbyllje dite automatike (EOD): në fund të ditës sugjeron “mbyll tavolinat e mbetura + mbyll turnin” me 1 klik.
Nivele minimale stoku + alarme: njoftim kur produkti bie nën prag dhe bllokim opsional i shitjes “out of stock”.
Split bill: ndarje fature sipas personave ose artikujve (shumë e kërkuar në restorante).
Metoda pagese: cash/kartë/transferte dhe raport ditor sipas metodës.
Happy hour / çmime me orar: çmime automatike sipas intervalit orar.
Audit log i veprimeve kritike: kush anulloi faturë, kush ndryshoi çmim, kush fshiu tavolinë/zonë.
Dashboard i shpejtë: xhiro sot, tavolina aktive, produktet top, anulime.
Backups automatike: kopje ditore e sqlite me rikthim 1-klik.
Menaxhim rezervimesh: ora, nr klientësh, tavolina e caktuar.
KDS me timer për artikull: sa minuta ka çdo porosi në kuzhinë + sinjal vonese.