===============================================================
 FOUNTAINTRADE — TELEPÍTÉSI ÚTMUTATÓ (Windows)
===============================================================

Ez egy PHP alkalmazás vonalkódos pénztárgéphez / készletkezeléshez.
Alapértelmezett (Önálló) módban helyi (localhost) telepítés — nincs
szükség internetre, felhő-szolgáltatásra vagy adatbázis-szerverre,
mindent egyetlen gépen, egyetlen SQLite fájlban tárol. Nem kell hozzá
Composer és semmilyen külső program (LibreOffice sem, az Excel-import
saját maga olvassa be az .xls/.xlsx fájlokat). 1.5.0-tól opcionálisan
egy Szerver + több Kliens-gépes elrendezés is választható — lásd lent:
"0b. TÖBB-TERMINÁLOS ÜZEMMÓD".


---------------------------------------------------------------
0. GYORS TELEPÍTÉS (AJÁNLOTT) — FountainTrade-Setup.bat
---------------------------------------------------------------

Ha a "FountainTrade-Installer" mappát kaptad meg (FountainTrade-Setup.bat
+ install-windows.ps1 + README-INSTALL.txt), a teljes telepítéshez ennyi
a teendő:

  1. Duplán kattints a FountainTrade-Setup.bat fájlra.
  2. Fogadd el a megjelenő UAC-ablakot ("Igen").
  3. Várd meg, amíg a telepítő végez (ez néhány percig eltarthat, ha a
     PHP-t is most kell letöltenie).
  4. A böngésző magától megnyílik — ha az app még nincs beállítva, a
     telepítő varázslóra, egyébként a Dashboardra.

Ennyi — nincs szükség PowerShell-parancsok kézi bemásolására, a PHP-t
és a FountainTrade legutóbbi stabil kiadását a telepítő magától letölti
és ellenőrzi (checksum + a GitHub Release valódiságának ellenőrzésével).
A telepítő TÖBBSZÖR is futtatható (pl. ha módosult valami a gépen) —
nem hoz létre duplikált Feladatütemező-bejegyzést vagy parancsikont, és
nem törli a meglévő adatokat/beállításokat.

Alapértelmezett telepítési hely: C:\ProgramData\FountainTrade.

Ha a telepítő bármelyik lépésnél hibát jelez, az ablak NEM záródik be
azonnal — elolvasható, melyik lépés bukott el és mi a javasolt következő
teendő. Ha valami mégsem egyértelmű, lásd a 9. pont (Hibaelhárítás)
szakaszát, vagy a részletes, kézi telepítési lépéseket alább (1-8. pont)
— ezek akkor is hasznosak, ha csak ellenőrizni szeretnéd, mit csinál a
gyors telepítő a háttérben, vagy ha valamiért kézzel, lépésről lépésre
szeretnéd elvégezni ugyanezt.


---------------------------------------------------------------
0b. TÖBB-TERMINÁLOS ÜZEMMÓD (Önálló / Szerver / Kliens) — 1.5.0
---------------------------------------------------------------

A FountainTrade-Setup.bat / install-windows.ps1 telepítő a fájlok
másolása közben megkérdezi:

    Milyen szerepet kap ez a számítógép?

      1) Önálló gép
      2) Szerver
      3) Kliens

    Jelenlegi beállítás: Önálló gép — Enter = ezt tartja meg.
    Választás (1/2/3, vagy Enter):

  1) Önálló gép — az alapértelmezett. Válaszd ezt, ha egyetlen gépen,
     egyetlen kasszán fut az egész üzlet. Semmi hálózati változás nem
     történik, a viselkedés ugyanaz, mint korábbi verziókban.

  2) Szerver — válaszd EZT arra az EGY gépre, amelyik a TÉNYLEGES
     adatbázist tárolja, és amit a többi (Kliens) gép el fog érni a
     helyi hálózaton. A telepítő ilyenkor:
       - a beépített PHP szervert minden hálózati interfészre
         (0.0.0.0) köti, nem csak localhost-ra;
       - létrehoz/frissít egy Windows Firewall-szabályt, ami
         KIZÁRÓLAG a helyi alhálózatról (LocalSubnet) engedélyez
         bejövő kapcsolatot — internetről közvetlenül SOSE lesz
         emiatt elérhető;
       - bekér egy ALKALMAZÁS-JELSZÓT (legalább 8 karakter): Szerver
         módban a helyi hálózatról érkező böngésző-hozzáférés mindig
         bejelentkezést igényel (nem-interaktív telepítésnél a
         FOUNTAINTRADE_APP_PASSWORD környezeti változóban kell megadni);
       - az admin "Kliensek" oldalon (Beállítások menü) tudsz majd
         Kliens-gépeket regisztrálni (ott kapod meg az egyszeri
         Client ID / Client Secret párost, amit a következő pontban
         a Kliens telepítőjének meg kell adnod).
     Ha a Szervert az internetről is el kell érni (nem csak a boltod
     helyi hálózatáról), MINDENKÉPP állíts be HTTPS-t elé — lásd
     `telepites-tavoli-szerver.txt` "5. HTTPS" szakaszát. Tisztán
     helyi hálózaton belül ez enyhébb, de továbbra is ajánlott.

  3) Kliens — egy TERMINÁL-gép, aminek NINCS saját adatbázisa: minden
     adatot a fenti Szervertől kér le, a hálózaton keresztül:

         Kliens (böngésző) -> Kliens (helyi FountainTrade)
                            -> HTTP/HTTPS -> Szerver -> Adatbázis

     Ehhez a telepítő bekéri:
       - a Szerver címét (pl. http://192.168.1.10:8000 vagy egy
         HTTPS-cím, ha a Szerver azon keresztül lett közzétéve),
       - a Client ID-t és Client Secret-et (a Szerver admin
         "Kliensek" oldalán kapod meg — a Secret csak EGYSZER
         jelenik meg ott, jegyezd fel azonnal),
     A Client Secret bekérése rejtett bevitellel történik (nem
     jelenik meg a képernyőn/naplóban nyílt szövegként). Ha a megadott
     Szerver-cím nem HTTPS-sel kezdődik, a telepítő egy figyelmeztetést
     ír ki, de nem tiltja le a telepítést (helyi hálózaton belül ez
     elfogadható lehet).

  A szerepkör bármikor módosítható a telepítő ÚJRAFUTTATÁSÁVAL — a
  telepítő ilyenkor a jelenlegi beállítást ajánlja fel alapértelmezettként
  (Enter = megtartás). Ha egy korábban Önálló/Szerver gépet Kliensre
  váltasz, és a gépen már van saját (nem üres) adatbázis, a telepítő
  egy explicit FIGYELMEZTETÉST ír ki és megerősítést kér — a HELYI
  adatbázis a lemezen MARAD (nem törlődik), de az alkalmazás onnantól
  nem azt használja, minden adat a Szerveren jelenik meg.

  Kézi/utólagos szerepkör-módosításhoz (a telepítő újrafuttatása
  nélkül) a `tools\installer-set-topology.php` PHP CLI-eszköz is
  elérhető közvetlenül a telepített mappában — ez ugyanaz az eszköz,
  amit maga a telepítő is használ.

  FONTOS: ez a szerepkör-választás EGY MÁSIK "több eszköz" történet,
  mint a `telepites-tavoli-szerver.txt` (Linux/Nginx, egyetlen node
  gyorsabb kiszolgálása több böngészőnek). A kettő nem ugyanaz, de
  kombinálható — lásd a README.md "Több-terminálos üzemmód: Önálló /
  Szerver / Kliens" szakaszát a teljes részletekért.


---------------------------------------------------------------
1. RÉSZLETES/KÉZI TELEPÍTÉS — RENDSZERKÖVETELMÉNYEK
---------------------------------------------------------------

(Ha a 0. pont szerinti FountainTrade-Setup.bat-ot használtad, ez a
szakasz és az utána következők [2-8. pont] csak tájékoztató jellegűek —
a gyors telepítő ugyanezeket a lépéseket végzi el automatikusan. Kézi
telepítéshez, hibaelhárításhoz, vagy ha külön szeretnéd érteni/
irányítani az egyes lépéseket, kövesd az alábbiakat.)

- Windows 10/11
- PHP 8.1 vagy újabb (ez az útmutató PHP 8.3-mal lett tesztelve)
- Az alábbi PHP-kiterjesztések bekapcsolva:
    pdo_sqlite, sqlite3    -> az adatbázishoz (alapértelmezett, SQLite)
    pdo_mysql              -> CSAK akkor kell, ha az 5. pontban MySQL-t
                              választasz adatbázisnak SQLite helyett —
                              enélkül a MySQL-hez csatlakozás "could not
                              find driver" hibával elbukik. Megjegyzés:
                              a MySQL-ágat ez a telepítő NEM validálta
                              élő MySQL-szerverrel, csak kódszinten és
                              SQL-rögzítéssel (lásd README).
    curl                   -> WooCommerce / Számlázz.hu / NAV / Dropbox /
                              Google Drive hívásokhoz
    mbstring               -> ékezetes szövegek, karakterkódolás
    gd                     -> vonalkód-generálás / címkenyomtatás
    xmlwriter              -> Számlázz.hu XML-hívásokhoz
    zip                    -> .xlsx import beolvasásához
    fileinfo               -> logó-feltöltésnél a fájltípus ellenőrzéséhez
    openssl                -> biztonságos HTTPS-hívásokhoz
    opcache (zend_extension) -> NEM kötelező, de erősen ajánlott: enélkül
                              minden egyes kérésnél újra kell értelmeznie
                              a szervernek a PHP-fájlokat, ami érezhetően
                              lassítja az oldalbetöltést.
- Egy USB vonalkódolvasó (billentyűzetként viselkedik, nem kell hozzá
  driver — csak kattints a vonalkód mezőbe és húzd le vele a terméket)


---------------------------------------------------------------
2. PHP TELEPÍTÉSE
---------------------------------------------------------------

Ha a gépen még nincs PHP:

  a) Legegyszerűbb: winget-tel (ha elérhető és nem 404-el a csomag)

       winget install --id PHP.PHP.8.3 -e

     Ha ez hibát dob (előfordul, hogy a winget-katalógus egy már nem
     létező verziószámra mutat), töltsd le kézzel a következő lépésben
     leírt módon.

  b) Kézzel, hivatalos forrásból (ez működött nálam biztosan):

     1. Nyisd meg: https://windows.php.net/download/
     2. Töltsd le a "VS16 x64 Thread Safe" ZIP-et (pl.
        php-8.3.xx-Win32-vs16-x64.zip — a Thread Safe (TS) verzió kell,
        ez a "php -S" beépített szerverhez szükséges)
     3. Csomagold ki pl. ide: C:\tools\php83
     4. Másold át a mellékelt php.ini-development fájlt php.ini néven
        ugyanabba a mappába:

          copy php.ini-development php.ini

     5. Nyisd meg a php.ini-t, és kapcsold be az alábbi sorok elejéről a
        pontosvesszőt (;) az 1. pontban felsorolt kiterjesztéseknél,
        pl.:

          extension_dir = "ext"
          extension=curl
          extension=fileinfo
          extension=gd
          extension=mbstring
          extension=openssl
          extension=pdo_sqlite
          extension=sqlite3
          extension=xmlwriter
          extension=zip

        Az OPcache bekapcsolásához külön ezt is vedd ki kommentből:

          zend_extension=opcache

        ...és a fájl VÉGÉRE illeszd be (ha még nincs ott):

          opcache.enable=1
          opcache.enable_cli=0
          opcache.memory_consumption=64
          opcache.max_accelerated_files=4000
          opcache.revalidate_freq=1
          opcache.validate_timestamps=1

     6. Add hozzá a mappát (pl. C:\tools\php83) a Windows PATH-hoz, VAGY
        egyszerűen mindig a teljes elérési úttal hivatkozz rá.

  Ellenőrzés parancssorból:

    C:\tools\php83\php.exe -v
    C:\tools\php83\php.exe -m

  Az utóbbi kilistázza a betöltött kiterjesztéseket — ellenőrizd, hogy
  mind a 8 fent felsorolt benne van-e, plusz a modullista alján, külön
  "[Zend Modules]" alatt a "Zend OPcache" is szerepel.


---------------------------------------------------------------
2A. AZ install-windows.ps1 SZKRIPT KÖZVETLEN FUTTATÁSA (haladóknak)
---------------------------------------------------------------

A 0. pont szerinti FountainTrade-Setup.bat valójában ugyanezt az
install-windows.ps1 szkriptet indítja el, csak automatikus UAC-emeléssel
és Execution Policy-kezeléssel becsomagolva. Ha PowerShell-ből, kézzel,
egyedi paraméterekkel szeretnéd futtatni (pl. más portra, más
célkönyvtárba, vagy egy már kicsomagolt FountainTrade-mappán belülről),
Rendszergazdaként futtatott PowerShell-ből:

    .\install-windows.ps1

A szkript AUTOMATIKUSAN felismeri, hogy friss telepítésről van-e szó
(nincs "webroot" mappa mellette — ilyenkor letölti és ellenőrzi a
legutóbbi stabil GitHub Release-t, lásd 8. pont), vagy egy már
kicsomagolt/telepített FountainTrade-en belül fut (ilyenkor a saját
mappáját használja, letöltés nélkül — ez a viselkedés, ha a projekt
teljes forráskódját magaddal hoztad). Ha nem Rendszergazdaként indítod,
saját magát újraindítja UAC-on keresztül — ehhez sem Execution Policy
módosítás, sem kézi PowerShell-megnyitás nem szükséges.

A szkript IDEMPOTENS — bátran futtatható többször is, nem hoz létre
duplikált Feladatütemező-bejegyzéseket/parancsikonokat, nem ír felül
meglévő adatot. Ellenőrzi (és szükség esetén automatikusan telepíti,
hivatalos, ellenőrzött forrásból) a PHP-t és az összes kötelező
kiterjesztést, létrehozza/ellenőrzi az írható mappákat (valódi
írás-teszttel), Feladatütemező-bejegyzést hoz létre a beépített PHP
szerver bejelentkezéskori, crash esetén automatikusan újrainduló
indítására, majd létrehozza mind az öt automatikus háttérfeladatot
(8. pont) is.

A cron-titkos token (8. pont) SOHA nincs beégetve a szkriptbe — ha még
nincs beállítva sehol, a szkript maga GENERÁL egy kriptográfiailag
véletlen tokent, és elmenti a data\settings.json-ba (ez a Beállítások →
Mentés oldalon később bármikor lecserélhető). Ez enélkül egy vadonatúj
gépen a háttérfeladatok csendben, észrevétlenül sose futnának le
sikeresen — a Beállítások oldal saját maga sose generál tokent
automatikusan, csak kézi mentéskor menti el, amit oda beírsz.

Paraméterek (mind opcionális): -InstallPath, -PhpDir, -PhpPath, -Port
(alap: 8000), -CronToken, -Channel, -SkipScheduledTasks, -SkipPhpInstall,
-SkipShortcuts, -SkipDownload. Részletes súgó:

    Get-Help .\install-windows.ps1 -Full


---------------------------------------------------------------
3. A PROJEKT MÁSOLÁSA
---------------------------------------------------------------

Másold az egész "stock-manager-app" mappát a célgépre, tetszőleges
helyre (pl. C:\stock-manager-app). A mappaszerkezet:

    stock-manager-app\
      config\config.php     <- alap beállítások (a telepítő is ír bele)
      data\                 <- SQLite adatbázis, biztonsági mentések,
                               import-ideiglenes fájlok (ÍRHATÓNAK KELL
                               LENNIE a PHP folyamat számára)
      invoices\              <- letöltött Számlázz.hu PDF-ek (ÍRHATÓ)
      webroot\assets\        <- feltöltött logó (ÍRHATÓ)
      webroot\               <- ez a szerver dokumentum-gyökere

Windows alatt normál esetben nincs teendő a jogosultságokkal (a saját
felhasználói mappádban minden írható) — ha mégis "permission denied"
hibát kapnál, jobb klikk a "data" és "invoices" mappákon → Tulajdonságok
→ Biztonság fülön adj Módosítás jogot a felhasználódnak.


---------------------------------------------------------------
4. SZERVER INDÍTÁSA
---------------------------------------------------------------

Nyiss egy parancssort (cmd vagy PowerShell) A PROJEKT GYÖKERÉBEN
(abban a mappában, ahol a "webroot" mappa van), és futtasd:

    C:\tools\php83\php.exe -S localhost:8000 -t webroot

(Ha a PHP-t hozzáadtad a PATH-hoz, elég csak: php -S localhost:8000 -t webroot)

Ez a parancssor-ablak addig fusson, amíg az appot használod — ha
bezárod, a szerver is leáll. Éles/tartós használathoz érdemes ezt egy
Windows szolgáltatásként vagy a Feladatütemezőben "bejelentkezéskor
induljon" beállítással automatizálni (lásd 8. pont), vagy csak hagyd a
parancssor-ablakot futni a háttérben a kasszagépen.

FONTOS (éles üzem): a fenti egyetlen "php -S" Windows-on minden kérést
SORBAN szolgál ki — egy AI-futás, egy lassú számlázó-/webshop-hívás vagy
egy cron-feladat alatt minden kassza vár. Éles használatra a telepítő
(FountainTrade-Setup.bat) által is használt párhuzamos indítást ajánljuk:

    C:\tools\php83\php.exe tools\http-dispatcher.php --listen=localhost:8000 --webroot=webroot

Ez 3 pénztári + 1 háttér "php -S" folyamatot indít a 8001-8004 portokon
(csak a gépen belül elérhetők) — ezeknek szabadnak kell lenniük. Lásd
README "Teljesítmény, futtatási modell és kapacitás".


---------------------------------------------------------------
5. TELEPÍTŐ VARÁZSLÓ (első indítás)
---------------------------------------------------------------

Nyisd meg böngészőben: http://localhost:8000

Ez automatikusan az install.php telepítő-oldalra irányít (amíg nincs
telepítve), ahol:

  - Megadhatod a bolt nevét és címét (ez jelenik meg a nyugtán)
  - Kiválaszthatod az adatbázis-típust:
      SQLite  -> AJÁNLOTT, nulla beállítás, egy fájlban tárol mindent
      MySQL 8 -> csak akkor kell, ha sok forgalmú, több gépes
                 beállításod van (lásd README.md "Database: SQLite vs
                 MySQL" szakaszát)
  - "Kihagyás — SQLite alapértelmezett" gombbal a legegyszerűbb út:
    egyetlen kattintással kész is vagy.

A varázsló a config\installer-generated.php fájlba írja a választásokat
— ez felülírja a config\config.php alapértelmezéseit, de a config.php-t
magát nem módosítja.

Telepítés után egyenesen a Kasszára (index.php) kerülsz.


---------------------------------------------------------------
6. ELSŐ LÉPÉSEK HASZNÁLAT ELŐTT
---------------------------------------------------------------

a) Termékek felvitele — kétféleképpen:

   - Kézzel: Árucikkek → "+ Új árucikk", vagy Beszerzés oldalon
     vonalkód-szkenneléssel / "+ Új termék hozzáadása" gombbal.
   - Tömegesen import: Beállítások → Importálás fülön feltöltheted a
     korábbi programod (pl. Axel Pro) exportált CSV, XLS vagy XLSX
     fájlját — ez automatikusan felismeri és beolvassa mindhárom
     formátumot, külön program telepítése nélkül.

b) WooCommerce-szinkron (ha van webáruházad):
   Beállítások → WooCommerce fülön add meg a bolt URL-jét és a
   REST API kulcsokat (WooCommerce → Beállítások → Speciális →
   REST API → Kulcs hozzáadása, jogosultság: Írás/Olvasás), majd a
   topbar szinkron-ikonjával húzhatod be a termékeket/készletet.

c) Számlázz.hu (ha nyugta helyett/mellett számlát is akarsz kiállítani):
   Beállítások → Számlázz.hu fülön add meg a Számla Agent kulcsot
   (Számlázz.hu → Beállítások → Számla Agent → kulcs generálása).
   Enélkül a kassza simán csak nyugtát rögzít, számla-hívás nélkül.

d) Nyomtatás:
   - Böngészős nyomtatás mindig működik, driver nélkül.
   - Hálózati (Ethernet/WiFi) hőnyomtatóhoz: Beállítások → Nyomtató
     fülön add meg az IP-címét (port 9100 szokásos).
   - Külön nyomtatási logó is beállítható (Beállítások → Logó lent,
     "Nyomtatási logó" blokk) — hasznos, ha a felületen használt logó
     színes/részletes, és papíron nem mutatna jól.


---------------------------------------------------------------
7. BIZTONSÁG (opcionális, de ajánlott, ha nem csak Te éred el a gépet)
---------------------------------------------------------------

- Alkalmazás-jelszó: Beállítások → Biztonság → "Jelszavas védelem
  bekapcsolva" — bekapcsolva minden oldal bejelentkezést kér. Ugyanitt
  állítható az automatikus kijelentkezési idő és a sikertelen
  próbálkozások limitje (alapértelmezetten 5 próba után zárol, 15
  percre).
- Dolgozói PIN: Beállítások → Dolgozók (vagy Kasszán a "Dolgozó
  váltása" gomb) — ez NEM belépési védelem, csak elszámoltatás (ki
  dolgozott a kasszánál egy adott eladásnál). 4-8 jegyű PIN-kódot
  kérhetsz be dolgozónként, ezt is védi a fenti próbálkozás-limit.
- Fontos: alapból NINCS bekapcsolva a jelszavas védelem — ha a gép
  hálózaton (nem csak localhost-on) is elérhető, mindenképp állítsd be,
  vagy kösd a PHP szervert kifejezetten 127.0.0.1-re.


---------------------------------------------------------------
8. AUTOMATIKUS FELADATOK (opcionális)
---------------------------------------------------------------

Az automatikus WooCommerce-szinkron, az automatikus napi biztonsági
mentés, ÉS a NAV Online Számla kimenő/bejövő feldolgozása csak akkor
fut le ténylegesen a háttérben, ha valami rendszeresen "megkopogtatja"
— a beépített PHP szerver magától nem ébred fel. Ehhez a Windows
Feladatütemezőben (Task Scheduler) hozz létre ismétlődő feladatokat,
amik ezt futtatják:

  Szinkron (percenként elég):
    curl -s -H "X-Cron-Token: IDE_A_CRON_TOKEN" "http://localhost:8000/api/auto-sync-run.php"

  Biztonsági mentés (15 percenként elég):
    curl -s -H "X-Cron-Token: IDE_A_CRON_TOKEN" "http://localhost:8000/api/auto-backup-run.php"

  NAV kimenő számla-queue (javasolt: percenként):
    curl -s -H "X-Cron-Token: IDE_A_CRON_TOKEN" "http://localhost:8000/api/nav-queue-run.php"

  NAV bejövő számla-szinkron (javasolt: óránként):
    curl -s -H "X-Cron-Token: IDE_A_CRON_TOKEN" "http://localhost:8000/api/nav-incoming-sync-run.php"

  Önfrissítés-ellenőrzés (javasolt: 30 percenként — lásd README
  "Önfrissítés" szakasza; ez a végpont SOSE telepít semmit, csak
  ellenőriz, és csak akkor tesz bármit, ha a Beállítások → Frissítések
  alatt az "Automatikus ellenőrzés" be van kapcsolva):
    curl -s -H "X-Cron-Token: IDE_A_CRON_TOKEN" "http://localhost:8000/api/update-check-run.php"

  WooCommerce készlet-push queue (javasolt: percenként — ettől
  FÜGGETLEN a fenti "Szinkron" bejegyzéstől: az auto-sync-run.php a
  termék/rendelés BEHÚZÁST végzi, ez a wc-queue-run.php pedig a helyi
  eladásokból származó készlet-KIKÜLDÉST dolgozza fel egy belső
  várólistáról — enélkül a WooCommerce-be sosem jut el a helyi
  eladások miatti készletcsökkenés):
    curl -s -H "X-Cron-Token: IDE_A_CRON_TOKEN" "http://localhost:8000/api/wc-queue-run.php"

  AI napi intelligencia (javasolt: 30 percenként — csak akkor csinál
  bármit, ha a Beállítások → AI asszisztens alatt az "AI napi
  intelligencia" be van kapcsolva):
    curl -s -H "X-Cron-Token: IDE_A_CRON_TOKEN" "http://localhost:8000/api/ai-daily-intelligence-run.php"

Mind a hét végpont ugyanazt a hitelesítést használja: a token a
Beállítások → Mentés alatt beállítható cron titkos tokennel egyezzen
— enélkül egyik végpont se futna le bejelentkezés nélkül (a
Feladatütemező nem tud böngészőben bejelentkezni). A token KIZÁRÓLAG
az X-Cron-Token fejlécben megy, sose URL-ben/query-stringben (egy
URL-be írt titok könnyen bekerülhetne naplókba/előzményekbe) — egyik
végpont sem fogad el query-string tokent.

Mindegyik ártalmatlan, ha gyakrabban hívod, mint kell — az endpoint
saját maga dönti el, hogy tényleg esedékes-e a futás, és "skipped"-del
tér vissza, ha még nem (a NAV-végpontok pl. akkor is, ha a NAV
integráció ki van kapcsolva, vagy a NAV-hitelesítő adatok még nincsenek
kitöltve).

FONTOS a NAV kimenő queue-hoz (nav-queue-run.php): ha a Beállítások →
Számlázz.hu fülön bekapcsolod a NAV Online Számla közvetlen kiállítást
(`invoice_provider = nav`, "NAV számla queue háttér-feldolgozás
bekapcsolva"), ez a cron-feladat NEM opcionális — enélkül
a kiállított NAV-számlák csak "queued" állapotban maradnak a
adatbázisban, SOSE kerülnek ténylegesen beküldésre a NAV felé, tartósan
és látszólag hiba nélkül. Ha kimarad egy-egy cron-futás (pl. a gép ki
volt kapcsolva), nincs adatvesztés — a soron következő futás egyszerűen
folytatja onnan, ahol tartott (a `next_attempt_at`/backoff-ütemezés
szerint esedékes sorokat dolgozza fel); egy régen beragadt, összeomlott
worker zárja (10 percnél régebbi `processing`-állapot) automatikusan
újra feldolgozhatóvá válik a következő futáskor.

A NAV bejövő szinkronhoz (nav-incoming-sync-run.php) hasonlóan: ha
kimarad egy-két óránkénti futás, a szinkron-kurzor a legutóbbi sikeres
állapotnál marad, és a következő futás onnan folytatja — a NAV 35 napos
lekérdezési-ablak korlátja miatt egy hosszan kimaradt szinkron több
cron-tick alatt éri utol magát, adatvesztés nélkül, csak késéssel.

A tényleges gyakoriságot/be- és kikapcsolást a Beállítások →
Szinkronizálás, Beállítások → Mentés és Beállítások → Számlázz.hu
füleken állíthatod be.

Mind a hét feladat áttekintése (ugyanez a lista regisztrálódik
automatikusan a Windows telepítőn, Szerver/Önálló módban — Kliens
módban EGYIK SEM, mert egy Kliens node-nak nincs saját adatbázisa,
amin bármelyik worker dolgozhatna):

  Végpont                          | Javasolt gyakoriság | Mit csinál
  ----------------------------------+----------------------+---------------------------------
  auto-sync-run.php                | percenként           | WooCommerce termék/rendelés behúzás
  auto-backup-run.php              | 15 percenként        | Automatikus biztonsági mentés
  nav-queue-run.php                | percenként           | NAV kimenő számla-queue feldolgozása
  nav-incoming-sync-run.php        | óránként             | NAV bejövő számla-szinkron
  update-check-run.php             | 30 percenként        | Önfrissítés-ellenőrzés (csak ellenőriz)
  wc-queue-run.php                 | percenként           | WooCommerce készlet-push queue feldolgozása
  ai-daily-intelligence-run.php    | 30 percenként        | AI napi intelligencia (ha be van kapcsolva)

Mind a hét ugyanazt az X-Cron-Token hitelesítést igényli, és mind
ártalmatlan, ha gyakrabban hívod, mint kell (lásd fentebb).

FONTOS — MEGLÉVŐ TELEPÍTÉS FRISSÍTÉSE UTÁN:
Ha ezt a gépet korábban (a párhuzamos-futtatási diszpécser bevezetése
előtti verzióval) telepítetted, és azóta önfrissítéssel/kézi
kódcserével frissítetted, az önfrissítés telepíti a
`tools/http-dispatcher.php`-t, DE a Feladatütemező szerver-bejegyzését
NEM írja át — a párhuzamos futtatásra (3 pénztári + 1 háttér-folyamat,
lásd README "Teljesítmény, futtatási modell és kapacitás" szakasza) való
átálláshoz EGYSZER újra kell futtatnod a FountainTrade-Setup.bat-ot
(idempotens, az adatokat nem érinti). Enélkül a gép csendben, az
eredeti, egyszálú `php -S`-sel fut tovább.


---------------------------------------------------------------
9. HIBAELHÁRÍTÁS
---------------------------------------------------------------

A FountainTrade-Setup.bat elutasítja az UAC-ablakot, vagy nem jelenik
meg semmi
  -> Rendszergazdai jog nélkül a telepítő nem tud Feladatütemező-
     bejegyzést létrehozni. Indítsd újra a FountainTrade-Setup.bat-ot,
     és az UAC-ablakban válaszd az "Igen"-t. Ha az UAC-ablak egyáltalán
     nem jelenik meg, ellenőrizd, hogy a fiókod rendelkezik-e
     rendszergazdai jogosultsággal (Vezérlőpult → Felhasználói fiókok).

A FountainTrade-Setup.bat ablaka egy pillanatra felvillan, majd eltűnik
  -> Ez NEM várt viselkedés — a telepítő SOSE záródik be azonnal hiba
     esetén (mindig vár egy billentyűlenyomásra). Ha mégis ezt látod,
     valószínűleg a PowerShell futtatása van teljesen letiltva a gépen
     (pl. vállalati csoportházirenddel) — jelezd az IT-adminisztrátornak,
     vagy kövesd az 1-8. pont szerinti kézi telepítést.

"This site can't be reached" / nem töltődik be az oldal
  -> Fut-e még a php -S (vagy a tools\http-dispatcher.php) parancssor-
     ablak (vagy a "FountainTrade - Szerver" Feladatütemező-bejegyzés)? Ha kézzel indítottad és
     bezártad az ablakot, indítsd újra (4. pont), vagy futtasd újra a
     FountainTrade-Setup.bat-ot — az idempotens, nem hoz létre
     duplikált bejegyzést.

Fehér oldal vagy "Call to undefined function" hiba
  -> Valamelyik szükséges PHP-kiterjesztés nincs bekapcsolva. Nézd meg
     a parancssor-ablakot, ott kiírja, melyik. Kapcsold be a php.ini-ben
     (1-2. pont), majd indítsd újra a szervert.

Lassú oldalbetöltés
  -> Ellenőrizd, hogy az OPcache tényleg be van-e kapcsolva:
       php -m
     A lista alján, "[Zend Modules]" alatt szerepelnie kell a
     "Zend OPcache" sornak. Ha nincs, nézd át újra az 1-2. pontot.

.xls/.xlsx import hibát ad
  -> Az app saját maga olvassa be ezeket a formátumokat (nincs szükség
     LibreOffice-ra). Ha mégis hibát kapsz, valószínűleg a fájl sérült,
     vagy nem szabványos .xls/.xlsx — nyisd meg Excelben/LibreOffice-ban
     és mentsd el "CSV UTF-8 (vesszővel elválasztott)" formátumban,
     majd töltsd fel azt.

Elfelejtett alkalmazás-jelszó
  -> Állítsd le a szervert, nyisd meg a data\settings.json fájlt
     szövegszerkesztőben, és állítsd "app_password_enabled": false
     értékre, mentsd el, majd indítsd újra a szervert. Ezután
     Beállítások → Biztonság alatt állíts be új jelszót.
  -> SZERVER szerepkörben ez NEM működik (ott a jelszó mindig kötelező).
     Helyette a Szerver gépen, rendszergazdai parancssorban, a
     telepítési mappából:
         echo UjJelszo123 | C:\tools\php83\php.exe tools\installer-set-app-password.php --action=set --force
     (legalább 8 karakter; ékezetes jelszóhoz inkább a telepítőt futtasd
     újra a jelszó törlése után, mert a Windows parancssor kódlapja
     elronthatja az ékezeteket).

Nem tudod eldönteni, hogy "rendben van-e" a rendszer, vagy hogy miért
nem szinkronizál/mentődik valami
  -> Nyisd meg a Rendszerállapot oldalt (bal oldali menü, vagy
     http://localhost:8000/rendszerallapot.php). Ez EGY helyen mutatja
     a legtöbb beállított integráció (adatbázis, biztonsági mentés,
     WooCommerce, NAV kimenő queue, SMTP, nyomtató, frissítő) állapotát,
     az utolsó ellenőrzés/siker időpontját és — hiba esetén — egy emberi
     nyelvű magyarázatot. (Kivétel: a NAV "Kapcsolat tesztelése" gomb
     eredménye és a NAV bejövő szinkron utolsó futási ideje jelenleg nem
     jelenik meg ezen az oldalon — a kapcsolat-teszt eredményét a gomb
     megnyomása után azonnal, helyben látod.) A "Figyelmet igényel"
     kártya (ha megjelenik) mindig
     a legfontosabb, azonnal kezelendő problémákat listázza. Az
     "Eseménynapló" kártya az elmúlt események (sikeres/sikertelen
     mentés, szinkron, frissítés stb.) részletes, szűrhető listáját
     adja. WooCommerce-hez és NAV-hoz "Kapcsolat tesztelése" gombbal
     azonnal ellenőrizhető a beállítás, üzleti adat módosítása nélkül.

Egy automatikus háttérfeladat (szinkron/mentés/NAV) "STALE"/elavultnak
tűnik a Rendszerállapoton
  -> Ellenőrizd, fut-e ténylegesen a hozzá tartozó Feladatütemező-
     bejegyzés (lásd 8. pont, vagy futtasd újra a 2A. pont szerinti
     .\install-windows.ps1-et, ami idempotensen újra létrehozza/
     frissíti ezeket). Az app SOHA nem tudja megmondani a Feladatütemező
     tényleges következő futási idejét — csak azt jelzi, mennyi ideje
     nem volt sikeres futás az adott feladat saját, dokumentált
     gyakoriságához képest.


---------------------------------------------------------------
Ennyi — jó munkát vele!
---------------------------------------------------------------
