# EmeLOG változásnapló

Ez a fájl mutatja, hogy éppen milyen verzió fut a szerveren - a rendszeradmin felület
("Rendszerinformáció") ebből a fájlból olvassa ki és jeleníti meg a jelenlegi verziót és a teljes
előzményt. **Minden éles telepítésre kerülő commit-köteg után új bejegyzést kell ide felvenni
legfelülre**, a formátumot betartva (`## v<szám> – <ÉÉÉÉ-HH-NN>`, alatta `- ` kezdetű tételek).

## v94 – 2026-10-11
- ÚJ (favicon, `static/emelog_favicon.svg`, `routers/offline_sync.py`): a favicon eddig a TELJES logó volt (3448x1394, 2,5:1), a böngésző-fülön a széles felirat miatt apró és olvashatatlan. Mostantól **négyzetes (1:1), csak az embléma**: a türkiz épület + a targonca, a logó szövege (EMELOG / DATABASE) levágva. A viewBox az emblémára van középre igazítva (1360x1360, kb. 2-3%-os belső margó); a targonca színe továbbra is a böngésző témájához igazodik (`prefers-color-scheme`: világosban fekete, sötétben fehér), az épület türkiz. A 16 / 32 / 48 / 128 px-es méretek világos és sötét háttéren is megnézve olvashatók. Az SVG-ben nincs C2PA metaadat. A `CACHE_NEV` `emeloreg-offline-v7` lett (a service worker előre gyorsítótárazza a favicont, a régi példány ne maradjon meg).
  - **Teszt:** `tests/t_design.py` új W11 (a favicon négyzetes: viewBox és width/height 1:1, és pontosan 2 path - épület + targonca, betűk nélkül), a W2 / W7 / K4 a `v7`-et és az új szöveget várja; 211 ellenőrzés. Negatív kontroll: ha a favicon a teljes logó, a W11 és a W2 bukik. `python tests/futtat.py --gyors` zöld.

## v93 – 2026-10-11
- JAVÍTÁS (`templates/beallitasok.html`, `tests/t_beallitasok_v93.py`): a v92 inaktív-cég jelzésének két hibája.
  - **1. Minden cég inaktívnak látszott.** A sablon a puszta `not ceg_aktiv`-ot vizsgálta; ha a `ceg_aktiv` kulcs HIÁNYZIK a context-ből (pl. a szerverfolyamat még a v91-es `routers/settings.py`-t futtatja, de a sablont - mtime alapján - már az újat tölti be, vagyis `git pull` után nem indult újra a szerver), a Jinja `Undefined` értéke hamis, így MINDEN cégnél megjelent a piros sáv és az oldal le volt zárolva. Mostantól `ceg_aktiv is defined and not ceg_aktiv` (ugyanaz a konvenció, mint a `list.html`-ben): hiányzó kulcs = nem inaktív. Az éles `aktiv` érték forrása változatlan: `security.is_company_active()` (NULL `aktiv` oszlopérték továbbra is inaktívnak számít - l. `docs/ATADAS.md` 5. pont).
  - **2. A fülek elrendezése eltört inaktív cégnél.** A v92 a `<fieldset disabled>`-et a `.tab-content` BELSEJÉBE tette, a Bootstrap `.tab-content > .tab-pane { display: none }` szabálya viszont csak KÖZVETLEN gyerekre érvényes: a fieldset-be zárt, nem aktív panelek mind `display:block` + `opacity:0` lettek (láthatatlanok, de helyet foglalnak), a fülváltás után a tartalom lejjebb jelent meg, alatta nagy üres hellyel. Most a fieldset a `.tab-content` KÖRÜL van, a fülsor (`#settingsTabs`) kívül marad (a fülek között továbbra is lehet váltani, 45 mező/gomb zárolva). Böngészőben mérve: induláskor és a 2. fül után is pontosan 1 látható panel, a tartalom közvetlenül a fülsor alatt.
  - **Teszt:** új `tests/t_beallitasok_v93.py` (14 ellenőrzés: aktív cég nincs sáv/zárolás; inaktív cég sáv + a fieldset a `.tab-content` körül; `ceg_aktiv` hiányában nincs jelzés; statikus védőháló). Negatív kontroll: `is defined` eltávolítása -> 3 bukás (C1, C2, D1); a fieldset visszatétele a `.tab-content`-be -> 2 bukás (B3, B5). `python tests/futtat.py --gyors` zöld.

## v92 – 2026-10-11
- JAVÍTÁS (UX/biztonság, `routers/settings.py`, `templates/beallitasok.html`): inaktív cégnél a Beállítások oldal mentő/törlő útvonalai eddig IS helyesen tiltották az írást (átirányítás `?inaktiv_ceg=1`-gyel, l. a J-09-es írási kapu), de maga az oldal semmilyen előzetes jelzést nem adott erről - a mezők/gombok elsőre teljesen szerkeszthetőnek TŰNTEK, és csak egy sikertelen mentési kísérlet UTÁN derült ki, hogy semmi nem mentődött. Mostantól a Beállítások oldal induláskor, azonnal mutat egy figyelmeztető sávot, ÉS a teljes fülsor tartalma egy `<fieldset disabled>`-del eleve szerkeszthetetlenné (vizuálisan is szürkítve) válik, ha a cég inaktív - a fülek között továbbra is lehet navigálni (megtekintésre), de egyetlen mező/gomb sem aktív.
  - **Teszt:** élesben kipróbálva (aktív cégnél nincs tiltás/jelzés; inaktívra állítva azonnal megjelenik a sáv, a `<fieldset disabled>` a HTML-ben jelen van, a gombok vizuálisan is szürkék a képernyőképen; egy valódi POST kísérlet továbbra sem ír semmit az adatbázisba). `python tests/futtat.py --gyors` zöld.

## v91 – 2026-10-11
- JAVÍTÁS (mobil nézet, `templates/rendszeradmin_dashboard.html`, `docs/DESIGN_RENDSZER.md`): a rendszeradmin dashboard "Rendszernapló" kártyája telefonon szétesett. **Ok:** a tábla 4 `text-nowrap` oszlopa telefonon szélesebb volt a kártyánál (> 450 px a ~300 px-es hely helyett), így a böngésző az utolsó, `text-break` esemény-oszlopot 22 px-re nyomta, a szöveg betűnként tördelődött: egy sor ~660 px, a kártya 390 px-en ~13 700 px magas lett (a 576-767 px közötti szélességeken is). A teljes napló oldal (`/rendszeradmin/naplo`) és 4 másik lista már kártyás volt (v54/v57), ez a v37-es dashboard-kártya kimaradt.
  - **Javítás:** a napló-tábla a közös kártyás mintát kapta (`el-tabla-kartya`, `data-cimke`, az esemény `el-kartya-cim`, a kategória `el-kartya-statusz`): telefonon (< 576 px) soronként egy kártya (esemény, jelvény, időpont, cég, felhasználó), 390 px-en a kártya ~13 700 → ~2 700 px (15 esemény). Az oldal saját CSS-e: < 576 px-en a `text-nowrap` cellák tördelhetők; 576-767 px között az esemény-oszlopnak `min-width: 16rem` (vízszintesen görgethető a tábla, 13 700 → ~850 px). Asztalon (>= 768 px) a táblázat pixelre változatlan (768 / 1024 / 1280 px-en azonos képpel mérve, sötét és világos téma). CSS-fájlt nem módosítottunk.
  - **Tesztek:** `tests/t_design.py` P6-P8 (összesen 210 ellenőrzés): a napló-tábla osztályai és minden cella címkéje / szerepe, a két oldal-CSS szabály, élő `/rendszeradmin`. Negatív kontroll: 6 szándékos elrontás (osztály, címke, szerep, a két CSS-szabály) - mind elbukik. A meglévő S1 / S2 ellenőrzések (kártyás táblák címkéi, soronként 1 cím) az új táblát is lefedik. Valódi böngészős ellenőrzés (Chromium, Bootstrap helyi másolattal): 360 / 390 / 430 / 575 / 576 / 600 / 700 / 767 / 768 / 900 / 1024 / 1280 px, sötét és világos téma - nincs vízszintes oldal-túlcsordulás.
  - **Telepítéskor:** nincs teendő (csak sablon-módosítás, adatbázis nem érintett).

## v90 – 2026-10-11
- JAVÍTÁS (`routers/machines.py`, `gep_statusz_valtas`): a "Átszállítás másik telephelyre" funkció ÚJ gép-rekordot hoz létre a célon és a régit inaktiválja - ha a gépnek aktív (vagy jóváhagyásra váró) bérlete volt, az a RÉGI, ezután inaktív gép-azonosítóra maradt kötve: a bérlő a megszűnt rekordot látta tovább, a ténylegesen folytatódó (új) gépet viszont nem érte el. Emellett amíg a gép ki van helyezve, a fizikai helye a bérlőnél van - a bérbeadó saját telephelyei közti "átszállítás" ilyenkor fogalmilag sem értelmezhető. Mostantól tiltva (400, egyértelmű üzenet), amíg a gépnek aktív bérlete van - előbb le kell zárni a bérletet.
- **Teszt:** élesben kipróbálva (bérelt gép átszállítása tiltva, a gép és a bérlet állapota változatlan marad, nem jön létre másolat-gép; egy NEM bérelt gép átszállítása továbbra is a megszokott módon működik). `python tests/futtat.py --gyors` zöld.

## v89 – 2026-10-11
- JAVÍTÁS (kockázatértékelés PDF, `routers/machines.py`, `main.py`): az MSZ 9750 1.2 pont (Veszélyes teher/személy emelése) kapcsolónál feltöltött kockázatértékelés-PDF eddig kizárólag a gép saját mezőjébe (`Machine.kockazatertekeles_pdf_path`) mentődött, SOHA nem lett belőle dokumentum-bejegyzés - ezért nem jelent meg a "Csatolt dokumentumok" listájában és a Gépnaplóban sem (mindkettő kizárólag a `File` táblából dolgozik). Mostantól a feltöltés a saját mező MELLETT egy `File` sort is létrehoz ("Kockázatértékelés" típussal); újra-feltöltésnél a korábbi sort lecseréli, nem halmozza. A meglévő gépeknél (amiknek már van kitöltött mezője, de nincs hozzá dokumentum-bejegyzése) egyszeri, induláskor lefutó, idempotens pótlás gondoskodik a visszamenőleges javításról.
- **Teszt:** élesben kipróbálva (új gép + kockázatértékelés feltöltése → megjelenik a Csatolt dokumentumoknál és a Gépnaplóban; újra-feltöltés nem duplikál; egy "régi módon" rögzített gép induláskor helyesen pótlódik). `python tests/futtat.py --gyors` zöld.

## v88 – 2026-10-11
- JAVÍTÁS (Excel export, `routers/files.py`): a "bérelt nálam" gépek (más cégtől aktív/jóváhagyott bérlettel kihelyezve) eddig teljesen KIMARADTAK az exportból (a lekérdezés kizárólag a saját céget nézte, l. a v87-es fő gép/tartozék fixhez hasonló gyökérok) - mostantól a saját gépek mellett ezek is bekerülnek. A Telephely/Helyszín oszlop bérelt gépnél a bérlő saját (jóváhagyáskor megadott) adatát mutatja, nem a bérbeadóét (ugyanaz a felülírás, mint a v86-ban a `/lista`-n).
- ÚJ: három új oszlop - "Eredet" (Saját / Bérelt + a bérbeadó neve), "Fő gép" (ha a sor egy másik gép tartozéka, melyiké) és "Tartozékok" (a sorhoz rendelt tartozék-gépek felsorolása) - eddig a fő gép/tartozék kapcsolat egyáltalán nem látszott az exportban.
- ÚJ: a legenerált .xlsx fájl dokumentum-metaadataiban (Fájl tulajdonságai) feltüntetve, hogy EmeLOG rendszerrel készült (`creator`, `title`, `description` stb.).
- VÁLTOZÁS: az "ID" (belső adatbázis-azonosító, üzletileg nem releváns - a gyári szám / leltári szám az üzleti azonosító) az első helyről az utolsó oszlopba került az exportban (alapból továbbra is bekapcsolva), hogy ne a legszembetűnőbb helyen legyen egy technikai mező.
- **Teszt:** élesben kipróbálva (bérelt-nálam fő gép + hozzá rendelt, másik cégnél nyilvántartott tartozék egy export-körben, a metaadat, az oszlop-sorrend és a felülírt Telephely/Helyszín is ellenőrizve). `python tests/futtat.py --gyors` zöld.

## v87 – 2026-10-10
- JAVÍTÁS (tartozék-kapcsolat, `routers/machines.py`): a "Fő gép (ha ez a gép egy másik gép tartozéka)" legördülő, és a mentéskori ellenőrzés, kizárólag a saját cég gépeit engedte - egy "bérelt nálam" (más cégtől aktív/jóváhagyott bérlettel kihelyezett) gép SOHA nem volt választható fő gépnek, a legördülő ilyenkor gyakorlatilag kiürülhetett. Mostantól a saját gépek MELLETT a bérelt-nálam gépek is választhatók (`get_lehetseges_fo_gepek` + a mentés-ellenőrzés), hogy egy saját tartozék (pl. villa, heveder) hozzárendelhető legyen egy bérelt fő géphez.
- **Teszt:** élesben kipróbálva (bérelt-nálam fő gép megjelenik a legördülőben, új tartozék mentése a bérelt gépre sikeres, a kapcsolat a DB-ben helyesen rögzül). `python tests/futtat.py --gyors` zöld.

## v86 – 2026-10-10
- JAVÍTÁS (bérbeadás/kihelyezés, `routers/machines.py`, `models.py`): a bérbe kiadott gép eddig megtartotta a bérbeadó SAJÁT telephelyét és "Készenléti hely" (`megnevezes`) adatát is a bérlő listájában - ez a bérlőnek értelmetlen volt (idegen cég telephelye/elnevezése jelent meg). Mostantól a bérlő a kihelyezés JÓVÁHAGYÁSAKOR kötelezően megadja, a saját telephelyei közül melyiken és milyen "Készenléti helyen" lesz a gép (`BerletiIdoszak.berlo_site_id` + `berlo_keszenleti_hely`, új oszlopok) - a `Machine.site_id`/`megnevezes` (a bérbeadó saját nyilvántartása) NEM módosul, csak a MEGJELENÍTÉS változik a bérlő oldalán (lista, gép-adatlap, a bérbeadó szerkesztő oldala).
- ÚJ: a bérbeadó saját `/lista` nézetében, az "Eredet" oszlopban, a "Saját" felirat mellett sárga "Kihelyezve" jelvény jelenik meg a bérlő cég nevével, ha a gép jelenleg ki van helyezve - a bérlő oldali "Bérelt nálam" jelvény tükörképe. Jóváhagyásra váró kihelyezésnél "Kihelyezés folyamatban" szöveggel jelzi.
- **Teszt:** teljes folyamat élesben kipróbálva (jóváhagyás hiányos mezőkkel elutasítva, teljes mezőkkel sikeres, mindkét oldali lista-nézet, gép-adatlap, szerkesztő oldal - a bérbeadó eredeti adatai változatlanok, a bérlő a saját megadott adatait látja, nincs cross-tenant adatszivárgás). A megosztott `tests/t_jog_j09.py` "B1 berlet jovahagyas" tesztje frissítve az új kötelező mezőkkel. `python tests/futtat.py --gyors` zöld.

## v85 – 2026-10-10
- ÚJ (logó, `docs/DESIGN_RENDSZER.md` 2.7): az EMELOG Database logó (`static/emelog_logo.svg` = fekete feliratú, világos módhoz; `static/emelog_logo_w.svg` = fehér feliratú, sötét módhoz) mindenhol a Defensys logó helyére került: mind az 5 modul közös fejlécében, a belépő / MFA / aktiválás / jelszó-házirend / értesítések / Profilom / modulválasztó oldalakon és a publikus oldalon (összesen 18 sablon). A `static/js/tema.js` a témához igazítva cserél (sötét: `_w`, világos: a sima), így mindkét témában olvasható.
  - **Méret:** az új logó 2,5:1 arányú (a Defensys 2:1 volt), ezért a szélességek 1,25-szörösükre nőttek, hogy a megjelenő magasság ugyanaz maradjon (fejléc: `--el-fejlec-logo` 100 → 125 px; belépés / MFA 200 → 250; modulválasztó 140 → 175; publikus 150 → 190; kicsi 100 → 125).
  - **Favicon:** új `static/emelog_favicon.svg` - a felirat színe a böngésző témájához igazodik (`prefers-color-scheme`), a türkiz embléma ugyanaz. A `_head_kozos.html` és a `publikus.html` ezt használja.
  - **Offline:** a service worker előre gyorsítótárazza az új logókat és a favicon-t; `CACHE_NEV` `emeloreg-offline-v5` → `v6`.
  - **Nem változott:** a "Defensys Hungária Kft." cégnév a láblécben és a belépő oldal szövegében; a jegyzőkönyv-PDF-ek cégenként feltölthető arculati logója. A régi `defensys_logo_tranparent_*.svg` fájlok használaton kívüliek, de a repóban maradtak (törölhetők).
  - **Tesztek:** `tests/t_design.py` W1-W10 (összesen 207 ellenőrzés): a két logó felirat-színe, a favicon média-lekérdezése, egyetlen sablon / JS / service worker sem hivatkozik Defensys logóra, élő `/login`, a statikus fájlok kiszolgálása, a fejléc-méret; az A9 / B5 / K4 és a `t_ra_dashboard` B13 az új fájlnevekre igazítva. Negatív kontroll: 9 szándékos elrontás (felcserélt téma-hozzárendelés, visszamaradt Defensys-hivatkozás, fekete felirat a fehér logóban, a favicon média-lekérdezése nélkül, a régi cache-verzió, hiányzó `el-logo` osztály, hiányzó SW-bejegyzés, régi fejléc-méret, rossz publikus favicon) - mind elbukik.
  - **Telepítéskor:** a böngésző gyorsítótárazhatja a régi logót és a favicon-t - Ctrl+F5; a telefonos offline gyorsítótár magától cserélődik (új `CACHE_NEV`). Adatbázis-módosítás nincs.

## v84 – 2026-10-10
- JAVÍTÁS (adatvesztés, `routers/inspections.py`): a jegyzőkönyv-PDF fájlneve kizárólag a vizsgálat típusából és a (szabadon beírható, visszadátumozható) vizsgálati dátumból épült - ha ugyanazon a gépen, ugyanarra a napra, ugyanolyan típussal már volt mentett jegyzőkönyv, a mentés csendben FELÜLÍRTA a régi PDF-et. Mostantól, ha a fájlnév már foglalt, a program sorszámot fűz hozzá (`..._2.pdf`, `..._3.pdf`, ...) - ugyanazt a sorszámot kapja a bizonyítvánnyal összefűzött `Hivatalos_Jkv_...` változat is, hogy a kettő mindig összetartozzon.
- ÚJ (vizsgálat-rögzítés): figyelmeztetés, ha egy gépnek a KIVÁLASZTOTT vizsgálat-típusból már van 30 napnál frissebb (tehát még érvényes) vizsgálata - ez valószínűleg véletlen kettőzés (rossz gép/típus kiválasztása). A vizsgálati lapon a típus/dátum megadása után egy `GET /gep/{id}/utolso-vizsgalat-friss-e` lekérdezés figyelmeztető sávot jelenít meg kötelező jóváhagyó jelölőnégyzettel; a szerver (`POST /general-jegyzokonyv`) a mentés pillanatában, a gép aktuális adatából újraszámolva, függetlenül a kliens állításától, 400-zal elutasítja a mentést jóváhagyás nélkül. A szerver-oldali ellenőrzés a jogosultsági/engedélyezési vizsgálatok UTÁN fut, hogy egy amúgy sem engedélyezett mentésnél a jogosultsági hiba maradjon a mérvadó.
- ÚJ (`routers/files.py`, "Gépnapló és vizsgálati előzmények"): a Dokumentum oszlop mostantól a kézzel feltöltött dokumentumokat (pl. Gépkönyv, Adatlap, megosztott dokumentum) is megjeleníti, nem csak a program-generált jegyzőkönyv-PDF-eket és a hibajegy-mellékleteket (fotó/munkalap) - ezek továbbra is csak egyszer szerepelnek, a saját (Inspection/Hibajegy) forrásukból.
- ÚJ (`routers/machines.py`, `templates/index.html`): a "Helyszín" mező (Új gép felvétele / Gép szerkesztése) mostantól a cégen belüli korábbi értékeket ajánlja autocomplete-tel (datalist), ugyanúgy, mint a Gyártó/Típus mezőknél - szigorúan csak az adott cég gépei közül.
- JAVÍTÁS (tesztinfrastruktúra, csak Windows-on jelentkezett): `tests/t_get_audit.py`, `t_profil.py`, `t_jelszo.py` - a `glob.glob` Windows alatt backslash-es útvonalakat ad vissza, a tesztek viszont több helyen perjeles szöveges literállal hasonlítják össze a fájlneveket -> `KeyError`/`IndexError`, a három teszt emiatt soha nem futott végig zöld állapotig ezen a gépen (a hiba a legelső ütköző helynél elakasztotta a futást, elfedve a mélyebben lévő további ütközéseket). A glob-eredmények mostantól a beolvasás után perjelesre vannak normalizálva.
  - **Teszt:** mind a 4 funkció élesben kipróbálva (PDF-ütközés: 3 egymás utáni mentés, mindhárom fájl egyedi és sértetlen; 30-napos figyelmeztetés: GET friss/régi/érvénytelen típus + POST elutasítás/elfogadás; Gépnapló: kézi feltöltésű fájl megjelenik, a jegyzőkönyv nem duplikálódik; Helyszín: a cég korábbi értékei megjelennek a datalistben). `python tests/futtat.py --gyors` a teljes szvittel (42 tesztfájl) zöld.

## v83 – 2026-10-09
- ÚJ, dokumentáció (`docs/ATADAS.md`): átadó-jegyzet a közös fejlesztéshez - hol kezdjen olvasni egy új fejlesztő vagy egy új Claude-munkamenet (CHANGELOG teteje, README, tests/README), az állandó szabályok (szeletenkénti jóváhagyás és commit, magyar dokumentáció, a `main` push és a tagek a felhasználóé), a tesztelési menet (`tests/futtat.py`, negatív kontroll, a `t_jog_j09` RA_ONLY-lista), a v78-v82 szeletek áttekintése, a már megfizetett buktatók (sablon-árnyékolás, logó-fájlnevek, CRLF/LF sorvégek, GitHub-webes szerkesztések, Windows-jogosultság, git lock-fájlok), a telepítési megjegyzések és a nyitott pontok. Ugyanez a szöveg a claude.ai "emelog" Project `claude/ATADAS.md` fájljában is megvan.
  - Csak dokumentáció: kód, teszt és adatbázis nem változott; telepítéskor nincs teendő.

## v82 – 2026-10-09
- JAVÍTÁS (logó, `docs/DESIGN_RENDSZER.md` 2.7): a `static/defensys_logo_tranparent_w.svg` és a `..._b.svg` TARTALMA fel volt cserélve (a v46 óta): a `_w` fekete, a `_b` fehér feliratú volt, a `tema.js` viszont sötét módban a `_w`-t, világos módban a `_b`-t tölti be - így mindkét módban eltűnt a "DEFENSYS" felirat (csak az embléma és a "HUNGARIA" látszott). A két fájl tartalmát felcseréltük: a `_w` mostantól FEHÉR (sötét módhoz), a `_b` FEKETE feliratú (világos módhoz). A kód (`tema.js`, sablonok, favicon) és a hivatkozások nem változtak.
  - **Teszt:** `tests/t_design.py` A10 (összesen 197 ellenőrzés): a `_w` felirata világos, a `_b` felirata sötét színű - a logófájlok tartalmát eddig egyik teszt sem nézte, csak a nevüket. Negatív kontroll: a két fájl visszacserélésével az A10 elbukik.
  - **Telepítéskor:** a böngésző gyorsítótárazhatja a régi logót - Ctrl+F5 / a gyorsítótár ürítése kellhet. Csak a két SVG tartalma változott, adatbázis-módosítás nincs.

## v81 – 2026-10-09
- ÚJ, rendszeradmin (`docs/CEG_SABLONOK.md`): az ellenőrzőlista-sablon feltöltő szkriptek (`sablon_feltolto.py` = MSZ 9721-4 targonca; `msz9721_sablon_feltolto.py` = MSZ 9721-1 általános + MSZ 9721-2 híd- és bakdaru) mostantól a **Cégek oldalról, jelölőnégyzettel** futtathatók: (1) az **Új cég** űrlapon két jelölőnégyzet (alapból kipipálatlan) – a cég létrejön, majd a kijelölt szkriptek az ÚJ cégre futnak, saját sablon-példányban (mindkettővel 9 jegyzőkönyv + 3 napi sablon); (2) **meglévő cégnél** ugyanez a kártyán, **„FIGYELEM: felülírja a cég meglévő sablonjait!” figyelmeztetéssel és kötelező tudomásulvételi jelölőnégyzettel** (a szerver is ellenőrzi). A cég kártyáján jelvény mutatja a saját sablonok számát (vagy hogy a közös készletet használja).
  - **Árnyékolás (tudni kell):** ha egy cégnek van saját `JegyzokonyvSablon`/`NapiEllenorzesSablon` sora, az 1-es cég közös készlete nála már nem látszik – ezért általában mindkét jelölőnégyzetet érdemes bejelölni; a saját példány az alap-sablonok későbbi frissítését nem kapja meg. Az új cég létrehozása továbbra sem másolja a sablonokat az 1-es cégtől.
  - **A szkriptek paraméterezhetők** (`feltolt_sablonokat(company_id=None, db=None)`, `main(company_id=1, db=None)`); a parancssori használat paraméter nélkül változatlan. **Két biztonsági szűkítés:** a `sablon_feltolto.py` eddig a cég ÖSSZES jegyzőkönyv- és napi sablonját törölte (az MSZ 9721-1/-2 és a kézi sablonokat is) – most csak a saját `MSZ 9721-4 Targonca` előtagú sorait; az `msz9721_sablon_feltolto.py` eddig MINDEN cég azonos nevű sorait törölte (de csak az 1-es cégnek írt) – most a törlés is a megadott cégre szűkül.
  - **Hibakezelés / napló:** új cégnél a cég a sablon-feltöltés előtt commitolódik; hibánál csak a sablonok maradnak ki (visszagörgetve), a cég megmarad, piros üzenet jelzi és a hiba naplózódik; meglévő cégnél az egész visszagörgetődik. Napló: `Cég sablonok feltöltve` (előtte / utána a saját sablonok száma, a futott szkriptek) és `Cég sablonok feltöltése sikertelen`. Csak a rendszeradmin használhatja.
  - Új: `ceg_sablon_utils.py`; `routers/rendszeradmin.py` (`uj_ceg`, új `POST /rendszeradmin/cegek/{id}/sablonok`), `templates/rendszeradmin_cegek.html`.
  - Tesztek: új `tests/t_ceg_sablon_v81.py` (30 ellenőrzés: új cég minden jelölőnégyzet-kombinációval, meglévő cég felülírása és védelmei, elszigetelés más cégektől, hibák visszagörgetése, parancssori használat, felület). A 12 negatív kontroll (tudomásulvétel, jogosultság, szűkített törlések, cég-azonosító, visszagörgetés, napló, figyelmeztetés, kötelező pipa stb.) mind elbukik a megfelelő ellenőrzésen.

## v80 – 2026-10-09
- ÚJ, fájlkezelés (Miklós kérése 2. pont; részletek: `docs/KOZOS_DOKUMENTUM.md`): a **Használati utasítás / Gépkönyv / Adatlap** (a gép TÍPUSÁRA szóló dokumentumok) mostantól megosztható: egy fájlra több, azonos gyártójú és típusú gép hivatkozik, újra feltölteni nem kell. (1) A „Csatolt dokumentumok” ablakban a megosztható típus kiválasztásakor lista jelenik meg az azonos típusú gépeken már meglévő ilyen dokumentumokról, **Használom** gombbal. (2) Feltöltés után a rendszer ellenőrzi, mely azonos típusú gépeknek nincs még ilyen típusú dokumentuma, és **pipás listában** (alapból mind kipipálva) felajánlja nekik; akinek már van, azt nem írja felül.
  - **Tárolás (séma-változás nincs):** a megosztott fájl fizikailag az `uploads/<cég>/kozos/` mappába költözik (másolás → commit → csak utána törlődik a régi példány), minden érintett gépnek saját `File`-sora van ugyanarra az útvonalra – ezért a fájllista, a mobil „Használati utasítás letöltése”, az export stb. változatlanul működik.
  - **Szerver** (`routers/files.py`, új `kozos_dokumentum_utils.py`): új `GET /gep-kozos-dokumentumok/{id}`, `POST /hivatkozas-fajl`, `POST /kozos-dokumentum-alkalmaz`, `GET /uploads/<cég>/kozos/<fájl>`; az `/upload-file` válasza megosztható típusnál `kozos` ajánlattal bővül. Jogosultság: a feltöltés kapui (aktív cég, nem csak olvasó, feltöltési jog, szakmai szerepkör), cél-gép: ugyanaz a cég, látható, azonos gyártó+típus; idegen cég dokumentumára nem lehet hivatkozni. A közös fájl akkor érhető el, ha a felhasználó legalább egy hivatkozó gépet láthat.
  - **Törlés:** egy hivatkozás törlése csak az adott gép sorát törli; a fizikai fájl az utolsó hivatkozással együtt törlődik. A rendszeradmin géptörlése nem viszi el a többi gép dokumentumát (az utolsó hivatkozó gép törlésekor a közös fájl is törlődik); a cégtörlés a teljes mappát viszi.
  - **Napló** (a gép eseményei között): `DOKUMENTUM HIVATKOZÁS`, `DOKUMENTUM MEGOSZTÁS`, a `DOKUMENTUM TÖRLÉS` pedig „(hivatkozás)” jelzést kap.
  - **Nem változott / korlát:** a tömeges dokumentum-import és a mobil gépmenü feltöltője nem kínál megosztást; hivatkozás utólagos szétválasztása nincs. A felület JS-e böngésző nélkül csak statikusan ellenőrzött.
  - Tesztek: új `tests/t_kozos_dok_v80.py` (43 ellenőrzés: ajánlat, alkalmazás, kiszolgálás, lista és hivatkozás, törlés-számlálás, géptörlés, felület). A 14 negatív kontroll (törlés refcount nélkül, kiszolgálás láthatóság nélkül, típus-/cég-/duplikátum-/csak olvasó-ellenőrzés, régi példány törlése, takarítás, jelöltek szűrése, alapból kipipálás stb.) mind elbukik a megfelelő ellenőrzésen.

## v79 – 2026-10-09
- ÚJ, gépfelvitel (Miklós kérése 1. pont; részletek: `docs/TIPUS_ATVETEL.md`): új gép felvételekor, ha a cégnél van azonos gyártójú és típusú gép, az űrlap felajánlja az adatai átvételét („Ilyen típus már van a cégnél (N db): … Használjam az adatait?”). **Igen** → a forrásgép TÍPUS-szintű adatai (géptípus, teherbírás, emelési magasság, fesztáv / gémhossz, meghajtás, teljesítmény, teherfelvevő-jelölő, kezelő együtt emelkedik, kezelői munkahely magassága) az ÜRES mezőkbe kerülnek, majd az átvett adatok átnézését **kötelező pipával jóvá kell hagyni** („Ellenőrizd, hogy az áthozott adatok erre a gépre is megfelelőek-e!”).
  - **Soha nem vehető át** gépre egyedi adat: gyári szám, leltári szám, megnevezés / helyszín, dátumok, üzemóra, telephely, státusz, QR, bérlet, rendszám, megjegyzés, egyedi mezők.
  - **Szerver** (`routers/machines.py`): új `GET /gep/tipus-ajanlat` (csak olvas; cégre szűrt; gyártó+típus egyezés szóköz- és kis-nagybetű-függetlenül, ékezetes betűvel is – Pythonban összevetve, mert az SQLite `upper()` nem kezeli az ékezeteket; azonos géptípus előnyben, azon belül a legújabb gép; csak látható gépet ajánl; csak az Admin / Emelőgép ügyintéző kapja, nem csak olvasó, nem a Mester Cég). A `/gep-mentese` ÚJ gépnél a létrehozás előtt ellenőrzi a `adat_forras_gep_id` + `adat_atnezve` mezőket (érvénytelen / idegen cégű / nem látható / nem egyező típusú forrás, vagy hiányzó jóváhagyás → 400, semmi sem mentődik); meglévő gép szerkesztésénél a mezők figyelmen kívül maradnak.
  - **Napló:** a gép eseményei közé két új sor, a gép mentésével egy tranzakcióban: `Adatok átvétele típus alapján` (forrásgép + az átvett értékek) és `Átvett adatok jóváhagyva` (a forrástól való eltérés – a SZERVER számolja –, és hogy átnézte). A Rendszernaplóban „Gép / dokumentum” kategória.
  - **Felület:** `templates/index.html` (ajánló és átnéző sáv, két rejtett mező), `static/js/pages/index.js` (`tipusAtvetelInit`: csak új gépnél, csak az üres mezőt tölti, a szerver-adat `textContent`-tel kerül ki, a gyártó / típus módosítása törli az átvételt).
  - **Nem változott / korlát:** az offline gépfelvitelnél nincs ajánlat; a több találat közti választás nincs (egy forrás: a legújabb, azonos géptípus előnyben). A kliens-oldali JS böngésző nélkül csak statikusan ellenőrzött.
  - Tesztek: új `tests/t_tipus_v79.py` (41 ellenőrzés: ajánló, jogosultságok, mentés és napló, felület). A negatív kontrollok (jóváhagyás-, cég-, láthatóság-, szerepkör-, típus-ellenőrzés, napló, gyári szám az átvehetők között, kis-nagybetű, kötelező pipa, eltérés-számítás) mind elbuknak a megfelelő ellenőrzésen.

## v78 – 2026-10-09
- ÚJ, fájlkezelés (Miklós kérései 3. és 4. pont + az új dokumentumtípusok): (1) **nap szerinti csoportosítás**: a „Csatolt dokumentumok és fájlok” ablak (`list.js`) és a mobil gépmenü fájllistája (`qr-gepmenu.js`) a feltöltés HELYI (Europe/Budapest) napja szerint fejléc-sorokba (`2026-10-02 - 3 fájl`) rendezi a fájlokat, legújabb nap elöl; az egy napon feltöltött fotók együtt látszanak, így az állapot időbeli változása követhető. A `/gep-fajlok/{id}` mostantól legújabb-elöl rendezve ad vissza, és új `nap` mezőt (a helyi nap). (2) **„Fénykép - Adattábla”** önálló fájltípus (a gép adattáblájának fényképe, a gépazonosító): az alap típusok közé tartozik (a feltöltési joggal rendelkező Felhasználó is feltöltheti), csak kép lehet (PDF-re 400), a Felhasználó látja a listában, a feltöltés a megszokott módon naplózódik. (3) **„Gépkönyv” és „Adatlap”** új dokumentumtípus (a „Használati utasítás” már létezett): a szakmai szerepköröknek (Admin / szakértő / vizsgáló / ügyintéző), mint a többi nem alap típus (J-03). (4) A rendszeradmin **tömeges dokumentum-importja** ugyanezt a katalógust kapja (`dokumentum_import.py`: + Fénykép - Adattábla (kép), Használati utasítás / Gépkönyv / Adatlap (PDF); `FOTO_TIPUSOK`).
  - **Nem változott (szándékos):** az adattábla-fotó nem számít „gép-fényképnek” a dashboard „van kép” jelzésében (az a „Fénykép” típust nézi); az AI-adattábla beolvasás továbbra sem ment fájlt (ennek felajánlása külön szelet lehet). Adatmodell- és adatbázis-változás nincs.
  - Tesztek: új `tests/t_fajl_v78.py` (34 ellenőrzés: adattábla-feltöltés és szabályai, az új típusok szerepkörönként, a lista sorrendje és a helyi nap (UTC 22:30 → másnap), a Felhasználó látóköre, a felület és az import katalógus). A nyolc mutáció (csak-kép szabály, alap típus, rendezés, UTC-nap, Felhasználó látóköre ×2, import kép-típus, feltöltő opció) 1 / 2 / 2 / 2 / 2 / 1 / 1 / 2 ellenőrzést buktat. A böngészőbeli csoportosító JS-et a teszt csak statikusan ellenőrzi (a lista-HTML-t nem rendereli).

## v77 – 2026-10-09
- BIZTONSÁG / AUDIT, J-20 (`docs/JOGOSULTSAGOK.md` 5. fejezet): az „audit-hiányos” írások mostantól naplózódnak, így a Beállítások „Jogosultsági napló” füle és a rendszeradmin Rendszernaplója teljes. (Hatókör: az Emelőgép / közös részek; az EBK / VIVÜ / Tűzvédelem fiók-hozzárendelései a modulok fejlesztése miatt szándékosan kimaradnak.)
  - **A hiba:** a felhasználó szerkesztése, a jelszócsere, a modul-kapcsolás, a cég létrehozása / adatai / licence / kapcsolói, a cég-, felhasználó- és géptörlés (ez csak `print` volt, a szerver naplójában, az adatbázisban nem) és a `settings.py` összes író route-ja semmilyen nyomot nem hagyott. Egy rosszindulatú vagy hibás módosítás utólag nem volt kideríthető.
  - **A javítás:** új segéd, `naplo_utils.py` (`naploz`, `rovid`, `be_ki`): egységes `AuditLog`-sor, **a módosítással egy tranzakcióban** (nem commitol), rövidített értékekkel (300 karakter), `csak_ha_valtozott` kapcsolóval (a változatlan újra-mentés nem hoz létre sort). Naplózó route-ok: (1) **`settings.py` mind a 25 író route** (`Beállítás - <tárgy>`: telephely, szótár, géptípus-konfig, rendelet-szigorítás, e-mail riport, üzemóra-eltérés, vizsgálati dátum mód, vizsgálat e-mail, napi ellenőrzés kapcsoló / kérdések / sablonok (létrehozás, törlés, alkalmazás), dashboard naptár / diagramok / diagram-típusok, jegyzőkönyv-sablonok); (2) **`rendszeradmin.py`**: `Cég létrehozva`, `Cég adatai`, `Cég licenc`, `Cég AI-szkennelés`, `Cég használati útmutató`, `Cég azonosítási mód`, `Cég OE-alapterület számítás`, `Cég jegyzőkönyv-logó` / `-arculat`, és a három végleges törlés (`Cég törölve`, `Felhasználó törölve (rendszeradmin)`, `Gép törölve (rendszeradmin)`) + a felhasználó modul-jogainak törlése; (3) **`modulok.py`**: `Cég modul-előfizetés` (a megvonásnál jelzi, hány felhasználótól vettük el a hozzárendelést) és a felhasználó modul-joga; (4) **`users.py`**: `Jelszó módosítva (saját)` / `(Admin által)` (**érték nélkül**: a jelszó vagy hash soha nem kerül a naplóba), és az Admin általi felhasználó-szerkesztés mezőnként (`Felhasználó adata: <mező>`, a szerkesztés ELŐTTI és UTÁNI érték, csak a ténylegesen változott mezők).
  - **Törlések naplózása:** a cégtörlés a cég saját naplósorait is törli, ezért a `Cég törölve` sor az **1-es (rendszeradmin) céghez** kerül (a név és az id a szövegben); a felhasználó-törlés a felhasználó cégéhez (az megmarad), a géptörlés a gép cégéhez, `machine_id` nélkül (a gép saját sorai törlődnek). A `print` marad.
  - **Rendszernapló:** a `rendszernaplo_utils._PREFIXEK` bővült (`Beállítás`, `Gép törölve` → „Cég / rendszer”; a `Jelszó módosítva...` a „Biztonság”, a `Felhasználó adata: ...` a „Fiók” alá esik). A Jogosultsági napló fül a `company_id` alapján mutatja a sorokat (cég-Admin: a saját cégét, a rendszeradmin: a kiválasztott munkakörnyezetét).
  - **Szándékosan kimarad (nyitott):** az EBK / VIVÜ / Tűzvédelem fiók-létrehozás és hozzárendelések naplója (a modulok fejlesztése miatt); a bérlet / kihelyezés (4 route), a jegyzőkönyv-szám kézi átírása, a partner-kód törlése és a szakértői megbízás / ütemezés (3 route): ezeket a J-20 döntésnél nem kérted, külön szeletben pótolhatók.
  - **Viselkedés-változás:** csak a naplózás bővül; a route-ok válaszai, jogosultságai nem változnak. A napló a Beállítások „Jogosultsági napló” fülén (max. 200 sor) mostantól jóval több sort mutat.
  - Tesztek: új `tests/t_jog_j20.py` (95 ellenőrzés; A–F blokk: a beállítás-route-ok, a rendszeradmin cég-route-ok és a három törlés, a modul-kapcsolók, a jelszócsere (a jelszó értéke a teljes naplóban nincs), az Admin általi szerkesztés, a Rendszernapló kategóriák és a Jogosultsági napló fül). A kilenc mutáció (a `naploz` kikapcsolása, a `csak_ha_valtozott` kikapcsolása, a cégtörlés a törölt céghez, a jelszó értéke a naplóban, a szerkesztés mezőneve, a cég-modul mezőneve, a prefix-lista, a dashboard kapcsoló, a géptörlés cég nélkül) 49 / 14 / 2 / 2 / 3 / 2 / 3 / 2 / 1 ellenőrzést buktat. A `tests/t_naplo.py` `KAT_PELDAK` táblája bővült az új eseménytípusokkal.

## v76 – 2026-10-09
- BIZTONSÁG, J-25 + J-26 (`docs/JOGOSULTSAGOK.md` 5. fejezet): az Emelőgép-route-ok szerepkör-ellenőrzése pozitív listára vált, és a modul-kapu nélküli Emelőgép-specifikus beállítás-route-ok is kapnak `require_modul("EMELOGEP")` kaput. (Hatókör: az Emelőgép modul; a Tűzvédelem / VIVÜ / EBK tételei a modulok fejlesztése miatt szándékosan kimaradnak.)
  - **A hiba (J-25):** a `/uj-gep`, `/szerkesztes/{uuid}`, `/gep-mentese`, `/gep-statusz-valtas`, az AI-szkennelés és az offline eltérő-adat bejelentés **tiltó listával** dolgozott („nem Karbantartó / VIVU / EBK / Megtekintő”): minden újabb vagy váratlan szerepkör átment volna rajta, és a Karbantartó / VIVU / EBK / Megtekintő is, ha az EMELOGEP modul véletlenül hozzájuk került (a modul-kiosztás volt az egyetlen védelem). A napi ellenőrzés, a mobil csekklista és a `/gyors-uzemora` pedig szerepkört egyáltalán nem nézett.
  - **A javítás (J-25):** három állandó a `security.py`-ban: `EMELOGEP_KEZELO_SZEREPKOROK` (Admin, Emelőgép ügyintéző), `EMELOGEP_SZAKMAI_SZEREPKOROK` (+ Emelőgép szakértő, Emelőgép vizsgáló), `EMELOGEP_SZEREPKOROK` (+ Felhasználó, a gépkezelő). Alkalmazás: `/uj-gep` (GET), `/gep-statusz-valtas`, `/gep-ai-beolvasas` (GET + elemzés POST) → kezelő; `/szerkesztes/{uuid}`, `/gep-mentese`, `/offline/eltero-adat-bejelentes` → szakmai; `/napi-ellenorzes-mentes`, `/mobil-csekklista/{uuid}`, `/gyors-uzemora` → teljes lista. A GET oldalak átirányítanak a `/lista`-ra, az író POST-ok 403-at adnak; a `/napi-ellenorzes-mentes` átirányít (nem 4xx, mert a mobil JS a nem-OK választ offline mentésnek venné). A `/gyors-uzemora` szerepkör-kapuja a meglévő `jog_uzemora_rogzites` ellenőrzés előtt fut.
  - **A hiba és a javítás (J-26):** a `routers/settings.py` Emelőgép-specifikus író route-jai modul-kapu nélkül futottak, így pl. egy csak EBK-s cég Admin-ja is átírhatta az Emelőgép beállításait. A 18 route (`uj-gep-konfig`, `torol-gep-konfig/{id}`, `kapcsol-rendelet-szigoritas`, `kapcsol-uzemora-eltertes`, `kapcsol-vizsgalati-datum-kotelezo-mod`, `kapcsol-vizsgalat-email-ertesites`, `kapcsol-napi-ellenorzes`, `uj-napi-kerdes`, `szerkeszt-napi-kerdes`, `torol-napi-kerdes/{id}`, `kapcsol-dashboard-naptar`, `kapcsol-dashboard-diagramok`, `ment-dashboard-diagram-tipusok`, `uj-jegyzokonyv-sablon`, `torol-jegyzokonyv-sablon/{id}`, `uj-napi-sablon`, `torol-napi-sablon/{id}`, `alkalmaz-napi-sablon/{sablon_id}`) a `EMELOGEP_MODUL_KAPU` függőséget kapja (`require_modul`, azaz a v72 munkakörnyezeti ellenőrzéssel együtt).
  - **Szándékosan nyitva marad (J-26):** a közös `/beallitasok` oldal (több modul osztozik rajta), a telephely- és szótár-route-ok, a `kapcsol-email-riport` és az `ertesitesek.py`, mert nem tisztán Emelőgép-specifikusak.
  - **Viselkedés-változás:** az Emelőgép-szerepkörökön kívüli (pl. Karbantartó, Megtekintő, EBK, VIVU) felhasználó a fenti route-okon mostantól akkor is elutasítást kap, ha az EMELOGEP modul hozzá van rendelve. A normál szerepkörök (Admin, ügyintéző, szakértő, vizsgáló, Felhasználó) működése változatlan.
  - Tesztek: új `tests/t_jog_j25_j26.py` (85 ellenőrzés; A–D blokk: kezelő / szakmai / teljes lista a route-okon, és a J-26 modul-kapu EBK-only céggel). A nyolc mutáció (Karbantartó a kezelő listában, üres modul-kapu, gyors-üzemóra, offline, napi + csekklista, AI, gép-mentés, új gép + státusz) 22 / 3 / 4 / 5 / 8 / 7 / 10 / 24 ellenőrzést buktat.

## v75 – 2026-10-09
- BIZTONSÁG, J-14 (`docs/JOGOSULTSAGOK.md` 5. fejezet): a napi ellenőrzés, a hibajegy-feloldás és az átszállítás nem támaszthat fel végleges státuszú gépet, és nem kerüli meg a licencet. (Hatókör: az Emelőgép modul; a Tűzvédelem / VIVÜ / EBK tételei a modulok fejlesztése miatt szándékosan kimaradnak.)
  - **A hibák:** (1) a `/napi-ellenorzes-mentes` a gép státuszát nem nézte: selejtezett / eladott gépen is rögzített üzemórát és hibajegyet, egy LETILTÁS-válasz pedig minden státuszt „Kivonva (javításra vár)”-ra írt át (innen a státuszváltóval újra Aktív lehetett); az üzemóra `nan`/`inf`/negatív értéket is elfogadott; a `NapiEllenorzesAktiv` cégkapcsolót a szerver nem érvényesítette. (2) a `/ticket-feloldas` a jelző alapján minden státuszt felülírt „Aktív”-ra (a közben selejtezett gép is feltámadt), a lezárt jegy újra feloldható volt (a lezáró / indoklás felülíródott), egy másik nyitott LETILTÁS-jegy mellett is feloldotta a gépet, és nem nézte a telephely-/gép-korlátozást. (3) az átszállítás (`/gep-statusz-valtas`) a forrás státuszát nem nézte (selejtezett / eladott / már átszállított gépből is új Aktív másolat; kétszeri beküldésnél két másolat), licencet nem ellenőrzött.
  - **Döntések:** a napi ellenőrzés csak Aktív gépen rögzíthető; a cégkapcsoló kikényszerítve; az átszállítás csak Aktív gépre és a licenc-limitet ellenőrizve. **A javítás:** `routers/mobile_qr.py` (`napi_ellenorzes_tiltas_url`: státusz + cégkapcsoló, a csekklista GET és a mentés is; üzemóra-ellenőrzés; `ticket_feloldas`: 409 újra-feloldásra, `is_machine_allowed`, más nyitott LETILTÁS-jegy, csak „Kivonva (javításra vár)” → Aktív), `routers/machines.py` (átszállítás: Aktív-only + `licenc_tullepne_uj_gepnel`), `security.py` (`napi_ellenorzes_aktiv_e`), `templates/list.html` (a tiltás sávja). A tiltás átirányítás (`/lista?napi_tiltas=…`), nem 4xx, mert a mobil oldal JS-e a nem-OK választ offline mentésnek venné.
  - **Viselkedés-változás, amit tudni kell (ÉLESÍTÉS ELŐTT ELLENŐRIZENDŐ):** a `NapiEllenorzesAktiv` kapcsoló eddig hatástalan volt, és alapértelmezésben **kikapcsolt** (nincs sor a szótárban). A javítás után a napi ellenőrzés és a mobil csekklista **csak azokban a cégekben működik, ahol a Beállítások oldalon a „Műszakkezdő ellenőrzőlisták aktiválása” be van kapcsolva**. Éles bevezetés előtt érdemes megnézni, mely cégek használják most a napi ellenőrzést, és náluk bekapcsolni a kapcsolót. Az átszállítás licenc-limitnél 403-at ad (az átszállítás új gép-rekordot hoz létre; a licenc minden gép-rekordot számol státusztól függetlenül).
  - Tesztek: új `tests/t_jog_j14.py` (26 ellenőrzés). Az öt mutáció (státusz-kapu, kapcsoló + üzemóra, lezárt jegy + `is_machine_allowed`, felszabadítási szabályok, átszállítás-kapuk) 3 / 5 / 2 / 2 / 5 ellenőrzést buktat.
  - **Dokumentáció:** `docs/JOGOSULTSAGOK.md` (J-14 JAVÍTVA), `tests/README.md`.

## v74 – 2026-10-09
- BIZTONSÁG, J-LISTA 7c SZELET (J-11 maradék; `docs/JOGOSULTSAGOK.md` 5. és 6. fejezet): a Tűzvédelem szerkesztése szerepkörhöz kötött, a lezárt napló nem zárható újra. Ezzel a **7. szelet teljesen kész**.
  - **A hiba:** (1) a Tűzvédelem szerkesztő műveletein (telephely / épület / hely / készülék felvétel és szerkesztés, státusz, szervizbe küldés, ellenőrzés-rögzítés, fájl feltöltés) nem volt szerepkör-kapu, csak „cég aktív + nem `csak_olvasas`": bármely modulos felhasználó (szakértő, vizsgáló, Karbantartó is) módosíthatott; (2) a napló lezárása minden újabb kérésnél újra lefutott, felülírva a lezárás dátumát, a lezárót és a hiányosság-indoklást.
  - **Döntés:** Admin + Felhasználó + Emelőgép ügyintéző szerkeszthet, a többi szerepkör csak olvas; a lezárásnál csak az újralezárás tiltása. **A javítás (`routers/tuzvedelem.py`):** `TUZVEDELEM_SZERKESZTO_SZEREPKOROK` + a `_lehet_szerkeszteni` szerepkör-ellenőrzése (ez a 14 szerkesztő route és a sablonok `szerkesztheto` jelzőjének egyetlen közös kapuja, így a felületen a szerkesztő elemek is eltűnnek a tiltott szerepköröknél). `naplo_lezarasa`: a már lezárt napló újralezárása **409** (a korábbi lezárás érintetlen). `static/js/pages/tuzvedelem_naplo.js`: a megerősítő szöveg pontosítva (a lezárás ténye / dátuma / lezáró véglegesen rögzül; a korábbi „többé nem módosítható" szöveg a mögöttes adatra nem volt igaz).
  - **Viselkedés-változás, amit tudni kell:** a szakértő, vizsgáló és Karbantartó szerepkör a Tűzvédelem modulban (ha van hozzáférése) mostantól csak megtekinthet; a törlések, a jóváhagyás, a szakvizsga, a karbantartó cégek és a napló lezárása eddig is Admin-only volt. A Tűzvédelem Excel-importja eddig is Admin-only.
  - **Ismert korlát (külön döntés kellene hozzá):** a napló adatai élőben számolódnak (nincs pillanatkép), ezért a lezárás után rögzített ellenőrzés vagy áthelyezés a megjelenített naplót módosítja. **Pontosítás:** az audit szerint a napló-lekérdezés nem szűrt cégre; valójában a telephelyen át szűrt volt.
  - Tesztek: új `tests/t_jog_j11.py` (53 ellenőrzés: három jogosult és három tiltott szerepkör × 6 szerkesztő művelet + fájl-feltöltés + megtekintés, napló első / második / másik év lezárása, nem Admin). A szerepkör-kapu kikapcsolásával 21, az újralezárás-tiltás kikapcsolásával 3 ellenőrzés bukik.
  - **Dokumentáció:** `docs/JOGOSULTSAGOK.md` (J-11 JAVÍTVA, 4.5 mátrix, 7c / 7. szelet KÉSZ), `tests/README.md`.

## v73 – 2026-10-09
- BIZTONSÁG, J-LISTA 7b SZELET (J-10; `docs/JOGOSULTSAGOK.md` 5. és 6. fejezet): az EBK és a VIVÜ lista/dashboard szerepkör szerint szűr.
  - **A hiba:** az EBK (`/ebk`, `/ebk/dashboard`) és a VIVÜ (`/vivu`, `/vivu/dashboard`) lista és dashboard csak a Megtekintőre (és az EBK koordinátorra) szűkített; **minden más szerepkör** (Felhasználó, ügyintéző, szakértő, vizsgáló) a munkakörnyezet összes projektjét / megrendelőjét és az ellenőrzési statisztikát látta, miközben a részletoldalak számukra tiltottak voltak (modulon belüli információ-kiszivárgás).
  - **Döntés:** hozzárendelt elemekre szűkít. **A javítás:** `routers/ebk.py: _lathato_projektek` és `ebk_projekt_lista`, `routers/vivu.py: _lathato_ugyfelek` és `vivu_ugyfelek_lista`: az Admin (VIVÜ-nél a VIVU ügyintéző is) a cég mindenét, a Megtekintő / EBK koordinátor a hozzárendelteket látja, minden más szerepkör **üres listát és üres dashboardot** kap - ugyanaz a szabály, mint a részletoldalaknál (`_projekt_lathato_e`, `_ugyfel_lathato_e`).
  - **Viselkedés-változás, amit tudni kell:** a Felhasználó / ügyintéző / szakértő / vizsgáló szerepkörnek nincs hozzárendelhető projektje / megrendelője (a hozzárendelő felület csak Megtekintőt ajánl fel), ezért az EBK / VIVÜ modul listája és dashboardja náluk üres; az oldal megnyílik (200), csak nem mutat adatot.
  - Tesztek: új `tests/t_jog_j10.py` (51 ellenőrzés: Admin, hozzárendelt Megtekintő / EBK / VIVU, négy nem jogosult szerepkör lista + dashboard + keresés, részletoldal-kontroll). A szűrés kikapcsolásával mindkét modulon 12-12 ellenőrzés bukik.
  - **Nyitva (következő szelet):** 7c J-11 maradék (Tűzvédelem szerepkör-kapu, napló újralezárás). A VIVÜ dashboard az inaktív megrendelőket is számolja (a lista nem) - külön döntés.
  - **Dokumentáció:** `docs/JOGOSULTSAGOK.md` (J-10 JAVÍTVA, 7b szelet KÉSZ), `tests/README.md`.

## v72 – 2026-10-08
- BIZTONSÁG, J-LISTA 7a SZELET (J-02 + J-15; `docs/JOGOSULTSAGOK.md` 5. és 6. fejezet): a hozzáférési szint az ügyintézőre/szakértőre/vizsgálóra is érvényes, a modul-kapu a munkakörnyezet cégét is nézi.
  - **J-02 - a hiba:** az `is_machine_allowed` az Admin mellett az ügyintézőt, szakértőt és vizsgálót is azonnal átengedte, így a TELEPHELY / GEP szintre állított ilyen felhasználó a listán csak a saját gépeit látta, de a gép azonosítójával (adatlap, szerkesztés, státusz, feltöltés, üzemóra, naplók, letöltés) minden gépet elért. **Döntés:** érvényesüljön. **A javítás (`security.py`):** csak a cég-Admin mentesül, így az egyedi eléréskor ugyanaz a szabály él, mint a lista-szűrőnél (`apply_user_data_scope_filter`). CEG szintnél (alapértelmezés) semmi nem változik.
  - **J-15 - a hiba:** a `require_modul` csak a felhasználó SAJÁT cégének moduljait nézte, a kiválasztott munkakörnyezetét nem, így a külsős szakértő olyan ügyfélcég modulját is elérte, amely nem fizetett elő rá. **Döntés:** a munkakörnyezet cégének is elő kell fizetnie. **A javítás (`security.py`):** új `modul_elerheto_a_munkakornyezetben` (saját cég ÉS munkakörnyezet cége; a rendszeradmin mentesül; a saját cégben dolgozónál nincs változás) és `munkakornyezet_visszaallitasa_get`. A `require_modul` GET kérésnél a munkakörnyezetet a felhasználó saját cégére állítja vissza (`workspace_id` süti) és ugyanarra az oldalra irányít (a saját cégben a modul már megvan, tehát **nincs átirányítási hurok**), egyéb metódusnál (POST...) 403 és semmi sem íródik. Ugyanezt teszi a „/” gyökér-oldal is (`main.gyoker_oldal`).
  - **Viselkedés-változás, amit tudni kell:** ha egy külsős szakértő munkakörnyezete olyan cég, amelynek nincs Emelőgép / EBK / VIVÜ / Tűzvédelem modulja, az adott modul oldalai a saját cégére váltják vissza, nem hibát mutatnak. A munkakörnyezet-váltó (modulra szűrt) lista változatlan.
  - **J-05 (döntés, nincs kódváltozás):** a szakértő/vizsgáló fiók jelszó-, 2FA- és e-mail-kezelése a céges Adminnál marad; a kockázatot a megrendelő tudatosan vállalja.
  - Tesztek: új `tests/t_jog_j02_j15.py` (29 ellenőrzés: `is_machine_allowed` egységteszt, `/gep-adatlap`, modul-kapu GET/POST, RA, saját cég, „/” gyökér). A régi `is_machine_allowed`-del 6, a kikapcsolt modul-kapuval 3, a kikapcsolt „/”-ellenőrzéssel 1 ellenőrzés bukik.
  - **Nyitva (következő szeletek):** 7b J-10 (EBK/VIVÜ lista/dashboard), 7c J-11 maradék (Tűzvédelem szerepkör-kapu, napló újralezárás).
  - **Dokumentáció:** `docs/JOGOSULTSAGOK.md` (J-02, J-15 JAVÍTVA; J-05 döntés; 7a szelet KÉSZ), `tests/README.md`.

## v71 – 2026-10-08
- BIZTONSÁG, J-LISTA 6d SZELET (J-13, Tűzvédelem + rendszeradmin VIVÜ karbantartó rész; `docs/JOGOSULTSAGOK.md` 5. és 6. fejezet): a J-13 ezzel lezárult.
  - **A hiba:** (1) a Tűzvédelem készülék-szerkesztése (`POST /tuzvedelem/keszulek/{id}/szerkesztes`) a `hely_id`-t és a `karbantarto_ceg_id`-t cég-ellenőrzés nélkül mentette (a készülék idegen cég készenléti helyére kerülhetett, idegen karbantartó neve megjelent), a `statusz` fehérlista nélkül mentődött; (2) az ellenőrzés-rögzítés (`…/ellenorzes-rogzitese`) `karbantarto_ceg_id`-ja és `tipus`-a ugyanígy validálatlan volt; (3) a nem szám `epulet_id` (`uj-keszulek`) és `csere_keszulek_id` (`szervizbe-kuldes`) 500-at okozott; (4) a rendszeradmin VIVÜ-karbantartó mentés (`/rendszeradmin/vivu/ellenorzes/{id}/karbantartas`) sorainak tétele / épülete / szintje, az érintett épületek és a státusz nem volt ellenőrizve.
  - **A javítás:** `routers/tuzvedelem.py`: `keszulek_hivatkozasok_ellenorzese`, `karbantarto_ceg_ellenorzese`, `_id_vagy_hiba` + az `KESZULEK_STATUSZOK` és `ELLENORZES_TIPUSOK` fehérlista (a sablon select-jeinek értékei; a készülék jelenlegi státusza, pl. „Jóváhagyásra vár", változatlanul visszaküldhető). `routers/vivu.py: vivu_karbantartas_hivatkozasok_ellenorzese` (a v70-es VIVÜ-szabályok meglévő/új sorokra; az ÚJ sor `torles` jelzője nem kerüli meg az ellenőrzést, mert a kezelő kód ott nem nézi) a `routers/rendszeradmin.py` karbantartó mentésében. Hibánál **400 + konkrét üzenet és semmi sem mentődik**; a nem szám azonosítók 500 helyett 400-at adnak.
  - Tesztek: új `tests/t_jog_j13_tuzvedelem.py` (32 ellenőrzés: készülék-szerkesztés, ellenőrzés-rögzítés, a két korábbi 500, RA VIVÜ karbantartó mentés). A validálók kikapcsolásával 22 ellenőrzés bukik (a két 500-as eset mutáció nélkül is kivételt ad).
  - **Dokumentáció:** `docs/JOGOSULTSAGOK.md` (J-13 JAVÍTVA, 6. szelet teljesen KÉSZ), `tests/README.md`.

## v70 – 2026-10-08
- BIZTONSÁG, J-LISTA 6c SZELET (J-13, EBK + VIVÜ rész; `docs/JOGOSULTSAGOK.md` 5. és 6. fejezet): az EBK és a VIVÜ ellenőrzés-mentése ellenőrzi a hivatkozott azonosítókat.
  - **A hiba:** az EBK (`POST /ebk/projekt/{id}/ellenorzes`) és a VIVÜ (`POST /vivu/ugyfel/{id}/ellenorzes`) mentése a JSON-ból és az űrlapról érkező azonosítókat (tétel, épület, szint, alvállalkozó, tevékenység) nem kötötte a céghez / projekthez / telephelyhez, a `statusz` fehérlista nélkül mentődött, a nem szám érték általános hibát adott. Idegen cég egy tételének, alvállalkozójának, tevékenységének, épületének vagy szintjének azonosítóját megadva annak NEVE megjelent az ellenőrzés részleteiben és a PDF-ben (azonosító-találgatással); a VIVÜ az érintett épületek között az idegent csendben eldobta.
  - **A javítás:** két új, az írás ELŐTT futó ellenőrző (`routers/ebk.py: ellenorzes_hivatkozasok_ellenorzese`, `routers/vivu.py: vivu_hivatkozasok_ellenorzese`); hibánál **400 + konkrét üzenet és semmi sem mentődik**. EBK: a fejléc épülete a megadott területhez, szintje az épülethez; soronként a tétel a **projekt tételei közül** (az aktív jelző nélkül, hogy a menet közben kikapcsolt tétel miatt a terepen megnyitott űrlap mentése ne bukjon), az alvállalkozó és a tevékenység a cégé, az „összes szint” bejárás sorszintje az épületé. VIVÜ: a tétel a cég (vagy globális) tétele (a típus-egyezést nem követeljük meg), a sor épülete a telephelyé, szintje az épületé, az érintett épületek mind a telephelyről valók. Mindkettőnél a `statusz` ∈ {RENDBEN, SZABALYTALANSAG, NEM_RELEVANS}; az azonosítók egész számra (számjegyes szöveg is) normalizáltak. A sablonok JS-e (`ebk_uj_ellenorzes.js`, `vivu_uj_ellenorzes.js`) eddig is megfelelő formátumot küld, ott változtatni nem kellett.
  - **Viselkedés-változás, amit tudni kell:** az érintett épületek között szereplő idegen / másik telephelyű épület eddig csendben kimaradt, mostantól az egész mentés elmarad. A többi EBK/VIVÜ route (projekt, terület, épület, szint, alvállalkozó, megrendelő/koordinátor, fényképek) eddig is cégre szűrt volt.
  - Tesztek: új `tests/t_jog_j13_ebk_vivu.py` (32 ellenőrzés: EBK 18, VIVÜ 14 - pozitív kontrollok és minden hibaág). A validálók kikapcsolásával 24 ellenőrzés bukik.
  - **Nyitva:** a J-13 Tűzvédelem része (6d); a rendszeradmin-only VIVÜ karbantartó mentés (`/rendszeradmin/vivu/ellenorzes/{id}/karbantartas`) sorazonosítói (RA-megbízható, alacsony kockázat).
  - **Dokumentáció:** `docs/JOGOSULTSAGOK.md` (J-13 EBK + VIVÜ rész JAVÍTVA, 6c szelet KÉSZ), `tests/README.md`.

## v69 – 2026-10-08
- BIZTONSÁG, J-LISTA 6b SZELET (J-13, Emelőgép rész; `docs/JOGOSULTSAGOK.md` 5. és 6. fejezet): a gép telephelye és a felhasználók telephely-/gép-korlátozása cégre szűrt és validált.
  - **A hiba:** (1) a `/gep-mentese` a `site_id`-t cég-ellenőrzés nélkül mentette - idegen cég telephelye is a géphez köthető volt (a neve megjelent a listában / PDF-ben, azonosító-találgatással), a nem szám érték pedig 500-at adott; (2) a céges Admin `/szerkeszt-felhasznalo` útján a `hozzaferes_szint` fehérlista nélkül érkezett (ismeretlen érték az `is_machine_allowed` végén `return True`-ra, azaz teljes céges elérésre esett), az `allowed_sites/allowed_machines` azonosítókat pedig a kód a cég szűrése nélkül kereste meg, így idegen cég telephelye/gépe a felhasználóhoz köthető volt; (3) az `/uj-ceges-felhasznalo` ugyanígy az `allowed_*` listákra.
  - **A javítás:** az új `routers/users.py: hozzaferes_alanyok_ellenorzese(db, ceg_id, szint, telephelyek, gepek)` segéd (a `hozzaferes_szint` fehérlistája + a felhasználó cégére szűrt keresés + darabszám-egyezés; ez az RA-oldali `teljes_szerkesztes` mintája). Mindkét `users.py` út használja: hibánál **400 és semmi sem mentődik**, és az ellenőrzés a fájl-írás és a mezők módosítása ELŐTT fut. A `/gep-mentese` a telephelyet a munkakörnyezet cégére szűri (idegen / nem létező / nem szám: 400, új gépnél nem jön létre gép; az üres mező továbbra is „telephely nélkül").
  - **Viselkedés-változás, amit tudni kell:** korábban az idegen vagy hibás azonosítót a rendszer csendben kihagyta, a többi adat mentődött; mostantól az egész mentés elmarad, és hibaüzenet jön. Az `/uj-ceges-felhasznalo` ismeretlen szintje továbbra is a legszűkebb (`GEP`, 0 géppel).
  - Tesztek: új `tests/t_jog_j13_emelogep.py` (26 ellenőrzés: gép-mentés új/meglévő gépre, felhasználó-szerkesztés, felhasználó-létrehozás, a gép-korlátozás következménye). A régi (szűrés nélküli) logikával visszaállítva 15 ellenőrzés bukik.
  - **Nyitva (következő szeletek):** a J-13 EBK + VIVÜ (6c) és Tűzvédelem (6d) része.
  - **Dokumentáció:** `docs/JOGOSULTSAGOK.md` (J-13 részben JAVÍTVA, 6b szelet KÉSZ), `tests/README.md`.

## v68 – 2026-10-08
- BIZTONSÁG, J-LISTA 6a SZELET (J-12; `docs/JOGOSULTSAGOK.md` 5. és 6. fejezet): a vizsgálat-rögzítő route-ok a GÉP cégéhez kötődnek, nem a munkakörnyezethez.
  - **A hiba:** a `/vizsgalat-urlap/{uuid}` és a `/general-jegyzokonyv` az „aktív cég" és a `csak_olvasas` ellenőrzést a **munkakörnyezet** cégére futtatta, a gépet viszont cég-kötés nélkül kereste meg. Így a külsős szakértő (saját cége aktív) **inaktív ügyfélcég gépére is** rögzíthetett vizsgálatot; a `RendeletSzigoritasKikapcsolva` kapcsoló, a jegyzőkönyv-sablonok és az arculat is a munkakörnyezet cégéből jött; és a PDF a **munkakörnyezet** mappájába (`uploads/{munkakörnyezet}/{gép}/`) került, a letöltést kiszolgáló `/uploads/{cég}/{gép}/...` viszont a (gép cége, gép) párt ellenőrzi - a külsős által rögzített jegyzőkönyvet a gép cége (és a bérlő) **nem tudta letölteni**.
  - **A javítás (`routers/inspections.py`):** a route-ok előbb megkeresik a gépet és ellenőrzik az elérést, és csak ezután futtatják a közös írási kaput (`security.irasi_tiltas_oka`) a `gep.company_id`-ra (ez az ellenőrzések sorrendje: szerepkör → típus/minősítés → gép+elérés → cég aktív / csak_olvasas). Ugyanígy a gép cégéhez kötődik a szigorítás-kapcsoló, a sablon-lista, az arculat és a PDF mappája (`uploads/{gép cége}/{gép}/`). Az űrlap tiltásnál a `/lista?inaktiv_ceg=1` / `/lista?csak_olvasas=1` címre irányít, a rögzítés 403-at ad (az inaktív cég üzenete a korábbi: „Ez a cég inaktív státuszú, jegyzőkönyv nem rögzíthető!"). Az árva, gyengébb védelmű `POST /uj-vizsgalat` route (nem hívta sablon, JS vagy teszt) **törölve**.
  - **Következmény, amit tudni kell:** bérlő általi rögzítésnél a gép (bérbeadó) cégének állapota számít; az űrlap-tiltás csak a már hozzáférhető gépnél ad okot (jogosulatlan felhasználó a sima `/lista` átirányítást kapja, nem tudja meg a cég állapotát). A korábban a munkakörnyezet mappájában létrehozott PDF-ek helyükön maradnak (a `File`/`Inspection` rekord a teljes útvonalat őrzi); ezek letöltése továbbra is az eredeti korlátozás szerint működik.
  - **Nyitva maradt (külön döntés):** a `/general-jegyzokonyv` nem ellenőrzi, hogy a gép „Aktív" státuszú-e (K16, selejtezett gépre direkt POST-tal rögzíthető).
  - Tesztek: új `tests/t_jog_j12.py` (22 ellenőrzés: pozitív kontroll, inaktív gép-cég aktív munkakörnyezettel, csak_olvasas, jogosulatlan szakértő, szigorítás-kapcsoló, sablon, arculat, PDF-mappa és letöltés, az `/uj-vizsgalat` megszűnése). A régi (munkakörnyezet-alapú) logikával visszaállítva 11 ellenőrzés bukik.
  - **Dokumentáció:** `docs/JOGOSULTSAGOK.md` (J-12 JAVÍTVA, 6. fejezet 6a szelet KÉSZ), `tests/README.md`.

## v67 – 2026-10-08
- BIZTONSÁG, J-LISTA 5. SZELET (J-08; `docs/JOGOSULTSAGOK.md` 5. és 6. fejezet): a modul-rendszer indításkori automatikája többé nem tölti vissza a szándékosan megvont modulokat.
  - **A hiba:** a `main.py` MINDEN indításkor (újraindításkor) minden modul nélküli céget az összes modulhoz, minden modul nélküli felhasználót a cége összes moduljához juttatott. A modul-rendszer bevezetésekor ez a visszamenőleges kompatibilitás miatt kellett, de azóta három helyen ártott: (1) az **új cég** (a `/rendszeradmin/cegek/uj` modul nélkül hozza létre) az első újraindításkor MIND a 4 modult megkapta - az előfizetetleneket is -, a felhasználói is; (2) a rendszeradmin „inaktív felhasználó modul-jogosultságainak törlése" takarítása újraindításkor visszaállt; (3) a VIVU / EBK fiók, amelynek modulja kiürült (pl. az RA kikapcsolta a cég VIVÜ modulját), a cég összes másik modulját is megkapta, holott ezek a szerepkörök szándékosan egy modulra korlátozottak.
  - **A javítás:** a logika az új `modul_utils.py`-ba került (`modul_seedek_potlasa`, `kezdeti_modul_feltoltes`). A kezdeti feltöltés **csak akkor fut, ha az egész rendszerben sehol nincs modul-hozzárendelés** (sem cégnél, sem felhasználónál), azaz egy modul-rendszer előtti adatbázis első indításakor; ott szerepkör-tudatos: Admin / Felhasználó / ügyintéző / szakértő / vizsgáló / Karbantartó a cég összes modulját, VIVU csak a VIVU-t, EBK csak az EBK-t, a Megtekintő egyiket sem (a Megtekintő vagy az EBK, vagy a VIVÜ modult használja - ezt a szerepkör nem dönti el, az RA állítja). Az éles (már migrált) adatbázison az újraindítás mostantól semmit nem változtat. A friss, üres adatbázis első indítása változatlan (a rendszer-cég és az admin megkapja a modulokat).
  - **Következmény, amit tudni kell:** új cégnél, és az ahhoz FELVETT felhasználóknál a modulokat a rendszeradminisztrátor állítja be (`/rendszeradmin`: cég-modul és felhasználó-modul kapcsolók). A dokumentált menet eddig is ez volt (a cég-modul bekapcsolása a már meglévő felhasználóknak nem ad automatikusan modult), csak egy újraindítás elfedte a hiányát. Sorrend-ajánlás: előbb a cég moduljai, utána a cég Admin-jának felvétele (a létrehozáskor a cég moduljait kapja).
  - Tesztek: új `tests/t_jog_modulok.py` (26 ellenőrzés: friss adatbázis, élő adatbázis „újraindítása", modul-rendszer előtti adatbázis szerepkör-tudatos feltöltése, törzsadat-pótlás, a `main.py` bekötése). A régi logikával visszaállítva 11 ellenőrzés bukik.
  - **Dokumentáció:** `docs/JOGOSULTSAGOK.md` (J-08 JAVÍTVA, 6. fejezet 5. szelet KÉSZ), `tests/README.md`.

## v66 – 2026-10-08
- BIZTONSÁG, J-LISTA 4. SZELET (J-07 + J-06 + J-19 + J-18; `docs/JOGOSULTSAGOK.md` 5. és 6. fejezet): négy felhasználó-kezelési hiba javítása.
  - **J-07 (jelszó-átvétel):** az `/admin-jelszo-csere` (a „Jelszó kényszerített módosítása" űrlap) önmagára is működött, a régi jelszó ismerete nélkül: ellopott admin-munkamenettel a jelszó átállítható, a jogos felhasználó kizárható volt. Mostantól `target_id == current_user.id` esetén 400 és üzenet („a saját jelszavadat a Profilom oldalon, a régi jelszó megadásával módosíthatod"), cég-Adminra és rendszeradminra egyaránt. Másra a működés változatlan.
  - **J-06 (licenc megkerülése):** a licenc-limit (`licenc_max_dolgozo`, `licenc_max_ugyintezo`) csak új felhasználó felvételekor futott. Menet: 5/5 → egyiket inaktiválja → újat vesz fel → a régit visszakapcsolja → 6 aktív. Új `licenc_utils.licenc_reaktivalas_hiba(user, db)`: inaktív fiók visszakapcsolásához ugyanaz a szabály kell, mint egy új felvételéhez. **Három úton** hívva, mert mind megkerülte a limitet: a cég-Admin / RA kapcsoló (`users.py kapcsol_felhasznalo_aktiv`), az RA `POST /felhasznalok/{id}/aktiv` és az RA teljes-szerkesztés „aktív" jelölőnégyzete (a doksi eredetileg csak az elsőt említette). Az inaktiválás továbbra is mindig megy, és a felszabaduló hely újra felhasználható.
  - **J-19 (szerepkör-validáció):** az `/uj-admin-felhasznalo` (csak rendszeradmin) a `role` mezőt nem ellenőrizte, és az 1-es (rendszer-) cégbe is felvett volna „Admin"-t, azaz rendszeradminisztrátort az RA-kezelés védelmei (utolsó aktív RA stb.) megkerülésével. Mostantól fehérlista: Admin / Emelőgép szakértő / Emelőgép vizsgáló (ezt a hármat kínálja a felület), és az 1-es cég célként 400.
  - **J-18 (Karbantartó nem hozható létre):** a Tűzvédelem oldal „Új karbantartó" űrlapja `role=Karbantartó`-t küld az `/uj-ceges-felhasznalo`-ra, a szerver fehérlistája azonban csak Felhasználó / Emelőgép ügyintéző / VIVU volt, így a gomb mindig „Érvénytelen szerepkör" hibát adott. Most a Karbantartó külön állandóval (`TUZVEDELMI_KARBANTARTO_SZEREPKOR`) engedett, **csak ha a cég előfizetett a TUZVEDELEM modulra**, és az új Karbantartó **kizárólag a Tűzvédelem modult** kapja (mint a VIVÜ a sajátját). Ez utóbbi tudatos: a cég Emelőgép modulja mellett az Emelőgép-route-ok tiltó szerepkör-listái (J-25) a Karbantartót átengednék.
  - **Ami NEM változott:** a másik felhasználó jelszavának cseréje, az inaktiválás, a VIVÜ egy-per-cég szabály, a Felhasználó / ügyintéző / VIVU létrehozása és modul-kiosztása, az RA szerepkör-/cégváltás licenc-ellenőrzése. **Nyitva maradt (más szeleteken):** az `allowed_sites`/`allowed_machines` cég-szűrése az `/uj-ceges-felhasznalo`-ban (J-13, 6. szelet); a már létező Karbantartó-fiókok RA-oldali modul-kiosztása (`ALTALANOS_SZEREPKOROK`) nem változott.
  - Tesztek: új `tests/t_jog_felhasznalok.py` (46 ellenőrzés, A-D blokk, pozitív kontrollokkal; a javítások kiiktatásával 20 ellenőrzés bukik). A `tests/t_mfa5.py` E1 ellenőrzése módosult: korábban azt bizonyította, hogy az admin-végponton a SAJÁT jelszó cseréje nem törli a saját 2FA-t; mostantól azt, hogy a kérés el van utasítva (400), a jelszó és a 2FA változatlan.
  - **Dokumentáció:** `docs/JOGOSULTSAGOK.md` (J-06 / J-07 / J-18 / J-19 JAVÍTVA, az 1. és 3. fejezet Karbantartó-sorai, licenc-sor, 6. fejezet 4. szelet KÉSZ), `docs/KETLEPCSOS_HITELESITES.md` (a saját fiókra vonatkozó megjegyzések), `tests/README.md`.

## v65 – 2026-10-08
- BIZTONSÁG, J-LISTA 3. SZELET (J-09; `docs/JOGOSULTSAGOK.md` 5. és 6. fejezet): egységes írási kapu (cég aktív + nem `csak_olvasas`) a cég-oldali író route-okon, ahol eddig hiányzott.
  - **A hiba:** a `csak_olvasas` fiók és az inaktivált cég „csak megtekintés" szabályát minden író route-nak magának kellett ellenőriznie, nem a belépés. 17 cég-oldali route-on ez kimaradt vagy félig volt meg: egy `csak_olvasas` Admin / szakértő végrehajthatta ezeket, és inaktív cégben is működtek.
  - **Felmérés:** a 191 író (POST/PUT/DELETE/PATCH) route mindegyikét átnéztük (a route és a modulon belüli segédfüggvényei szövegében a két ellenőrzést keresve): 63 jelölt, ebből 17 cég-oldali valódi hiány; a többi indokoltan mentes (lásd lent).
  - **Közös helper:** új `security.irasi_tiltas_oka(current_user, company_id, db)` - `None`, ha írhat; különben `"inaktiv_ceg"` vagy `"csak_olvasas"` (a cég az első, ahogy a korábbi kézi ellenőrzéseknél). Kísérő állandók: `IRASI_TILTAS_UZENETEK`, `IRASI_TILTAS_LISTA_URL`. A kulcsok megegyeznek az EBK-ban már használt `?hiba=...` értékekkel.
  - **Kaput kapott route-ok:** szakértői ütemező (`/szakerto-megbizatas`, `/szakerto-tervez`, `/szakerto-tervez-torles` - a *gép* cégét nézi, mert a szakértő több cégben dolgozhat); bérlet (`/berlet/{id}/jovahagyas`, `/berlet/{id}/elutasitas`, és a `/gep/{uuid}/berlet-lezarasa` cég-aktív része); EBK (megrendelő- és koordinátor-hozzárendelés, és a tétel-váltás `csak_olvasas` része); VIVÜ utólagos fotó (`/vivu/tetel/{id}/fenykep`); Tűzvédelem (készülék-jóváhagyás, új karbantartó cég, szerződés indítása és lezárása, napló lezárása); partner-cégek (kód- és partnerség-visszavonás, a cég-aktív rész). Az e-mail teszt-levél (RA-only, külső hatású: levelet küld) a `csak_olvasas` kaput kapta, mint a testvér-route-ok.
  - **Tiltáskor a válasz a route eddigi módját követi:** JSON 403 (fetch-es hívás), vagy átirányítás (`/lista?csak_olvasas=1`, `/lista?inaktiv_ceg=1`; EBK: `?hiba=...`; Tűzvédelem űrlapok: a beállítások oldal). A tiltott kísérlet semmit nem ír az adatbázisba.
  - **Szándékosan kapu nélkül (a teszt `KIVETELEK` listájában, indokkal):** belépés / MFA / aktiválás / saját-fiók route-ok (munkamenet előtt vagy saját hitelesítés), két személyes beállítás (értesítés-feliratkozás, szabadság), két csak beolvasó elemző végpont (Excel- és készülék-import elemzés), és a rendszeradmin-only route-ok. Utóbbiakon a cég-aktív kapu helytelen volna (az RA inaktív cégen is dolgozik: aktiválás, törlés), a `csak_olvasas` RA fiók pedig a felületről nem hozható létre - ez az elméleti kitettség külön döntésre vár.
  - **Ami NEM változott:** a szerepkör-ellenőrzések, a jogosult felhasználók működése aktív cégben, a már kaput használó route-ok (pl. `_lehet_adminisztralni` az EBK-ban) - azok nem lettek átírva, hogy a diff kicsi maradjon.
  - Tesztek: új `tests/t_jog_j09.py` (64 ellenőrzés: 17 route × 3 fázis - pozitív kontroll / csak_olvasas / inaktív cég, DB-változatlansággal; az e-mail teszt-levél érvénytelen címzettel, hogy levél soha ne menjen ki; a helper 5 esete; Z blokk: leltár, amely új, kapu nélküli író route-nál elbukik). Kapu kiiktatásával ellenőrizve: a teszt elbukik.
  - **Dokumentáció:** `docs/JOGOSULTSAGOK.md` (J-09 JAVÍTVA, 6. fejezet 3. szelet KÉSZ, a „kivéve J-09" megjegyzések), `tests/README.md`.

## v64 – 2026-10-08
- BIZTONSÁG, J-LISTA 2. SZELET (J-03 + J-17; `docs/JOGOSULTSAGOK.md` 5. és 6. fejezet): a dokumentum-feltöltés (`POST /upload-file`) szerver-oldali jogosultsági szabályai, a fájl-felülírás megszüntetése és a törlés naplózása.
  - **A hiba (J-03):** a feltöltő felület csak kliens-oldalon korlátozta, ki milyen típusú dokumentumot tölthet fel, és kinek jár a „dátum frissítése" / „minősítés" kérdés. A szerver ezeket nem ellenőrizte: bárki, aki dokumentumot tölthet fel (akár a `jog_dokumentum_feltoltes` jogú **Felhasználó**), kézzel összeállított kéréssel „Fővizsgálat jkv" típussal átírhatta a gép vizsgálati dátumát, „Nem alkalmas" minősítéssel **kivonhatta a gépet** (hibajegy, e-mail), és ezzel megkerülte a `jog_datum_szerkesztes` jogot, a vizsgáló „csak szerkezeti" korlátját és az ügyintéző EBSZ 7.2.10 korlátját. A fájlt ráadásul fix névvel mentette, ütközéskezelés nélkül: egy azonos nevű fájl (pl. a rendszer által generált, kiszámítható nevű hivatalos jegyzőkönyv-PDF) felülíródott - a törlés jogát megkerülve.
  - **Dokumentumtípus:** a Felhasználó (és minden nem szakmai szerepkör) csak **Fénykép** és **Gépnapló** típust tölthet fel (403 másra). Az Admin / szakértő / vizsgáló / ügyintéző továbbra is bármilyen típust - a típus szabad szöveg is lehet, mert az MSZ 16226 oldal „egyéb dokumentumtípusai" és a „Szervíz munkalap" ugyanezt a végpontot hívják. A típus nem lehet üres vagy 100 karakternél hosszabb (400).
  - **Dátum-átállítás és minősítés** (`update_date`, `minosites`): a szabály UGYANAZ, mint a vizsgálat-rögzítésnél (`/general-jegyzokonyv`). Admin és szakértő: minden jkv típus; **vizsgáló**: csak a Szerkezeti vizsgálat jkv; **ügyintéző**: Szerkezeti / Rendkívüli / Üzembehelyezési jkv; a Fővizsgálat / Időszakos biztonsági felülvizsgálat jkv-nál csak ha a cég `szigor_ki` beállítása be van kapcsolva ÉS a gép az EBSZ 7.2.10 szerint jogosult; **Felhasználó** soha. Minősítés (Korlátozással alkalmas / Nem alkalmas) csak a négy vizsgálati jkv típussal adható (400 mással), és ugyanezekkel a szerepkör-szabályokkal. Elutasításnál (403) a fájl sem mentődik. A hatástalan `Alkalmas / Megfelelt` minősítés és a nem dátumos típusnál küldött `update_date` nem akadály, hatástalan marad, mint eddig.
  - **Nincs felülírás:** a mentés kizárólagos létrehozással (`open(..., "xb")`) történik; azonos névnél a fájl véletlen utótagot kap (`nev_ab12cd34.pdf`), így két egyidejű, azonos nevű feltöltés sem írhatja felül egymást. A kép továbbra is `.jpg`-re konvertálódik, az ütközéskezelés erre is vonatkozik.
  - **Törlés naplózása (J-17):** a `DELETE /torol-fajl/{id}` eddig nyomtalanul törölt (hivatalos jegyzőkönyvet is). Mostantól a gép naplójába kerül egy `DOKUMENTUM TÖRLÉS` bejegyzés (a dokumentum típusa és fájlneve, a törlő felhasználóval).
  - **Felület:** a `templates/list.html` a Felhasználó-n kívüli típusokat csak az Admin / szakértő / vizsgáló / ügyintéző szerepkörnek kínálja (egyezik a szerverrel); a `static/js/pages/list.js` a szerver elutasító üzenetét is megmutatja a feltöltés végén (eddig csak „részletek a konzolon" állt).
  - **Ami NEM változott:** a `jog_dokumentum_feltoltes` kapu (Felhasználó, ügyintéző), a cég-aktív és `csak_olvasas` ellenőrzés, a kiterjesztés- és tartalom-ellenőrzés, a gép-hatókör ellenőrzés (`is_machine_allowed`; a hatókör-kérdés a J-02 szelet), a QR-os / offline feltöltések (más végpont). Nincs adatbázis-séma- vagy útvonal-változás; a service worker gyorsítótára nem érintett.
  - Tesztek: új `tests/t_jog_feltoltes.py` (39 ellenőrzés: szerepkörönként a típus- és a dátum-/minősítés-szabály, ügyintéző szigor_ki + EBSZ-eset, azonos nevű PDF és kép, szabad szöveges típus, törlés-napló, a lista-űrlap egyezése).
  - **Dokumentáció:** `docs/JOGOSULTSAGOK.md` (J-03 / J-17 JAVÍTVA, 4.1 megjegyzés, 6. fejezet 2. szelet KÉSZ), `tests/README.md`.

## v63 – 2026-10-08
- BIZTONSÁG, J-LISTA 1. SZELET (J-04 + J-01; `docs/JOGOSULTSAGOK.md` 5. fejezet és 6. fejezet 1. szelet): két, kódolvasással talált hiba javítása.
  - **J-04 (működési hiba):** a tömeges dokumentum-import (`/rendszeradmin/dokumentum-import/feltoltes`) minden nem-„Fénykép" típusnál (pl. PDF) `NameError`-ral, 500-as hibával leállt, az egész köteg elveszett: a `tartalom_illeszkedik_e_kiterjesztesre` nem volt importálva a `routers/dokumentum_import.py`-ban. Az import pótolva (egy sor). A tartalom-ellenőrzés fail-closed volt és az is marad: a PDF-nek álcázott bináris „hibás formátum" lesz.
  - **J-01 (jogosultság-megkerülés):** a Beállítások szótár-útvonalai (`/uj-szotar`, `/szerkeszt-szotar`, `/torol-szotar`) tetszőleges `kategoria`-t fogadtak, és id alapján bármely, a munkakörnyezet cégéhez tartozó `Dictionary` sort módosítottak / töröltek. A felület csak Gyártó / Típus értéket küld, de ez kliens-oldali korlát: a **céges Admin** kézzel összeállított kéréssel megkerülhette a „csak rendszeradmin" kapcsolókat (a fizetős AI-szkennelés, az azonosítási mód, a súgó, az OE-számítás, a jegyzőkönyv-sablonok, a logó útvonal / fejléc / lábléc is a `Dictionary` táblában van). Mostantól a `routers/settings.py` `SZOTAR_KEZELHETO_KATEGORIAK = ("Gyarto", "Tipus")` fehérlistát használ: a `/uj-szotar` más kategóriára **400**-at ad (semmi sem íródik), a `/szerkeszt-szotar` és a `/torol-szotar` csak Gyártó / Típus sort talál meg - egy kapcsoló / beállítás sor azonosítójával sem szerkeszthető vagy törölhető, és a korábbi cég-szűrés (más cég sora) is megmaradt.
  - **Ami NEM változott:** a Beállítások felület Gyártó / Típus kezelése pontosan úgy működik, mint eddig (az „Új" és „Szerkeszt" ablak csak ezt a két kategóriát küldi); az Admin-kapu, a cég-aktív és a `csak_olvasas` ellenőrzés a három route-on változatlan; a rendszeradmin saját, dedikált route-jai (AI-szkennelés, súgó stb.) érintetlenek. Nincs adatbázis-séma- vagy útvonal-változás; a service worker gyorsítótára nem érintett.
  - Tesztek: új `tests/t_jog_szotar.py` (A-E: a három route fehérlistája kapcsoló / beállítás / sablon sorokkal, cég-közi sor, nem Admin és csak olvasó Admin kapuja, az import PDF-fel és álcázott bináris fájllal).
  - **Dokumentáció:** a `docs/JOGOSULTSAGOK.md` J-01 / J-04 sora „JAVÍTVA (v63)", a 6. fejezet 1. szelete KÉSZ; `tests/README.md`.

## v62 – 2026-10-06
- SZÁMOZÁS: ez a bejegyzés eredetileg v60 volt, de Miklós a v59 / v60 számot párhuzamosan használta (Partner cégek, fülsor-javítás); az a420615 merge a CHANGELOG-ból kiejtette, ezért v62-ként került vissza (a kód- és dokumentáció-hivatkozások is v62-re igazítva).
- KÖZBEÉKELT KÉRÉS (a megrendelő kérése): maximális oldalszélesség ultrawide monitorokra. Az oldal legfeljebb **1920 px** (Full HD) széles, és ennél szélesebb képernyőn (2560 / 3440 / 3840 px) az egész oldal - fejléc, menü, tartalom, lábléc együtt - **középre kerül**, két oldalt üres (a téma színű) sáv marad. 3840 px-en korábban minden a teljes szélességet kitöltötte (a tartalom a képernyő két szélétől 24 px-re), ami túl széles és szétszórt volt.
  - **Megvalósítás:** a közös CSS-ben (`static/css/emelog.css`) új token: `--el-max-szelesseg: 1920px` (`:root`), és a `body` `max-width: var(--el-max-szelesseg); margin-left/right: auto`. Mivel a fejléc, a tartalom és a lábléc a `<body>` közvetlen gyerekei, egyetlen szabály az összes (a közös `emelog.css`-t használó, ~80) oldalra érvényes - oldalankénti módosítás nem kellett. A szélesség egyetlen helyen (a tokenben) állítható.
  - **Hatás:** 1920 px és keskenyebb képernyőn (Full HD, laptop, tablet, telefon) SEMMI nem változik (a korlát hatástalan). A saját, szűkebb szélességű oldalak (pl. EBK ügyfelek 900 px, Profilom 860 px) a korábbiak szerint középen maradnak. A lebegő és rögzített elemek (a lebegő téma-kapcsoló, a modálok, a lenyílók, a Select2 lista, a rögzített fejléc) változatlanul működnek; a Select2 lenyílója a mezőhöz igazodik.
  - **Mérés** (Playwright, 48 oldal, 3840 px): a tartalom bal széle 960 px-nél (+24 px belső margó), a jobb széle 2880 px-nél végződik (korábban 0-3840), 0 px vízszintes túlcsordulás; 2560 px-en a tartalom 320 és 2240 px közé esik; 1920 px-en és alatta az eredmény megegyezik a v59-cel. Nem érinti a nyilvános kezdőlapot (`marketing.html`) és a nyomtatási nézeteket - azok nem használják a közös CSS-t.
  - Tesztek: `tests/t_design.py` V1-V4 (196 ellenőrzés). Csak CSS-változás; nincs adatbázis-, útvonal- vagy jogosultság-változás, a service worker gyorsítótára nem érintett (a CSS-t a hálózat adja, a service worker csak a mobil oldalak HTML-jét tartja).

## v61 – 2026-10-06
- SZÁMOZÁS: ez a bejegyzés eredetileg v59 volt, de Miklós a v59 / v60 számot párhuzamosan használta (Partner cégek, fülsor-javítás); az a420615 merge a CHANGELOG-ból kiejtette, ezért v61-ként került vissza (a kód- és dokumentáció-hivatkozások is v61-re igazítva). Miklós v60-as fülsor-javítása (1400 px alatt ikon) és ez a telefonos ikon-fülsor egymást kiegészíti.
- KÖZBEÉKELT KÉRÉS (a megrendelő kérése): az emelőgépes Beállítások másodlagos menüsora (a fülek) telefonon csak ikonokat mutat, középre igazítva - ugyanúgy, mint az elsődleges menüsor. Asztalon / tableten (≥ 576 px) a fülek ikonnal ÉS felirattal látszanak, változatlanul.
  - **Megvalósítás:** a fül-feliratokat (`<span class="el-menucimke">`) a v60 (Miklós) 1400 px alatt - tehát telefonon is - elrejti; a v61 ehhez hozzáteszi a fül nevét `title` és `aria-label` attribútumként (ikon-only állapotban is akadálymentes), a telefonos CSS-ben pedig az ikonok középre igazítva, sortörve állnak. (A v61 eredeti, külön `.el-fulcimke` osztálya a v60 miatt feleslegessé vált, a merge után megszűnt.) A telefonos CSS-ben a v51-es egysoros görgethető fülsáv helyett az ikonok középre igazítva, sortörve állnak (390 px-en 7 + 3 ikon = 2 sor a cég-Admin számára, nincs vízszintes görgetés).
  - **Új fülsornál** a feliratot mindig `.el-menucimke` span-be kell tenni és `title` / `aria-label` kell (l. `docs/DESIGN_RENDSZER.md` 2.17).
  - Tesztek: `tests/t_design.py` U1-U3 (a v61-es állapotban 192 ellenőrzés), a J2 / M5 / R2, valamint a `t_profil` G13 és a `t_jelszo` B6b ('Szabályok' fül felirata) igazítva az új `</span></button>` szerkezethez. Csak sablon- és CSS-változás; nincs adatbázis-, útvonal- vagy jogosultság-változás, a service worker gyorsítótára (v5) nem érintett.

## v60 – 2026-10-06
- JAVÍTVA: a Beállítások oldal fülsora (`.el-fulek`) 1400 px alatt (szűk asztali/tablet nézet)
  eddig mindig ikon+szöveggel jelent meg, holott a főmenü (`.el-menusor`) ugyanilyen
  szélességnél már régóta csak ikonra vált. Az ok: a fülek szövege sosem volt
  `<span class="el-menucimke">`-be csomagolva, így a meglévő szabály nem tudott rá hatni. A 11
  fül mindegyike mostantól ezt a span-et használja, a CSS media query kibővült a
  `.el-fulek`-re is - a Beállítások fülsora most ugyanúgy viselkedik, mint a modul főmenüje.
  (Az 576 px alatti, v51-ben bevezetett egysoros görgethető sáv változatlanul megmaradt.)
- Mellékesen pótolva: a `tests/t_design.py` F1/F4 (emelőgépes fejléc-ellenőrzés) nem volt
  frissítve a korábban (v59) bevezetett "Partner cégek" menüponttal - most 11 pontot és 12
  sablont vár, a teljes t_design zöld.

## v59 – 2026-10-06
- BIZTONSÁG + ÚJ FUNKCIÓ: Partner cégek kódos összekapcsolása. A bérbeadás/kihelyezés bérlő-
  választója (Gép adatlap "Kihelyezés bérlőhöz") korábban AZ ÖSSZES rendszerben lévő aktív
  céget név szerint felsorolta - ez önmagában adatszivárgás volt (bármely cég megtudhatta,
  kik mások használják a rendszert). Mostantól csak a kódos meghívással (`/partner-cegek`,
  Admin/Emelőgép ügyintéző jogú) már összekapcsolt partner-cégek választhatók - a mentő
  route-ban (POST /gep/{uuid}/kihelyezes) is kikényszerítve, nem csak a legördülő szűkül.
  A meghívókód (10 karakter, 72 órás, egyszer használható, HMAC-SHA256 lenyomattal tárolva,
  AuditLog-alapú próbálkozás-korláttal) a cégek KÖZÖTT, a rendszeren kívül (telefon, e-mail,
  személyesen) adandó át - a rendszer sosem küldi el automatikusan. A konkrét gép-kihelyezést
  a bérlőnek továbbra is EGYEDILEG kell jóváhagynia (nem változott). Új táblák:
  CegPartnerseg, CegMeghivoKod (partner_ceg_utils.py). Nav-link: "Partner cégek"
  (_fejlec_emelogep.html).

## v58 – 2026-10-06
- OKOSTELEFONOS DESIGN, 7. (LEZÁRÓ) SZELET (belépés / profil finomítás, érintési méretek, tablet, lezáró mérés; terv: `docs/MOBIL_TERV.md` 4.9): az okostelefonos terv megvalósítása ezzel lezárult.
  - **Belépés / profil:** a belépő űrlap e-mail mezője `autocomplete="username"` (+ `autocapitalize="none"`, `spellcheck="false"`), a jelszó `autocomplete="current-password"` - a jelszókezelő és az okostelefon automatikus kitöltése működik. Minden jelszó-mezőnek kötelező az `autocomplete` (a tesztek őrzik); a 2FA-kód mezők `one-time-code` + numerikus billentyűzettel már megvoltak. A modulválasztó, a profil és a belépés 360-430 px-en mérve rendben (0 px túlcsordulás, a lebegő téma-kapcsoló nem takar gombot).
  - **Érintési méretek** (`pointer: coarse`, az asztali egeres kinézet változatlan): a sima `.btn` is legalább 2.5rem (40 px) magas és széles (a Bootstrap alap 38 px; az ikon-gombok sem keskenyebbek), a jelölőnégyzet / rádió 1.4rem, a kapcsoló 2.5em x 1.4em; a fejléc logó-hivatkozásának érintési felülete a `::after`-rel 40 px-esre nő úgy, hogy a fejléc magassága NEM változik.
  - **Tablet (768-1024 px):** újramérve, 0 px túlcsordulás mind a 48 oldalon; a fejléc 113-210 px. Külön tablet-szabály nem kellett (a v51-v57 szabályok < 576 px-re vonatkoznak, a tablet az asztali elrendezést kapja érintési méretekkel).
  - **Lezáró mérés** (48 oldal, 360 / 390 / 430 / 768 / 820 / 1024 px, mintaadattal): 0 px túlcsordulás mindenütt; fejléc: modulok ≤ 193 px, rendszeradmin ≤ 270 px. A részletes táblázat és a nem mért (valódi eszközt igénylő) pontok: `docs/MOBIL_TERV.md` 5.2.
  - Tesztek: `tests/t_design.py` T1-T6 (189 ellenőrzés). Nincs adatbázis-, útvonal- vagy jogosultság-változás; a service worker gyorsítótára (v5) nem érintett.

## v57 – 2026-10-06
- OKOSTELEFONOS DESIGN, 6. SZELET (a többi modul listái és a Rendszeradmin / Beállítások telefonon; terv: `docs/MOBIL_TERV.md` 4.3, 4.7, 4.10; a számozás a v56 közbeékelt kérése miatt tolódott): a széles listák telefonon (< 576 px) kártyák. Asztalon / tableten (≥ 576 px) a táblázatok pixelre változatlanok.
  - **Kártyás listák (18 táblázat):** EBK (projektek, ügyfelek, alvállalkozók, ellenőrzési tételek, vezérlőpult legutóbbi ellenőrzései), VIVÜ (ügyfelek, tételek, vezérlőpult), Tűzvédelem (készülékek teljes listája - rendezés-sávval, telephelyek, vezérlőpult), Saját vizsgálati riport, Rendszeradmin (napló, kitiltások 2 tábla, e-mail sor, VIVÜ-ellenőrzések), Beállítások / Dolgozók és ügyintézők. A kártya: felül a cím (félkövér), alatta az állapot-jelvény, majd "Címke: érték" párok, legalul a 40 px-es műveletgombok. A v54 gép lista mintája általánosítva: cella-szerepek `el-kartya-cim` / `el-kartya-statusz` / `el-kartya-muvelet` + `data-cimke`; a táblázat fejléce kártyán rejtett, csak a rendezhető táblákon (gép lista, tűzoltó készülékek) látszik rendezés-gombok sávjaként.
  - **Marad görgethető** (nincs kártya, mert nem illik rá / ritkán telefonról használt): Felhasználók (11 oszlop), jelszó-házirend, a modálokbeli naplók, tűzvédelmi naplólap, MSZ 16226, használati útmutatók táblái, a kis adatlap-táblák. A vezérlőpultok (KPI-k 2 oszlopban) és a Cégek / Felhasználók űrlapjai mérés után változtatás nélkül megfelelők.
  - **Megvalósítás:** `static/css/emelog.css` (telefonos `@media`), a táblázatok sablonjai (`el-tabla-kartya`, `data-cimke`, szerep-osztályok; a módosítás szkriptes, soronkénti cella-szám ellenőrzéssel), `list.html` (`el-tabla-rendezheto`). Nincs JS-, adatbázis-, útvonal- vagy jogosultság-változás; a service worker gyorsítótára (v5) nem érintett.
  - Tesztek: `tests/t_design.py` S1-S5 (183 ellenőrzés): minden kártyás sor minden cellája címkézett vagy szerepet kapott, soronként 1 cím, a rendezés-sáv csak rendezhető táblán, az élő oldalak kirajzolódnak. Mért (mintaadattal): 0 px túlcsordulás 360 és 390 px-en mind a 48 oldalon. A `tests/t_naplo.py` sor-kereső szabályos kifejezése tűri az új `data-cimke` attribútumot a cellán (a napló viselkedése nem változott).

## v56 – 2026-10-06
- KÖZBEÉKELT KÉRÉS (a megrendelő kérése; nem része az okostelefonos tervnek - annak hátralévő szeletei eggyel tolódnak: v57 Többi modul / Rendszeradmin, v58 Belépés / lezárás): középre igazított menüsorok asztali nézetben + téma-tudatos Select2.
  - **Menüsorok:** a fő menüsor (mind az 5 modul + a rendszeradmin fejlécében) és az emelőgépes Beállítások másodlagos menüsora (a fülek) asztali nézetben is középre igazított; a cím-sor (logó, cím, gombok) változatlan. Telefonon a menüsor eddig is középen volt, a fülsáv ott görgethető és balról indul.
  - **Select2 téma:** a `select2-bootstrap-5-theme` fix világos színeket használt, így sötét módban a kereshető legördülők (géptípus, többes választók a Beállításokban és a Felhasználóknál) fehérek voltak. Most a mező a `.form-select`-tel egyezik, a lenyíló a kártya hátterét, a kereső mező, a kiemelt sor, a többes választó címkéi, a csoport-fejléc, a letiltott állapot és a nyíl / törlő ikon is a témát követi (sötét + világos módban mérve, Playwright-képernyőképekkel). A szabályok `html` előtagot kapnak, mert a téma CSS-e az `emelog.css` után töltődik; ugyanezért a v55 Select2 érintési méretei (40 px) most már valóban érvényesülnek a témával együtt is.
  - Megvalósítás: csak CSS (`static/css/emelog.css`), sablon / JS változás nincs. Tesztek: `tests/t_design.py` R1-R8 (172 ellenőrzés).
  - Nincs adatbázis-, útvonal- vagy jogosultság-változás; a service worker gyorsítótára (v5) nem érintett (a CSS stale-while-revalidate, a közös head változatlan).

## v55 – 2026-10-06
- OKOSTELEFONOS DESIGN, 5. SZELET (űrlapok telefonon; terv: `docs/MOBIL_TERV.md` 4.4): ragadós Mentés-sáv a hosszú űrlapokon, következetes billentyűzet-tippek az összes űrlapon, érintés-barát Select2. Asztalon / tableten (≥ 576 px) a kinézet változatlan.
  - **Ragadós sáv:** az Új gép / Szerkesztés (`index.html`) és a Vizsgálati rögzítő (`vizsgalat.html`) Mentés gombja telefonon az ablak aljához tapad (`.el-urlap-sav`: `position: sticky; bottom: 0`, a kártya háttere, `safe-area` alsó margó), így hosszú görgetés után is kéznél van; az űrlap végén a helyén marad, nem takar mezőt. A rövid űrlapok (EBK / VIVÜ / Tűzvédelem) változatlanok.
  - **Billentyűzet-tippek:** minden `type="number"` mező `inputmode`-ot kapott (`decimal` a törtes lépésű mezőkön: üzemóra, töltettömeg, alapterület; `numeric` az egész számúakon: EBSZ-ciklus, pince-/emelet-szám, licenc-korlátok, SMTP-port, oldalszám stb. - 28 mező); a keresőmezők (`kereses`, `search1-3`) `enterkeyhint="search"` + `autocomplete="off"`; az azonosító-jellegű mezők (gyári / leltári szám, rendszám - nagybetűs kezdéssel -, forgalmi szám, bizonyítvány- / engedély- / jegyzőkönyvszám) `autocomplete="off"`, a gyári / leltári / rendszám / forgalmi szám `spellcheck="false"`. A szabad szöveges mérőszám-mezők (pl. "15 kW") szándékosan alap billentyűzetűek maradtak.
  - **Select2:** érintésen (`pointer: coarse`) a mező, a találati sorok és a keresőmező 2.5rem (40 px), a keresőmező betűje 16 px (nincs iOS-zoom).
  - **Service worker:** `emeloreg-offline-v5` - a precache-elt héjak (mobil csekklista, új gép offline) űrlapmezői változtak; a v4 az `activate`-nél törlődik.
  - Tesztek: `tests/t_design.py` Q1-Q8 + K4 (164 ellenőrzés). Mért: 0 px túlcsordulás 390 px-en mind a 48 felmért oldalon; a ragadós sáv görgetés közben és az űrlap végén is az ablak alján (Playwright-mérés).
  - Nincs adatbázis-, útvonal- vagy jogosultság-változás.

## v54 – 2026-10-06
- OKOSTELEFONOS DESIGN, 4. SZELET (emelőgép lista és adatlap telefonon; terv: `docs/MOBIL_TERV.md` 4.3): a gép lista telefonon (< 576 px) kártyás nézet; az asztali és a tablet (≥ 576 px) lista pixelre változatlan.
  - **Kártya:** minden gép egy kártya: felül a gép neve (a tartozék / bérelt jelzésekkel), alatta a státusz-jelvény, majd a megjelenített oszlopok "Címke: érték" párokban, legalul a sorműveletek sortörő sorban. A sor háttere a státusz szerint (lejárt / kivont / inaktív) a kártyán is megmarad; a Bérelt / Saját "Eredet" és minden további oszlop az oszlopválasztóval (JS, `d-none`) telefonon is ki-be kapcsolható. A fejléc a rendezés-gombok egysoros, vízszintesen görgethető sávja (a rendezés ugyanúgy a `rendez-oszlop` kattintással működik).
  - **Sorműveletek:** a gombok mérete egy változóból jön (`--el-akcio-gomb`): egérrel 28 px (változatlan), érintésnél 2.5rem = 40 px; telefonon nincs sticky Műveletek oszlop, a gombok a kártya alján sortörnek. A kártyán nincs "hover" háttér (érintésnél beragadna).
  - **Adatlap:** mérés után módosítás nem kellett (egyoszlopos, 0 px túlcsordulás, 40 px-es Szerkesztés gomb). A Gépnapló modál fülsora telefonon egysoros görgethető sáv.
  - **Megvalósítás:** általános, újrahasználható `.el-tabla-kartya` osztály a közös CSS-ben (`static/css/emelog.css`, csak a telefonos `@media`-ban; használat: `data-cimke` a cellákon, lásd `docs/DESIGN_RENDSZER.md` 2.17), + `templates/list.html` (osztály, `data-cimke` címkék, `--el-akcio-gomb`, `col-valaszto`). Nincs JS-változás.
  - Tesztek: `tests/t_design.py` P1-P5 (156 ellenőrzés). Mért: 0 px túlcsordulás 390 px-en (lista, Gépnapló és Státusz modál).
  - Nincs adatbázis-, útvonal- vagy jogosultság-változás; a service worker gyorsítótára (v4) nem érintett (a CSS stale-while-revalidate, a közös head változatlan).

## v53 – 2026-10-06
- OKOSTELEFONOS DESIGN, 3. SZELET (fejléc telefonon; terv: `docs/MOBIL_TERV.md` 4.2): telefonon (< 576 px) a közös fejléc MINDEN eleme középre igazított (a megrendelő kérése és választása: "B" változat), mind az 5 modul + a rendszeradmin fejlécében.
  - **Elrendezés:** 1. sor: a logó és az oldal / modul neve egymás mellett, középen (hosszú cím törik); 2. sor: a gombok (kitűző, téma-kapcsoló, felhasználó) középen, külön sorban; alatta a menü középre igazítva és sortörve - minden menüpont látszik, nincs vízszintes görgetés. A felhasználó gomb telefonon csak ikon (a név, a cég és a szerepkör a legördülő fejlécében látszik; akadálymentes `aria-label` a névvel).
  - **Magasság** (390 px): emelőgép / VIVÜ 145 px (eddig 180), EBK / Tűzvédelem 193 px (7-nél több menüpont = 2 menüsor), rendszeradmin 248-270 px (eddig 305-330); 0 px túlcsordulás 360 és 390 px-en. Az asztali és a tablet (≥ 576 px) fejléc változatlan.
  - **Megvalósítás:** csak CSS (`static/css/emelog.css`, a `max-width: 575.98px` szakaszban, "Fejléc (v53)") + az 5 fejléc-részletben (`_fejlec_emelogep/rendszeradmin/ebk/vivu/tuzvedelem.html`) a felhasználó gomb nevének `<span class="el-felhasznalonev">` burkolója és az `aria-label`. A menüpontok telefonon is ikonosak (az aktív pont kék, az oldal címe látszik) - az aktív felirat kipróbálva és elvetve (plusz menüsor).
  - Tesztek: `tests/t_design.py` O1-O5 (151 ellenőrzés).
  - Nincs adatbázis-, útvonal- vagy jogosultság-változás; a service worker gyorsítótára (v4) nem érintett (a fejléc nem szerepel az offline héjakban a felhasználói menüvel).

## v52 – 2026-10-06
- OKOSTELEFONOS DESIGN, 2. SZELET (helyszíni QR-oldalak; terv: `docs/MOBIL_TERV.md` 4.8): a `qr-gepmenu.html` (szakértői / vizsgálói gépmenü) és a `mobil-siker.html` (a napi ellenőrzés után: "Minden rendben / Figyelmeztetés / Gép letiltva") a v49 mintájára a közös designt használja.
  - Közös `_head_kozos.html` (saját head, Bootstrap / Font Awesome link, viewport helyett), közös lábléc és lebegő téma-kapcsoló - a két oldalon eddig nem volt téma-kapcsoló és lábléc. A sötétre kódolt színek (`#212529`, `#2c3034`, `#121212`, `#3d4246`, `text-white`, `text-light`) Bootstrap-tokenekre cserélve, így világos témában is olvashatók; a színátmenetes mobil fejléc-sáv és a státuszszínek (piros / sárga / zöld) megmaradtak.
  - **Hiba javítva:** a `mobil-siker` "Kilépés a profilból" gombja `GET /logout` hivatkozás volt - a GET /logout a v43 óta nem létezik (csak a POST), így a gomb 405-öt adott. Mostantól POST-os `data-action="logout"` gomb (a `common.js` kezeli).
  - A keskeny képernyős (< 576 px) középre igazított oldalakon (belépés, 2FA, modulválasztó, `mobil-siker`) a rögzített lábléc oldalt helyet hagy a lebegő téma-kapcsolónak, hogy ne takarja el a szöveget.
  - A két oldal a service worker előgyorsítótárába nem kerül (nem offline oldalak), ezért a `CACHE_NEV` változatlan (v4).
  - Tesztek: `tests/t_design.py` N1-N5 (143 ellenőrzés); a `KIVETEL` halmazból a két oldal kikerült (az A1-A9 ellenőrzések most rájuk is vonatkoznak), M10 módosítva.
  - Nincs adatbázis-, útvonal- vagy jogosultság-változás.

## v51 – 2026-10-06
- OKOSTELEFONOS DESIGN, 1. SZELET (alap + túlcsordulás-javítás; terv: `docs/MOBIL_TERV.md`): az alkalmazás okostelefonon (360-430 px) sehol nem csúszik oldalra, az érintési célpontok 40 px-esek, a fülsor egysoros, a nagy modálok teljes képernyősek. Az asztali (egeres) kinézet változatlan.
  - **Táblázatok:** a 42 burkoló nélküli `<table>` 24 sablonban `table-responsive` burkolót kapott (Beállítások, EBK, VIVÜ, Tűzvédelem, Rendszeradmin, használati útmutatók, bérleti naplók) - ez szüntette meg a 8 oldal vízszintes túlcsordulását (Rendszeradmin/Cégek +419 px, VIVÜ/Ellenőrzési tételek +154 px, Tűzvédelem/Beállítások +188 px stb.). A nyomtatási sablonok kimaradtak.
  - **Vizsgálati rögzítő** (`vizsgalat.html`, +359 px): a gép nevét tartalmazó badge (Bootstrap alapból `nowrap`) kiszélesítette az oldalt - mostantól törhető (`text-wrap`), a fejléc-sor tördel.
  - **Érintés** (`static/css/emelog.css`, új szakasz "2/c", `@media (pointer: coarse)`): a kis gombok (`.btn-sm`), az űrlapmezők (`.form-control`, `.form-select`) és a legördülő elemek legalább 2.5rem (40 px) magasak - ugyanaz a méret, mint a menügomboké, új méret-token nélkül; a mezők betűje 16 px (az iOS nem közelít rá); a jelölőnégyzetek nagyobbak. Egérrel a v50-es méretek maradnak.
  - **Okostelefon (< 576 px):** a nagy modálok (`modal-xl`, `modal-lg`) teljes képernyősek (a kis megerősítő ablakok nem); a Beállítások-fülek (`.el-fulek`) egysoros, vízszintesen görgethető sáv (a mai ~400 px helyett egy 40 px-es sor), az aktív fület a `common.js` a látótérbe görgeti; a legördülő menü nem lóghat ki a képernyőről.
  - **Viewport / biztonsági sáv:** a közös head `viewport-fit=cover` + `theme-color` meta-t kapott (a `tema.js` a témához igazítja a böngészősáv színét); az `env(safe-area-inset-*)` a láblécben, a lebegő téma-kapcsolóban, a body-ban és a szinkron-jelzőkben (iPhone alsó sáv / ívelt sarkok). A `qr-gepmenu` és a `mobil-siker` oldalon a zoom-tiltás (`user-scalable=no`, `maximum-scale=1.0`) megszűnt - az ujj-nagyítás akadálymentességi okból engedélyezett.
  - **Service worker:** `emeloreg-offline-v4` (a közös head változott; a v3 az `activate`-nél törlődik).
  - **Felmérő eszköz:** `tools/mobil_felmeres.py` (ÚJ, opcionális, Playwright kell hozzá): 360 / 390 / 430 / 820 px-en méri a túlcsordulást, a fejléc magasságát, a kis célpontokat és a táblázat-burkolókat, képernyőképet is ment; nem része a `tests/futtat.py`-nak.
  - Tesztek: `tests/t_design.py` M1-M11 (138 ellenőrzés): minden táblázat burkolóban van, nincs zoom-tiltás, a head / CSS / JS szabályai, az élő oldalak meta-ja.
  - Mérés a szelet után (`tools/mobil_felmeres.py`, 40+ oldal): **0 px túlcsordulás 360 / 390 / 430 / 820 px-en** (előtte 8 oldalon 20-419 px). A fejléc magassága és a lista-sorok még a v53 / v54 feladata.
  - Nincs adatbázis-, útvonal- vagy jogosultság-változás.

## v50 – 2026-10-06
- EGYSÉGES DESIGN, 9. SZELET (táblázatsori / kis gombok): a Bootstrap `.btn-sm` gombok (táblázatsori és kártyán belüli műveleti gombok: szerkesztés, törlés, kulcs, szem, PDF...) mérete egységes lett (leírás: `docs/DESIGN_RENDSZER.md` 2.16).
  - Mérés a korábbi állapotról: a magasság már 31 px volt mindenhol, de az **ikon-only gombok szélessége 30-36 px között változott** (az ikon-glifek eltérő szélessége miatt), az ikon + szöveg gombokban a szöveg máshonnan indult. Mostantól minden `.btn-sm` / `.btn-group-sm > .btn` egyforma magas (2rem, új token: `--el-gomb-kicsi-magassag`), az ikon fix 1.15em széles és 0.875rem méretű (`--el-gomb-kicsi-ikon`), az ikon-only gomb pontosan egyforma négyzet (32x34 px), a tartalom középre igazított (`inline-flex`).
  - **Csak a közös CSS változott** (`static/css/emelog.css`, a menüsor és a lábléc közé új blokk): egyetlen sablon és JS sem módosult, nincs inline méret-felülírás (ezt a teszt őrzi). A fejléc / menüsor / eszköztár gombok (2.5rem) és az alap méretű fő gombok változatlanok.
  - Tesztek: `tests/t_design.py` L1-L3 (127 ellenőrzés): tokenek, a szabály tartalma, nincs `.btn-sm` inline méret-felülírás a sablonokban.
  - Ezzel a 42-50. szeletekből álló egységes design-sorozat lezárult.

## v49 – 2026-10-06
- EGYSÉGES DESIGN, 8. SZELET (gépkereső + a service worker által kiszolgált oldalak): a gépkereső (`/gep-kereses`) a közös emelőgépes fejlécet kapta, a három service worker-es oldal pedig a közös head-et, láblécet és téma-kapcsolót (leírás: `docs/DESIGN_RENDSZER.md` 2.15).
  - **Gépkereső** (`templates/gep-kereses.html`): eddig teljesen eltérő mobil-kinézet volt, fejléc nélkül, visszanyíllal. Mostantól `{% set eg_aktiv = 'kereso' %}` + a közös `_fejlec_emelogep.html` (menüsor, kitűző, téma-kapcsoló, felhasználói menü, POST-os kijelentkezés), a keresőkártya szabványos Bootstrap kártya (téma-követő, világos és sötét módban is). A JS-hez kellő azonosítók (`keresoForm`, `azonositoInput`, `eredmenyTerulet`, `halozatiAllapotJelzo`, `iosFigyelmeztetesPanel`) változatlanok. A net nélküli héj (`/gep-kereses-shell`, user nélkül) ugyanezt a fejlécet a felhasználói menü nélkül mutatja.
  - **Mobil csekklista és Új gép (offline)** (`mobil-csekklista.html`, `uj-gep-offline.html`): a saját `<head>` helyett a közös `_head_kozos.html`, a lap alján közös lábléc + lebegő téma-kapcsoló (fejléc itt nincs: a színátmenetes mobil fejléc-sáv szándékosan marad, a helyszíni használathoz). A sötétre kódolt színek (`#212529`, `#2c3034`, `bg-dark`, `text-white`...) Bootstrap-tokenekre cserélve, így a két oldal világos témában is olvasható; a JS-ben generált mezők (`mobil-csekklista.js`, `uj-gep-offline.js`) is.
  - **Service worker** (`routers/offline_sync.py`): a gyorsítótár neve `emeloreg-offline-v3` (a régi `v2` az `activate`-nél törlődik); az előre gyorsítótárazott lista bővült a közös stílussal / szkriptekkel (`emelog.css`, `jetbrains-mono.css` + betűtípusok, `tema.js`, `common.js`, bootstrap.bundle) és a 3 oldal JS-ével, különben net nélkül a héj stílus nélkül jelenne meg. A statikus fájlok kiszolgálása "cache-first" helyett "stale-while-revalidate" (azonnal a cache, a háttérben frissítés): a régi megoldásnál egy módosított `emelog.css` a verziócseréig sosem frissült volna a telefonokon.
  - Tesztek: `tests/t_design.py` K1-K8 (124 ellenőrzés); a `KIVETEL` halmaz a 3 oldal nélkül.
  - Nincs adatbázis-, útvonal- vagy jogosultság-változás. A telefonok az új service workert a következő online megnyitáskor töltik le (`skipWaiting` + `clients.claim`).

## v48 – 2026-10-06
- EGYSÉGES DESIGN, 7. SZELET (emelőgépes Beállítások oldal): a Beállítások oldal (`/beallitasok`) fejléce a többi emelőgépes oldaléval azonos közös fejléc, a fülei pedig a főmenü gombjainak kinézetét kapták (leírás: `docs/DESIGN_RENDSZER.md` 2.14).
  - **Fejléc:** `templates/beallitasok.html` a régi saját `<header>`-je helyett a közös `_fejlec_emelogep.html`-t hívja (`eg_aktiv = 'beallitasok'`, `eg_ikon = 'fa-cogs'`, `eg_cim = 'Beállítások'`) - így megvan a menüsor (a Beállítások pont aktív), a kitűző, a téma-kapcsoló és a felhasználói legördülő, a kijelentkezés pedig POST (`data-action="logout"`). Eddig az oldalra lépve "visszaváltott" a régi fejlécre.
  - **Fülek:** a Bootstrap `nav-tabs` helyett `ul.nav.el-fulek` (ÚJ osztály az `static/css/emelog.css`-ben): minden fül egyforma magas (`--el-gomb-magassag`), ikon + szöveg, a fül kerete/színe a főmenü gombjaié (szürke körvonal, hover: kitöltött), az aktív fül kitöltött kék (mint a főmenü aktív pontja). A fülek egyedi színes szövege (`text-info`, `text-danger` stb.) megszűnt - egységesen szürkék, az ikon a megkülönböztető. A fülek működése (Bootstrap tab, `data-bs-toggle`/`data-bs-target`, azonosítók, `#tab-...` horgonyok, `beallitasok.js`) VÁLTOZATLAN; a régi inline `.nav-tabs .nav-link` stílusszabályok törölve.
  - Tesztek: `tests/t_design.py` J1-J7 (113 ellenőrzés): a sablon a közös fejlécet hívja, nincs saját keret / `nav-tabs` / `logoutUser`, a fülek megtartják a tab-jellemzőket, az `.el-fulek` CSS megvan, élő `/beallitasok` oldal (azonos menüsor, aktív pont, fülsor).
  - Nincs adatbázis-, útvonal- vagy jogosultság-változás.

## v47 – 2026-10-06
- EGYSÉGES DESIGN, 6. SZELET (tűzvédelmi fejléc): a Tűzvédelem modul fejléce és menüsora MINDEN tűzvédelmi oldalon ugyanaz, egyetlen közös sablonból (`templates/_fejlec_tuzvedelem.html` - ÚJ; leírás: `docs/DESIGN_RENDSZER.md` 2.13).
  - **9 oldal** hívja (`{% set tuz_aktiv %}` + `{% include %}`): Vezérlőpult, Készüléklista, Beállítások és áttekintés, Telephelyek és épületek, Készenléti hely (új / szerkesztés), Új készülék, Készülék adatlap, Üzemeltetési napló, Excel készülékimport. Eddig 3 oldalon volt fejléc; a Készüléklistán, a Telephelyeken, az űrlapokon, az Adatlapon és a Naplón csak egy magányos téma-gomb (és "Vissza" nyíl) volt.
  - **Javított hiányosságok:** a kijelentkezés a fejléces oldalakon `GET /logout` hivatkozás volt (és a Beállítások / Import oldalon nem is volt), felhasználói menü (Profilom, cég, szerepkör) sehol - mostantól minden oldalon van, a kijelentkezés POST (`data-action="logout"`).
  - **Menüsor:** Vezérlőpult, Készüléklista, Beállítások és áttekintés (mindenkinek); Telephelyek és épületek, Új készenléti hely, Új készülék (aktív cégnél, nem csak-olvasható fióknak - a korábbi szabály); Excel készülékimport (Admin). Legördülő: cég, szerepkör, Profilom, Modul váltása (ha több modul), Kijelentkezés. Kitűző, téma-kapcsoló, gombméret ugyanaz, mint a többi közös fejlécnél.
  - Az oldalak saját címsora és oldal-specifikus gombja (napló "PDF nyomtatás") maradt; a "Vissza" nyilak a menü miatt kikerültek. A hiányzó `bootstrap.bundle` / `common.js` betöltést 7 oldal pótolta.
- Tesztek: `t_design` bővítve (I1-I10, összesen 106 ellenőrzés): sablon-szerkezet, a 7 menüpont, mind a 7 élő tűzvédelmi oldal azonos menüsorral és a saját aktív ponttal, szerepkörönkénti láthatóság (Admin, gépkezelő, csak-olvasó), nincs `GET /logout`. Vizuális ellenőrzés Chromiumban.
- Dokumentáció: `docs/DESIGN_RENDSZER.md` (2.13, 4/f, 5), `README.md`, `tests/README.md`.

## v46 – 2026-10-06
- EGYSÉGES DESIGN, 5. SZELET (VIVÜ fejléc): a VIVÜ modul fejléce és menüsora MINDEN VIVÜ oldalon ugyanaz, egyetlen közös sablonból (`templates/_fejlec_vivu.html` - ÚJ; leírás: `docs/DESIGN_RENDSZER.md` 2.12; felépítése az EBK-fejlécével azonos).
  - **8 oldal** hívja (`{% set vivu_aktiv %}` + `{% include %}`): Vezérlőpult, Megrendelők, Megrendelő adatlap, Új ellenőrzés, Ellenőrzés részletei, Ellenőrzési tételek, Céges beállítások, Használati útmutató. Eddig 3 oldalon volt fejléc, az 5 másikon a tartalom tetején saját, eltérő gombsor (téma-kapcsoló, legördülő, kijelentkezés, Megrendelők, súgó) - ezek a keretelemek törlődtek; az oldal-specifikus gombok (a megrendelő adatlap saját "Új ellenőrzés" legördülője, Nyomtatás, Vissza a megrendelőhöz) és az oldal saját címsora maradt.
  - **Menüsor** (jogosultság szerint): Vezérlőpult, Megrendelők (mindenkinek); Ellenőrzési tételek, Céges beállítások (Admin); Használati útmutató (ha a cégnek engedélyezett a súgó). A VIVÜ ügyintéző és a Megtekintő csak a Vezérlőpultot, a Megrendelőket és az útmutatót látja. Felhasználói legördülő: cég, szerepkör, Profilom, Modul váltása (ha több modul), Kijelentkezés. Kitűző, téma-kapcsoló, gombméret ugyanaz, mint a többi közös fejlécnél.
  - A kijelentkezés itt is `data-action="logout"` (POST); a `vivu_hasznalati_utmutato` pótolta a hiányzó `bootstrap.bundle` betöltést.
- Tesztek: `t_design` bővítve (H1-H10, összesen 96 ellenőrzés): sablon-szerkezet, az 5 menüpont, a saját "Új ellenőrzés" legördülő megmaradása, mind az 5 élő VIVÜ oldal azonos menüsorral és a saját aktív ponttal, szerepkörönkénti láthatóság (Admin, VIVÜ ügyintéző, Megtekintő). Vizuális ellenőrzés Chromiumban, sötét és világos módban.
- Dokumentáció: `docs/DESIGN_RENDSZER.md` (2.12, 4/e, 5), `README.md`, `tests/README.md`.

## v45 – 2026-10-06
- EGYSÉGES DESIGN, 4. SZELET (EBK fejléc): az EBK modul fejléce és menüsora MINDEN EBK oldalon ugyanaz, egyetlen közös sablonból (`templates/_fejlec_ebk.html` - ÚJ; leírás: `docs/DESIGN_RENDSZER.md` 2.11).
  - **13 oldal** hívja (`{% set ebk_aktiv %}` + `{% include %}`): Vezérlőpult, Projektek, Új projekt, Projekt adatlap, Új ellenőrzés, Ellenőrzés részletei, Ügyfelek, Területek, Alvállalkozók, Tevékenységek, Ellenőrzési tételek, Céges beállítások, Használati útmutató. Eddig csak 3 oldalon volt fejléc; a másik 10 oldal a tartalom tetején saját, oldalanként kissé eltérő gombsort használt (téma-kapcsoló, legördülő, kijelentkezés, "Projektek", súgó) - ezek a keretelemek törlődtek, az oldal-specifikus gombok (Vissza a céges beállításokhoz, Nyomtatás, Új ellenőrzés, Vissza a projekthez) és az oldal saját címsora (súgó-buborékkal) maradt.
  - **Menüsor** (jogosultság szerint): Vezérlőpult, Projektek (mindenkinek), Új projekt, Ügyfelek, Területek, Alvállalkozók, Tevékenységek, Ellenőrzési tételek, Céges beállítások (Admin; az Új projekt csak aktív cégnél, nem csak-olvasható fióknak), Használati útmutató (ha a cégnek engedélyezett a súgó). Az EBK koordinátor és a Megtekintő csak a Vezérlőpultot, a Projekteket és az útmutatót látja. Felhasználói legördülő: cég, szerepkör, Profilom, Modul váltása (ha több modul), Kijelentkezés. Kitűző, téma-kapcsoló, gombméret ugyanaz, mint a rendszeradmin / emelőgépes fejlécnél.
  - **Közös adat-globál:** a v44 `emelogep_fejlec_adat` általánosítva `modul_fejlec_adat(request, user)`-ra (az EBK, és a következő szeletekben a VIVÜ / tűzvédelem is ezt használja; a régi név alias marad). A fejléc a saját adatait számolja, az útvonalakhoz nem kellett nyúlni.
  - A kijelentkezés itt is `data-action="logout"` (POST); az `ebk_hasznalati_utmutato` pótolta a hiányzó `bootstrap.bundle` betöltést.
- Tesztek: `t_design` bővítve (G1-G11, összesen 85 ellenőrzés): sablon-szerkezet, a 10 menüpont, a globál alias, mind a 10 élő EBK oldal azonos menüsorral és a saját aktív ponttal, szerepkörönkénti láthatóság (Admin, EBK koordinátor, Megtekintő, csak-olvasó Admin), az oldal-specifikus gombok megmaradása. Vizuális ellenőrzés Chromiumban.
- Dokumentáció: `docs/DESIGN_RENDSZER.md` (2.11, 4/d, 5), `README.md`, `tests/README.md`.

## v44 – 2026-10-06
- EGYSÉGES DESIGN, 3. SZELET (emelőgépes fejléc): az Emelőgép modul fejléce és menüsora MINDEN emelőgépes oldalon ugyanaz, egyetlen közös sablonból (`templates/_fejlec_emelogep.html` - ÚJ; leírás: `docs/DESIGN_RENDSZER.md` 2.10).
  - **11 oldal** hívja (`{% set eg_aktiv / eg_ikon / eg_cim %}` + `{% include %}`): Vezérlőpult, Lista, Gépfelvitel / szerkesztés, Gép adatlap, Vizsgálati rögzítő, Üzemviteli dokumentum (MSZ 16226), Excel gépimport, AI adattábla-felismerés, Saját vizsgálati riport, Szakértői ütemező, Használati útmutató. Eddig mindegyik saját, eltérő fejlécet használt (pl. a Gép adatlapon csak "Lista / Szerkesztés" volt, a vizsgálati riporton és az útmutatón hiányzott a kijelentkezés / téma-kapcsoló / modulváltó, két oldal `GET /logout` hivatkozást használt).
  - **Menüsor** (jogosultság szerint): Vezérlőpult, Új gép, AI beolvasás, Lista, Gépkereső, Excel gépimport (rendszeradmin), Saját vizsgálataim (szakértő/vizsgáló), Szakértői ütemező (szakértő), Beállítások (Admin), Használati útmutató (ha a cégnek engedélyezett). A felhasználói legördülőben: cég, szerepkör, Profilom, Modul váltása (ha több modulja van), Kijelentkezés. Az aktív pont kitöltött; a menüben nem szereplő al-oldalak (adatlap, vizsgálat, üzemviteli dokumentum, szerkesztés) a Lista pontot jelölik. Kitűző, téma-kapcsoló, gombméret és a 1400 px alatti ikon-nézet ugyanaz, mint a rendszeradmin fejlécnél.
  - **A fejléc adatait egy Jinja-globál adja** (`templates_env.py`: `emelogep_fejlec_adat(request, user)`: aktív cég, aktív-e a cég, több modul, súgó, AI, rendszeradmin): az útvonalaknak nem kell átadniuk (eddig mindegyik útvonal maga állította össze, ahol valamelyik kulcs hiányzott, a gomb csendben eltűnt). Hiba esetén biztonságos alapértékeket ad és naplóz - a fejléc nem törheti el az oldalt.
  - **Kijelentkezés:** ezeken az oldalakon is `data-action="logout"` (POST, `common.js`); az inline `onclick` és a `GET /logout` hivatkozások megszűntek. A hiányzó `bootstrap.bundle` / `common.js` betöltését a Gép adatlap, a Saját vizsgálati riport, a Szakértői ütemező és a Használati útmutató pótolta.
  - Oldal-specifikus gomb (Gép adatlap "Szerkesztés") a fejléc alatti `.el-oldal-muveletek` sávba került.
  - Változatlan: a Profilom / Beállítások / Értesítéseim / Levél-feliratkozás / Jelszó-házirend oldalak, az EBK / VIVÜ / tűzvédelem modulok fejléce, a táblázatsori gombméretek (későbbi szelet).
- Tesztek: `t_design` bővítve (F1-F24, összesen 73 ellenőrzés): sablon-szerkezet, a Jinja-globál, mind a 9 élő emelőgépes oldal azonos menüsorral, szerepkörönkénti láthatóság (ügyintéző, szakértő, gépkezelő, csak-olvasó, rendszeradmin, cég-Admin), súgó/AI kapcsolók, a Modul váltása csak több modulnál. Vizuális ellenőrzés Chromiumban.
- Dokumentáció: `docs/DESIGN_RENDSZER.md` (2.10, 4/c, 5), `README.md`, `tests/README.md`.

## v43 – 2026-10-06
- EGYSÉGES DESIGN, 2. SZELET (rendszeradmin fejléc): a rendszeradmin dashboard fejléce és menüsora MINDEN rendszeradmin oldalon ugyanaz, egyetlen közös sablonból (`templates/_fejlec_rendszeradmin.html` - ÚJ; leírás és használat: `docs/DESIGN_RENDSZER.md` 2.9).
  - **Közös fejléc + menüsor:** logó, cím + verzió-jelvény, kitűző, téma-kapcsoló, felhasználói menü (Profilom, Modulválasztó, Kijelentkezés), alatta a 12 menüpont (Áttekintés, Cégek, Felhasználók, Dokumentum import, Gépadat export, VIVÜ karbantartás, E-mail, Tiltások, 2FA, Tisztítás, Napló, Rendszerinfo); az aktív pont kitöltött. Mind a 14 rendszeradmin oldal ezt hívja (`{% set ra_aktiv / ra_ikon / ra_cim %}` + `{% include %}`) - eddig mindegyik saját, eltérő fejlécet (és a rendszeradmin aloldalak lebegő téma-kapcsolót) használt. Új menüpont egyetlen helyen vehető fel.
  - **Kitűző (fejléc-rögzítés):** alapból a fejléc az oldal tartalmával együtt mozog; a fejlécben lévő kitűző ikonnal rögzíthető (görgetéskor fent marad). A választás megmarad (böngészőben, minden oldalon).
  - **Egységes gombméret:** a menüsor és az oldal-művelet sáv (`.el-oldal-muveletek`: "Új cég", "CSV-export" stb.) gombjai egyforma magasak/ikonméretűek (`--el-gomb-magassag`, `--el-gomb-ikon`); 1400 px alatt a menüben csak ikonok (a `title` marad).
  - **Technika:** nincs inline JavaScript - a kijelentkezés a `common.js` új `data-action="logout"` kezelője; a verzió-jelvény az új `verzio_adat()` Jinja-globálból jön (a CHANGELOG tetejéről, módosítási idő szerint gyorsítótárazva; hiba esetén üres). A jogosultságot továbbra is az útvonalak ellenőrzik (a fejléc csak megjelenítés).
  - Az emelőgépes (v44) és a többi modul fejléce változatlan.
- Tesztek: `t_design` bővítve (E1-E11, összesen 49 ellenőrzés): a 14 oldal a közös fejlécet hívja, a menü-kulcsok, az aktív jelölés, a kitűző/kapcsoló pontosan egyszer, nincs inline script / lebegő kapcsoló, a kijelentkezés-kezelő, a verzió-globál, a cég-Admin nem éri el az oldalakat. Vizuális ellenőrzés Chromiumban, sötét és világos módban.
- Dokumentáció: `docs/DESIGN_RENDSZER.md` (2.9, 4/b, 5), `README.md`, `tests/README.md`.

## v42 – 2026-10-06
- EGYSÉGES DESIGN, 1. SZELET (alap): közös `<head>`, közös lábléc, közös téma-kapcsoló és közös stílus (részletek és terv: `docs/DESIGN_RENDSZER.md`). A következő szeletek: v43 rendszeradmin fejléc, v44 emelőgép fejléc.
  - **Közös `<head>`** (`templates/_head_kozos.html` - ÚJ): a Bootstrap / Font Awesome / JetBrains Mono / meta sorok 70 sablonban kézzel voltak másolva, mostantól egyetlen `{% include %}`. Ide kerül az új `static/css/emelog.css` és `static/js/tema.js` is.
  - **Közös lábléc** (`templates/_lablec.html` - ÚJ): MINDEN app-oldalon ugyanaz (eddig 6 oldalon volt kézzel másolva, ~70-en hiányzott): `Defensys Hungária Kft. © <év> - EmeLOG ... v<futó verzió>`. A verzió a `CHANGELOG.md` tetejéről jön (`templates_env.py`: `lablec_verzio()`, `aktualis_ev()`; módosítási idő szerint gyorsítótárazva, hiba esetén üres - a lábléc nem törheti el az oldalt). Rövid oldalon is az ablak alján van; nyomtatáskor rejtett.
  - **Világos/sötét téma-kapcsoló MINDEN oldalon:** a téma-kezelés egyetlen helyre, a `static/js/tema.js`-be került (a `<head>`-ben szinkron töltődik: nincs rossz témájú "villanás"; a `localStorage` `theme` kulcs változatlan). Eddig a `common.js` végezte, de az 21 oldalra nem töltött be, a rendszeradmin oldalak egyikén nem volt kapcsoló, a rendszeradmin dashboard fixen sötét volt. A fejléc nélküli oldalak (rendszeradmin aloldalak, 2FA, modulválasztó, aktiválás, gép adatlap ...) lebegő kapcsolót kaptak (`_tema_lebego.html`), a fejléces oldalakon a fejléc kapcsolója marad (egy oldalon pontosan egy `#themeToggle`). A téma-kód a `common.js`-ből kikerült (két helyen kezelve kétszer váltana).
  - **Egységes sötét kinézet:** a Vezérlőpult sötét palettája (`#0a0e16` háttér, `#121a26` kártya, JetBrains Mono címkék) a közös `emelog.css`-be került, és a Bootstrap sötét változóit írja át - ezért minden oldal kártyái, modáljai, legördülői, űrlapmezői egyformán követik. A rendszeradmin dashboard már nem fix sötét (a kapcsolót is követi). Világosra kódolt `table-light` / `bg-light` / `bg-white` sötét módban nem marad fehér sáv (kivéve a `text-dark` / `badge` címkéket).
  - **Logó:** az app-oldalak logója (36 kép) `el-logo` osztályt kapott - világos módban a `tema.js` a fekete logóra cseréli (eddig csak ~20 oldalon, az `id="mainLogo"`-val működött, máshol fehér logó volt fehér háttéren).
  - **Design-tokenek / méretek:** `--el-gomb-magassag` (2.5 rem), `--el-gomb-ikon` (1 rem), `--el-fejlec-logo` (100 px) és az `.el-fejlec`, `.el-eszkozsor`, `.el-lablec`, `.el-tema-lebego` osztályok. A fejléc alapból az oldallal együtt mozog; a `data-fejlec-rogzitett="1"` (kitűző, `#fejlecRogzit`; a `tema.js` kezeli, a `localStorage` `fejlec_rogzitett` kulcsban jegyzi meg) rögzíti - a gomb a v43/v44 fejlécével jelenik meg.
  - Szándékosan kimaradt: a nyomtatási sablonok, a nyilvános marketing-oldal és a service worker által gyorsítótárazott offline oldalak (mobil-csekklista, uj-gep-offline, gep-kereses), valamint a QR/mobil/publikus oldalak (l. `docs/DESIGN_RENDSZER.md` 3.).
- Tesztek: új `t_design` (~45 ellenőrzés: statikus sablon-ellenőrzések mind a 70 oldalon, a közös CSS/JS tartalma, a Jinja-globálisok, élő oldalak). Vizuális ellenőrzés valódi böngészőben (Chromium), sötét és világos módban.
- Dokumentáció: `docs/DESIGN_RENDSZER.md` (ÚJ), `README.md`, `tests/README.md`.

## v41 – 2026-10-06
- ÁTALAKÍTÁS (Beállítások): a v38-ban bevezetett egyesített **„E-mail riportok és jelszó”** fül (`#tab-emailjelszo`) **két külön fülre** bomlott: **„E-mail riportok”** (`#tab-email`) és **„Jelszó-házirend”** (`#tab-jelszo-hazirend`).
  - **„E-mail riportok” fül:** a cég Automatikus E-mail Riportok kártyája (bal oszlop) mellett (jobb oszlop) a **bejelentkezett felhasználó teljes levelezési beállítása**: **„Szabadságon vagyok”** és **„Értesítéseim”** - a Profilom oldallal azonos kártyák, ugyanabból a közös sablonrészletből (`templates/_szabadsag_kartya.html` - ÚJ, a profil.html-ből kiemelve; `_ertesitesek_urlap.html`). Mentés után a felhasználó a fülön marad (`/beallitasok?uzenet=<kód>#tab-email`, hiba esetén `?hiba=<kód>`).
  - **„Jelszó-házirend” fül:** a jelszóra vonatkozó házirend **teljes űrlapja azonnal ott van** (nincs külön megnyitandó oldal / link): minden jelszó-házirend beállítás, erősség-figyelmeztetés, „ki mikor jár le” táblázat. A tartalom közös sablonrészlet (`templates/_jelszo_hazirend_tartalom.html` - ÚJ; egyetlen `jh` szótár bemenettel), amit az önálló `/jelszo-hazirend` oldal is használ (az továbbra is működik). Mentés / „Erősség ellenőrzése” / hibás érték után a Beállítások „Jelszó-házirend” füle rajzolódik újra (a felhasználó nem kerül ki a Beállításokból).
  - **Technika:** a rejtett `vissza=beallitasok` mező **fehérlistás** (más érték → a régi átirányítás; nincs open redirect). A Beállítások kontextusát összeállító kód a `routers/settings.py` `beallitasok_valasz()` függvénye (a `GET /beallitasok` ezt hívja; a házirend-útvonal késői importtal hívja vissza hibával / előnézettel). A flash-szövegek **előre ismert kódokból** jönnek (`FLASH_OK` / `FLASH_HIBA`), az URL-ből szabad szöveg soha nem jelenik meg. Az `uzenet` / `hiba` / `n` paramétereket a `static/js/pages/beallitasok.js` betöltés után eltávolítja (F5-re nem tér vissza a sáv). A „Levél-feliratkozási szabályok” és a házirend oldal „Beállítások” gombja a megfelelő fülre vezet vissza (`#tab-email` / `#tab-jelszo-hazirend`).
- ELLENŐRZÉS / JAVÍTÁS: a v38 „Jogszabályok (EBSZ)” → **„Szabályok”** fül átnevezése a Beállításokon és a hozzá tartozó dokumentáció (`docs/FELIRATKOZASOK.md`, `docs/JELSZO_HAZIREND.md`) a v41 csomagban újra, ellenőrzötten (md5) kerül ki.
- Tesztek: `t_jelszo` B6/B6a/B6b átírva az új két fülre (+B6c/B6d), új C14-C22 (a Beállítások fülről jövő mentés / ellenőrzés / hiba, fehérlista, csak megtekintési Admin, önálló oldal); `t_profil` új G1-G13 (E-mail riportok fül: kártyák, átirányítások, flash-kódok, cross-site 403, közös sablon nincs duplikálva).
- Dokumentáció: `docs/JELSZO_HAZIREND.md` (3/a), `docs/FELIRATKOZASOK.md`, `docs/PROFIL_ES_SZABADSAG.md` (1/a), `tests/README.md`.

## v40 – 2026-10-06
- JAVÍTÁS (`security.py`): a munkamenet-token (és a 2FA átmeneti token) "iat" (kiállítás ideje) mezője mostantól MIKROSZEKUNDUM-PONTOS (tört szám, RFC 7519 NumericDate). Eddig a PyJWT az `iat`-ot egész másodpercre csonkolta, a `users.jelszo_valtozott_at` viszont mikroszekundumos,
  ezért a jelszóváltás (vagy a 2FA-visszaállítás) másodpercében kiadott ÚJ token is "régebbinek" látszott, és a JWT-visszavonás tévesen érvénytelenítette (a felhasználót visszadobta a bejelentkezéshez). Emberi sebességnél ez alig fordult elő, de szkriptelt / gyors folyamatnál igen.
  A visszavonás szabálya változatlan és most pontos: a jelszóváltás UTÁN kiadott token érvényes, az ELŐTT kiadott érvénytelen (akkor is, ha ugyanabban a másodpercben), az `iat` nélküli token elutasított. A már kiadott (egész másodperces `iat`-os) tokenek érvényesek maradnak.
- Tesztek: új `t_token_iat` (7 ellenőrzés; a régi kódon 5 bukik). A véletlenszerűen (kb. 9 futásból 1) elbukó `t_mfa5` oka ez volt - 25 egymás utáni futás hiba nélkül; a tesztekben korábban beépített kerülőmegoldások (`t_jelszo`: a jelszócsere visszadátumozása, `t_mfa2`: 1,1 mp várakozás) megszűntek.
  NINCS új oszlop / migráció; a szervert újra kell indítani. Módosult: `security.py`, `tests/t_jelszo.py`, `tests/t_mfa2.py`, `tests/futtat.py`, `tests/README.md`, `docs/KETLEPCSOS_HITELESITES.md`.

## v39 – 2026-10-06
- MÓDOSÍTÁS (`docs/RENDSZERNAPLO.md`): a rendszeradmin dashboard "Rendszernapló" kártyája mostantól CSAK A RENDSZERADMINRA VONATKOZÓ eseményeket mutatja (az utolsó 15-öt; a kártya címe: "Rendszernapló - rendszeradmin események"): azokat, amiket rendszeradmin-fiók
  (Admin + 1-es cég) hajtott végre (akármelyik cégnél), VAGY amelyek az 1-es (rendszeradmin) céget és annak gépeit érintik. Más cégek felhasználóinak eseményei, a végrehajtó nélküli rendszer-események és az 1-es cég nem Admin felhasználójának más cégnél végzett eseményei nem látszanak a kártyán.
  A napló menüpont (`/rendszeradmin/naplo`) és a CSV-export VÁLTOZATLAN: minden cég minden eseményét mutatja, a cégre / felhasználóra / kategóriára / dátumra / szövegre szűrhető megoldás megmaradt (a kártyán lévő cég- és felhasználó-nevek ide szűrnek; a kártya alján a "Teljes napló" hivatkozás).
- Működés: `rendszernaplo_utils.szurt_lekerdezes(..., csak_rendszeradmin=False)` új paraméter; `legutobbi()` alapból `csak_rendszeradmin=True`. NINCS új oszlop / migráció. Módosult: `rendszernaplo_utils.py`, `templates/rendszeradmin_dashboard.html`. Tesztek: `t_naplo` új "DR" csoport + átírt "H" csoport (~117 ellenőrzés).

## v38 – 2026-10-06
- ÁTRENDEZÉS (Beállítások oldal, csak a felület; működés, útvonalak, adatok változatlanok): az "Automatikus E-mail Riportok" kártya (riport gyakorisága, azonnali e-mail sikertelen vizsgálatról, link a levél-feliratkozási szabályokhoz) és a "Jelszó-házirend (opcionális)" kártya
  a "Jogszabályok (EBSZ)" fülről átkerült egy új, külön "E-mail riportok és jelszó" fülre (`#tab-emailjelszo`). A "Jogszabályok (EBSZ)" fül új neve: **"Szabályok"** (azonosítója, `#tab-szabalyok`, változatlan; a Beállítások / Szabályok fülre mutat az üzemóra-eltérési figyelmeztetés szövege is). A "Szabályok" fülön a jogszabályi / vizsgálati beállítások maradtak (EÜI fővizsgálati jogkör, dátumvédelem, vizsgálati dátumok kötelezősége, üzemóra-eltérés).
  A házirend és a feliratkozási szabályok oldalának "Beállítások" gombja ugyanerre a fülre vezet vissza (`/beallitasok#tab-emailjelszo`; az oldal a fület amúgy is megjegyzi). Dokumentáció: `docs/JELSZO_HAZIREND.md`, `docs/FELIRATKOZASOK.md` a menüutakkal frissítve.
  Módosult: `templates/beallitasok.html`, `templates/jelszo_hazirend.html`, `templates/ertesitesi_szabalyok.html`. NINCS új oszlop / migráció. Tesztek: `t_jelszo` +2 ellenőrzés (B6a, B6b).

## v37 – 2026-10-06
- ÚJ (`docs/RENDSZERNAPLO.md`): RENDSZERNAPLÓ a rendszeradminnak. (1) A rendszeradmin áttekintőn új, teljes szélességű KÁRTYA ("Rendszernapló - utolsó események"): az utolsó 15 esemény minden cégből (idő, cég, végrehajtó, kategória, esemény + új érték);
  a kártya a többihez hasonlóan elrejthető (kulcs: `naplo`), és hibatűrő (ha nem áll össze, a dashboard többi része működik). A fejléc ikonsorában is új napló-ikon. (2) A kártya a TELJES NAPLÓRA visz (`/rendszeradmin/naplo`): az `audit_logs` összes eseménye
  (belépések, fiók-/jogosultsági, biztonsági, levelezési, cég-szintű események ÉS a gépek adatváltozásai), a legfrissebb elöl, 50 soros lapokkal. SZŰRŐK (együtt is): CÉG (a gép-események cége a gépből jön: `COALESCE(audit.company_id, machine.company_id)`;
  "cég nélküli események" is), FELHASZNÁLÓ (az esemény VÉGREHAJTÓJA; "Rendszer" = nincs végrehajtó), KATEGÓRIA (belépés / biztonság / fiók / levelezés / cég / gép / egyéb - az eseménytípus kezdete alapján, kizárják egymást), DÁTUM-INTERVALLUM
  (helyi napok, bezárólag, nyári/téli időszámítással is helyes), SZABAD SZÖVEGES KERESÉS (esemény, régi/új érték; kis/nagybetű-független; a `%`, `_`, `\` szó szerinti). A lapozás megőrzi a szűrőket; az érvénytelen szűrőérték figyelmeztetés, nem hibaoldal.
  (3) CSV-EXPORT a szűrt találatokról (`/rendszeradmin/naplo/export`; legfeljebb 5000 sor, UTF-8 BOM, pontosvesszős, CSV-injekció elleni aposztróf a `=`, `+`, `-`, `@`, tab kezdetű celláknál, `no-store`).
- Biztonság / működés: csak a rendszeradminisztrátor éri el (más a modulválasztóra / bejelentkezésre irányít); mindkét útvonal GET és CSAK OLVAS (nem ír naplót); a megjelenített értékek (akár támadó által beírt szöveg) kizárólag a sablon automatikus escape-elésén át kerülnek ki.
  Rendezés `id` szerint (indexelt, az időrendet követi). A kategória-szűrő SQL-je kis/nagybetű-érzékeny (`substr = prefix`), hogy egyezzen a megjelenítés python-os besorolásával.
- NINCS új oszlop / tábla / migráció. Új fájlok: `rendszernaplo_utils.py`, `routers/rendszernaplo.py`, `templates/rendszeradmin_naplo.html`; módosult: `main.py`, `ra_dashboard_utils.py`, `routers/rendszeradmin_dashboard.py`, `templates/rendszeradmin_dashboard.html`.
  Tesztek: új `t_naplo` (~109 ellenőrzés: jogosultság, besorolás python/SQL egyezés, cég/felhasználó/dátum/keresés/kategória szűrők, lapozás, kártya, CSV, érvénytelen értékek, GET csak olvas).
  Teszt-javítás: a `t_ra_dashboard` A16/A20 ellenőrzése ritkán véletlenszerűen elbukott (a modul importálásakor induló ütemező a perchatárnál még a `shutdown()` előtt életjelet írhatott) - a teszt most az A-csoport előtt törli az esetleges valódi életjelet.

## v36 – 2026-10-06
- ÚJ (`docs/JELSZO_HAZIREND.md`): JELSZÓ-HÁZIREND a cégadminnak (Beállítások → "Jelszó-házirend", `/jelszo-hazirend`). MINDEN OPCIONÁLIS, alapból kikapcsolt (a telepítés senkit nem érint). (1) KÖTELEZŐ JELSZÓCSERE: érvényesség 30-180 nap;
  a lejárat előtt 7 nappal e-mail emlékeztető (egyszer, óránként futó ütemezett feladat) jelszóváltoztató gombbal: a gomb a Profilom jelszó-kártyájára visz (be kell lépni, a régi jelszó is kell - a levél önmagában nem elég jelszót cserélni);
  lejárat után belépéskor csak a Profilom oldalig jut a felhasználó, amíg új jelszót nem választ (nincs fiókzárolás). A lejárat az utolsó jelszócseréjétől számít; bekapcsoláskor aki már lejárt volna, 7 nap türelmi időt kap.
  A rendszeradminra a lejárat nem vonatkozik. (2) BONYOLULTSÁG: minimum hossz (6-32) + kötelező kisbetű / nagybetű / szám / speciális karakter. (3) ELŐZMÉNY: az utolsó 0-10 jelszó (a jelenlegit is beleértve) nem használható újra (csak bcrypt-lenyomatok tárolódnak).
- GYENGESÉG-FIGYELMEZTETÉS a cégadminnak (nem tilt): rövid minimum, kevés karakterfajta, alacsony becsült erősség (hossz x log2(karakterkészlet) bit), előzmény nélkül; "Erősség ellenőrzése mentés nélkül" gomb. A szabályok minden jelszóbeállításnál érvényesek:
  saját csere, cégadmin/rendszeradmin általi csere, aktiválás linken és kézzel; a hibaüzenet felsorolja a hiányzó követelményeket; a Profilom és az aktiváló oldal előre kiírja a követelményeket. A módosítások a Jogosultsági naplóba kerülnek.
- Működés: a `users.jelszo_lejarat_at` előre kiszámolt mező (a `get_current_user` kérésenként egy mezőt néz; nincs extra lekérdezés, amíg nincs házirend); az emlékeztető levél `rendszer` kategóriájú, ezért a "Szabadságon vagyok" alatt is kimegy.
  Belépés után (jelszavas és 2FA-s úton is) a 7 napon belül lejáró jelszavú felhasználó a Profilom jelszó-kártyájára kerül.
- ÚJ OSZLOPOK / TÁBLA (induláskor automatikusan; külön migráció NINCS, a szervert újra kell indítani): `companies.jelszo_*` (8 oszlop), `users.jelszo_lejarat_at`, `users.jelszo_emlekezteto_at`, tábla `jelszo_elozmenyek`.
  Új fájlok: `jelszo_hazirend.py`, `routers/jelszo_hazirend.py`, `templates/jelszo_hazirend.html`. Tesztek: új `t_jelszo` (~116 ellenőrzés).

## v35 – 2026-10-06
- ÚJ (`docs/PROFIL_ES_SZABADSAG.md`): PROFILOM oldal (`/profil`). A jobb felső felhasználó-menü két eleme (Jelszavam módosítása, Értesítéseim) helyett egyetlen "Profilom" menüpont van (23 menüs sablon + index + beállítások),
  amely egy profil-kezelő oldalt nyit: Fiókom (csak olvasható), Szabadságon vagyok, Értesítéseim (a régi `/ertesitesek` űrlapja, mentés után a Profilomra tér vissza), Jelszó módosítása, Kétlépcsős hitelesítés (mentőkód-hivatkozás, csak 2FA-s felhasználónak).
  A régi jelszó-modál (`profileModal`, `sajatJelszoModal`) és a `common.js` kezelője megszűnt; a `/ertesitesek` oldal megmaradt. A v34-es mentőkód-hivatkozás a Profil ablakból a Profilomra került.
- ÚJ: "SZABADSÁGON VAGYOK" kapcsoló. Bekapcsolva a felhasználó NEM kap e-mailt (riasztás, napi riport, minden jövőbeli kategória), KIVÉVE a fiókot védő biztonsági leveleket (`rendszer`, `aktivalas` kategória: jelszó/2FA/mentőkód értesítők, aktiváló link,
  tiltás - `email_sor.SZABADSAG_ALATT_IS_KULDOTT_KATEGORIAK`). Opcionális "visszatérés napja" (legkorábban holnap, max. 366 nap): azon a napon (helyi 00:00 után) a szabadság magától véget ér (5 percenkénti ütemezett ellenőrzés, `vedett()` - több workeren is egyszer).
  A szabadság VÉGÉN (kézi kikapcsolás vagy a visszatérés napja) a felhasználó EGYETLEN összegző levelet kap: kategóriánként darabszám + a tárgysorok időponttal (kategóriánként max. 30 sor, a többi "és még N db"; minden szöveg escape-elve). Ha nem maradt ki semmi, levél sem megy.
- Működés: az `email_sor.sorba_allit()` a szabadságon lévő címzettek leveleit `visszatartva` állapotba teszi (a kiürítő csak a `varakozik` sorokat küldi; a törzs nem őrződik meg), a bekapcsoláskor már sorban álló leveleket is visszatartja. A végén a sorok `osszegezve` állapotra váltanak.
  Bekapcsolás/kikapcsolás EGY tranzakció: ha az összegző sorba állítása elbukik, semmi nem változik és a szabadság tovább tart (az automatikus vég 5 perc múlva újra próbál). Mindent a Jogosultsági napló rögzít ("Szabadságon vagyok").
  Takarítás: `osszegezve` 30 nap, árva `visszatartva` 400 nap után törlődik. A Rendszeradmin "Kimenő levelek" oldala mutatja a szabadság miatt visszatartott leveleket.
- ÚJ OSZLOPOK (`users`: `szabadsagon`, `szabadsag_kezdete_at`, `szabadsag_visszateres`): induláskor automatikusan létrejönnek (`add_column_safe`), külön migráció NINCS - a szervert újra kell indítani. Új fájlok: `szabadsag_utils.py`, `routers/profil.py`, `templates/profil.html`, `templates/_ertesitesek_urlap.html`.
  Tesztek: új `t_profil` (~67 ellenőrzés); a `t_mentokod` (E13/E14) és a `t_userlist` (U6) az új menühöz igazítva.

## v34 – 2026-10-05
- ÚJ (2FA, `docs/KETLEPCSOS_HITELESITES.md` 5f): MENTŐKÓDOK - tartalék belépés, ha a felhasználó telefonja nem érhető el. Mindenkinek jár, aki kétlépcsős hitelesítést használ (felhasználó, cégadmin, rendszeradmin). Egy készlet 10 db egyszer használható kód
  (`ABCDE-FGHJK`, 50 bit). Az első 2FA-beállítás végén (és a rendszeradmin saját beállításánál) a rendszer egyszer megmutatja őket; később a Profil ablakban (a jelszócsere alatt) / a rendszeradmin 2FA-oldalán kérhető új készlet
  (jelszó + friss hitelesítő kód kell hozzá; a régi készlet érvénytelen lesz). Belépés: a `/mfa` oldalon "Belépés mentőkóddal" (`/mfa/mentokod`).
- Biztonság: az adatbázisban csak HMAC-SHA256 lenyomat van (felhasználóhoz kötve), az egyszeri felhasználás atomi, a találgatást ugyanaz a védelem számolja, mint a 6 jegyű kódnál (tiltás alatt a jó kód sem használódik fel). Minden mentőkódos belépésről és új készletről értesítő levél
  megy a felhasználónak (kódot soha nem tartalmaz), és a Jogosultsági naplóba is bekerül. A 2FA törlése (jelszócsere-visszaállítás, `mfa_felold.py`, felhasználókezelés) a mentőkódokat is törli; a felhasználó/cég végleges törlése szintén.
- ÚJ TÁBLA: `mfa_mentokodok` (a `create_all` induláskor automatikusan létrehozza, külön migráció NINCS). FIGYELEM: a v34 előtt beállított 2FA-hoz NEM készül automatikusan készlet - mindenki (különösen a rendszeradmin) kérje ki egyszer a Profil ablakban.
  Az elveszett eszköz folyamata (rendszergazdai jelszócsere / `mfa_felold.py`) változatlan. Új fájlok: `mentokod_utils.py`, `routers/mfa_mentokod.py`, két sablon; tesztek: új `t_mentokod` (66 ellenőrzés).

## v33 – 2026-10-05
- A szimultán belépés (v32) kezelése finomítva (`docs/EGYIDEJU_BELEPES.md`): a kidobott felhasználó a tényleges ok helyett csak HIBAKÓDOT lát - ÚJ hibakód: `E-LIC-01` ("Licenszkorlát átlépve (szimultán bejelentkezés)", új "LIC" család;
  a Rendszerinformáció hibakód-táblázatában magától megjelenik). A `/login?hibakod=E-LIC-01` az egyetlen lefordított kód; a v32-es `/login?uzenet=masik_helyen` megszűnt. A szabály változatlan: az új belépés kidobja a régit, a rendszeradmin kivétel
  (a laptopról telefonra átülés természetes, egymás után mehet; az egyidejű használat nem).
- Jogosultsági napló: a szimultán belépés MINDIG bekerül ("Egyidejű belépés (E-LIC-01): ..."). Értesítő levél a rendszeradminisztrátoroknak: OPCIONÁLIS, alapból KI - a Kimenő levelek oldal ("Szimultán belépés (E-LIC-01)" kártya) kapcsolja
  (`POST /rendszeradmin/email-sor/szimultan-ertesites`, csak RA, csak-olvasó RA nem, idegen eredetű kérés nem, a változás a naplóban). Bekapcsolva sürgős, "rendszer" kategóriájú levél megy; fiókonként naponta legfeljebb egy (levélzápor-védelem).
- Új beállítás: `rendszer_beallitasok.szimultan_belepes_ertesites` (nincs migráció, a kulcs az első kapcsoláskor jön létre). Tesztek: `t_munkamenet` 65 ellenőrzés (új G rész). A `login_vedelem.rendszeradmin_cimek()` nyilvános segéd lett.

## v32 – 2026-10-05
- ÚJ (licenc-védelem; `docs/EGYIDEJU_BELEPES.md`): egy fiók egyszerre csak EGY helyen lehet bejelentkezve - az új belépés kidobja a régit. Mindenkire vonatkozik, a rendszeradminisztrátor kivételével
  (ő több helyen is bejelentkezve lehet); cégenként nem kapcsolható. Működés: minden belépéskor véletlen munkamenet-azonosító (sid) kerül a JWT-be és a felhasználó sorába; a `get_current_user()` (és az `_optional`)
  a kettő egyezését kéri. A kidobott felhasználó a `/login?uzenet=masik_helyen` oldalon megkapja a magyarázatot. Kilépéskor az azonosító törlődik (az átmásolt token sem használható tovább).
- A felülírt, még érvényes munkamenetet a Jogosultsági napló rögzíti (új és régi IP, a régi indulása) - ez a bizonyíték a fiók többes használatára. Új belépési pont tokenjét `security.belepesi_token()`-nel kell kiadni.
- ÚJ OSZLOPOK (`users`: `aktiv_munkamenet`, `munkamenet_kezdete_at`, `munkamenet_ip`): induláskor automatikusan létrejönnek (`add_column_safe`), külön migráció NINCS. FIGYELEM: a telepítés előtt kiadott tokenekben nincs sid,
  ezért minden nem-rendszeradmin felhasználónak a telepítés után EGYSZER újra be kell lépnie. Tesztek: új `t_munkamenet` (36 ellenőrzés); a `t_mfa2` tokenjei a belépéssel azonos módon készülnek.

## v31 – 2026-10-05
- Rendszeradmin dashboard: a Cégek oldalról ismert ikonsor visszakerült az oldal tetejére (felhasználók, dokumentum import, gépek export, VIVÜ karbantartás, e-mail, tiltások, 2FA, tisztítás, rendszerinfo; az első ikon a Cégek oldalra visz, az utolsó a modulválasztóra), és a verzió-jelvény is úgy néz ki, mint a Cégek oldalon.
  A fejléc az emelőgépes vezérlőpult mintáját követi: balra a Defensys logó, mellette a cím és a verzió-jelvény. Az ikonsor miatt a külön "Gyorsmenü" kártya kikerült (ha valaki elrejtette, a tárolt jelölés figyelmen kívül marad). Új oszlop/migráció NINCS.

## v30 – 2026-10-05
- ÚJ (rendszeradmin dashboard; `docs/RA_DASHBOARD.md`): a rendszeradmin új főoldala a `/rendszeradmin` áttekintő. Kártyák: cégek, felhasználók, kétlépcsős hitelesítés, levelezés, belépési tiltások,
  rendszer (verzió + ütemező életjele), gyorsmenü; mindegyik kattintásra a releváns beállító oldalra visz (pl. a levelezés kártya az e-mail beállításokra). Csak számok és jelzők, nincs grafikon-könyvtár.
- ÚJ: "Aktív problémák" kártya (mindig látszik, nem kapcsolható ki), összegezve: levelezés (hibás/lejárt levél, nincs SMTP, nem visszafejthető SMTP-jelszó, megakadt sor), 2FA (be nem állított, nem olvasható,
  rendszeradmin 2FA nélkül), belépési tiltások és aktiválás (végleges/ideiglenes tiltás, aktiválásra váró, lejárt aktiváló link), cégek/licenc/ütemező (licenc-túllépés/határ, admin nélküli cég, inaktív cég = csak info, az ütemező nem fut).
- A kártyák felhasználónként ki/be kapcsolhatók (POST `/rendszeradmin/dashboard/kartya/<kulcs>`, `Sec-Fetch-Site` védelemmel; tárolás: `rendszer_beallitasok`, kulcs `ra_dashboard_rejtett_<user_id>`; migráció NINCS).
  A `static/js/common.js` `toggle-post` kapcsolója új, opcionális `data-target-selector` attribútumot kapott. A `GET /rendszeradmin` csak olvas; egy hibás ellenőrzés nem ejti el az oldalt.
- Navigáció: a Modulválasztó Rendszeradminisztráció csempéje és a `/rendszeradmin/modulok` az áttekintőre visz; a rendszeradmin oldalak "Vissza" gombjai is. A `/rendszeradmin/cegek` (Cégek) változatlan, kártyáról érhető el.
  Teszt: `t_ra_dashboard` (62 ellenőrzés). Új oszlop/tábla/migráció NINCS.

## v29 – 2026-10-05
- BIZTONSÁG (GET-átvizsgálás, S-3 szelet; `docs/GET_ATTEKINTES.md` 10.3): új válasz-fejléc middleware (`main.py`): JSON-válaszok és minden letöltés/PDF/export `Cache-Control: private, no-store`
  (a személyes adat ne maradjon a böngésző gyorsítótárában); a `/uploads/...` fájlkiszolgálók `private, no-cache` (minden használat előtt újraellenőrzés, a jogosultság érvényesül) +
  `X-Content-Type-Options: nosniff`. A `/static/`, a HTML-oldalak és a kezelő által már beállított `Cache-Control` változatlan.
- BIZTONSÁG: a gép duplikátum-ellenőrzése (`/gep/duplikatum-ellenorzes`) a találat részleteit csak annak adja, aki a gépet látná (telephely/gép szintű hozzáférés); másnak csak azt,
  hogy "létezik ilyen gép" (a figyelmeztetés megmarad, adat nem szivárog). A gépfelvételi űrlap külön szöveget mutat erre.
- Megjegyzés a `main.py`-ban: a CORS nem engedélyezhető (a DELETE-es végpontok védelme erre épül). Teszt: `t_get_audit` G5-G6. Új oszlop/migráció NINCS.

## v28 – 2026-10-05
- BIZTONSÁG (GET-átvizsgálás, S-2 szelet; `docs/GET_ATTEKINTES.md` 10.2): a kötelező 2FA első beállítása már nem ír GET-tel. A `GET /mfa/beallitas` csak a bevezető oldalt
  mutatja ("QR-kód létrehozása" gombbal), a titkot az új `POST /mfa/beallitas/inditas` készíti és a válasz közvetlenül a QR-oldal (nincs átirányítás, titok nem kerül URL-be).
  Eddig a GET minden megnyitáskor új TOTP-titkot írt, így egy frissítés vagy böngésző-előtöltés észrevétlenül érvénytelenítette a beolvasott QR-t. A biztonsági tulajdonság
  változatlan: minden megjelenített titok friss. Idegen eredetű (`Sec-Fetch-Site`) kérés nem ír; a megerősített beállítás nem írható felül.
- Teszt: `t_mfa3` (S1-S21) és `t_mfa5` az új indításhoz igazítva + új esetek (a GET nem ír, az indítás védelmei); `t_get_audit` kivétel-listája szűkítve.
  Új oszlop/migráció NINCS.

## v27 – 2026-10-05
- BIZTONSÁG (GET-átvizsgálás, S-1 szelet; részletek: `docs/GET_ATTEKINTES.md`): 36 `<form>` `method` nélkül volt, ami GET-et jelent - közülük 24 a SAJÁT JELSZÓ cseréje.
  Ha a JS nem kötött rá (pl. kiesett CDN miatt megszakadt a `common.js`), a jelenlegi és az új jelszó az URL-be, a böngészőelőzménybe és a webszerver naplójába került
  volna. Mind `method="post"`-ot kapott (a két PDF-letöltő szándékosan `get`). A saját jelszó űrlapja közös sablon-részlet lett (`templates/_sajat_jelszo_form.html`),
  a `common.js` `data-ajax-form` hibás `form.method || 'POST'` kifejezése javítva.
- ÚJ: az ÚJ JELSZÓT MEG KELL ERŐSÍTENI (`uj_jelszo2`) mindhárom jelszócserénél: saját jelszó (`/sajat-jelszo-csere`), kényszerített cserénél (`/admin-jelszo-csere`,
  4 sablon, mostantól `type="password"`) és a rendszeradmin Kezelés ablakában (`/felhasznalok/{id}/jelszo`). Szerver oldalon kötelező (eltérés/hiány: 400 "A két új
  jelszó nem egyezik!"), a böngészőben azonnali jelzés (`common.js`). Az aktiváló oldal már eddig is kérte.
- Új teszt: `tests/t_get_audit.py` (nincs method nélküli form; egyetlen GET-kezelő sem ír, kivétel-listával; jelszó-megerősítés; minden sablon lefordul);
  a `t_akt.py`, `t_mfa5.py`, `t_userlist3.py` az új mezőhöz igazítva. Új oszlop/migráció NINCS.

## v26 – 2026-10-05
- ÚJ (rendszeradmin, 3. szelet): a rendszeradminisztrátor MINDENT megtehet BÁRMELYIK felhasználóval, a többi rendszeradminnal is. A `/felhasznalok` lista
  minden sorában egyetlen "Kezelés" gomb van (a korábbi soronkénti Szerkesztés/Jelszó/Inaktiválás/Szerepkör gombok és modálok helyett); az ablak fülei:
  Szerkesztés (minden paraméter: név, e-mail, aktív, csak olvasás, hozzáférési szint + telephelyek/gépek, egyedi jogok, szakmai és HR adatok, bizonyítvány-fájl,
  modulok), Szerepkör / cég (a v25 végpont), Jelszó (opcionális 2FA törléssel; aktiválásra váró fióknál kézi aktiválás), 2FA (törlés/visszaállítás),
  Állapot (aktív/inaktív, aktiváló link újraküldése), Törlés (végleges, másik rendszeradmin is).
- ÚJ végpontok (`routers/rendszeradmin_felhasznalok.py`): `GET /felhasznalok/{id}/adatok`, `POST /felhasznalok/{id}/teljes-szerkesztes`, `.../jelszo`,
  `.../mfa-torles`, `.../aktiv`, `.../torles`. Mind csak rendszeradminnak (mindenki más 403), cross-site kérés tiltva, "csak olvasás" jelzős RA nem módosíthat,
  egy tranzakció, minden módosítás AuditLog-ba kerül (jelszó/titok nélkül).
- KORLÁT, ami marad: saját fiók és az utolsó aktív rendszeradmin nem inaktiválható/törölhető/fokozható le; másik rendszeradmin jelszavához, 2FA-jához és törléséhez
  a végrehajtó SAJÁT jelszava kell (újra-azonosítás - védelem az ellopott munkamenet ellen), a többi rendszeradmin e-mailes másolatot kap. A telephely/gép-hozzárendelés
  mostantól ellenőrzi, hogy az a felhasználó cégéhez tartozik. A 2FA-értesítő levél szövege igazodik a változáshoz (`ertesito_visszaallitasrol`: jelszo_is / mfa_is).
- Új teszt: `tests/t_userlist3.py` (T1-T9); a `t_userlist.py` (U5) és `t_akt.py` (E14) a Kezelés ablakhoz igazítva. Új oszlop/migráció NINCS.
  Dokumentáció: `docs/FELHASZNALOK_LISTA.md` 17-23. fejezet; `docs/JOGOSULTSAGOK.md` frissítve.

## v25 – 2026-10-05
- ÚJ (rendszeradmin, 2. szelet): a `/felhasznalok` lista minden (nem saját) során megjelent a piros "Szerepkör / cég" gomb: a
  rendszeradminisztrátor módosíthatja egy felhasználó SZEREPKÖRÉT, CÉGÉT és EXTRA CÉGEIT (`allowed_companies`). Eddig ezek a létrehozás után
  soha nem módosulhattak (törölni és újra létrehozni kellett a felhasználót). Végpont: `POST /felhasznalok/{id}/szerep-ceg`
  (`routers/rendszeradmin_felhasznalok.py`).
- VÉDŐKORLÁTOK: csak rendszeradmin (cég-Admin és mindenki más 403); idegen eredetű (cross-site) kérés elutasítva; saját fiók nem módosítható; a
  szerepkör a 9 ismert közül való; az új cég létező, AKTÍV és nem a rendszercég (rendszeradmin innen nem hozható létre); kötelező megerősítés;
  rendszeradmin visszaminősítése csak ha marad másik aktív rendszeradmin + a fiók nevének begépelésével; cégenként egy aktív VIVU, licenc-limit,
  VIVU/EBK szerepkörhöz előfizetett modul; egyetlen tranzakció (hiba esetén semmi nem módosul).
- MELLÉKHATÁSOK: cégváltáskor a régi cég telephely-/gép-hozzárendelései, EBK/VIVÜ megbízásai és az utolsó munkakörnyezet törlődnek (a hozzáférési
  szint nem szélesedik); a modulok a szerepkörhöz/céghez igazodnak; extra cég csak szakértő/vizsgáló szerepkörnél maradhat, az elvett extra cég
  szakértői megbízás-beállítása is törlődik. Minden változás a Jogosultsági naplóba kerül (régi és új cégnél is). Új oszlop/migráció NINCS.
- Új teszt: `tests/t_userlist2.py` (R1-R13). Dokumentáció: `docs/FELHASZNALOK_LISTA.md` 11-16. fejezet; `docs/JOGOSULTSAGOK.md` frissítve.

## v24 – 2026-10-05
- ÚJ (rendszeradmin, 1. szelet): a `/felhasznalok` oldalon a rendszeradminisztrátor mostantól a rendszer ÖSSZES felhasználóját látja egy
  kereshető/szűrhető listában (minden cég, minden szerepkör, a rendszeradminisztrátorok és az ismeretlen/régi szerepkörök is), minden
  paraméterrel: cég (inaktív cég, kötelező 2FA jelzés), szerepkör, hozzáférési szint és telephely, extra cégek, telephely-/gép-hozzárendelések
  száma, ténylegesen elérhető modulok (cég ∩ saját), jogosultsági jelzők (üzemóra, dokumentum, gépszerkesztés, dátumszerkesztés, csak olvasás),
  2FA-állapot, szakmai és HR adatok, aktiválási állapot, utolsó jelszócsere, utolsó munkakörnyezet. Összesítő kártya és szűrők (szöveg, szerepkör,
  cég, állapot) tartoznak hozzá. Eddig az oldal csak a cég-Admin és a külsős Emelőgép szakértő/vizsgáló fiókokat mutatta, a rendszercég nélkül.
- JOGOSULTSÁG VÁLTOZATLAN: az oldal továbbra is KIZÁRÓLAG a rendszeradminisztrátoré (mindenki más a `/lista` oldalra kerül); a cég-Admin a saját
  cége felhasználóit továbbra is a Beállítások oldalon látja. A szerkesztés / jelszó / inaktiválás / aktiválás gombok pontosan azoknál a soroknál
  jelennek meg, ahol eddig is (cég-Admin és szakértő/vizsgáló, a rendszercégen kívül); minden más sor csak olvasható. A jelszó-hash és a kétlépcsős
  titok sosem kerül a kimenetbe. Új migráció, új oszlop, új módosító végpont NINCS. A szerkesztés (szerepkör/cég módosítása) a 2. szelet lesz.
- Új teszt: `tests/t_userlist.py` (U1-U8). Dokumentáció: `docs/FELHASZNALOK_LISTA.md`; a `docs/JOGOSULTSAGOK.md` és a részletes mátrix frissítve.

## v23 – 2026-10-04
- JAVÍTÁS (kijelentkezés): 6 oldalon (Beállítások, Felhasználók, EBK céges beállítások, EBK projekt adatlap, VIVÜ céges beállítások,
  VIVÜ ügyfél adatlap) a piros "Kijelentkezés" gomb még egy sima GET-es `/logout` link volt, a szerver viszont a 2026-10-03-i
  biztonsági javítás óta csak POST-ot fogad - így a gomb "Method Not Allowed" hibát adott, a kijelentkezés NEM történt meg, és a
  munkamenet (süti) érvényben maradt (ezért nem kért újra jelszót/2FA-kódot). Mostantól mind a hat oldal a többihez hasonlóan a
  `logoutUser()` függvényt hívja (static/js/common.js, POST űrlap). A szerver kódja nem változott.

## v22 – 2026-10-04
- BIZTONSÁG: a kliens-IP-t (belépés-védelem, naplók) már nem az `X-Forwarded-For` fejléc ELSŐ bejegyzéséből olvassa a program,
  mert az hamisítható volt (kijátszható az IP-korlát, vagy egy másik cég IP-je kitiltatható). Az Apache a valódi címet a
  fejléc VÉGÉRE fűzi, ezért a jobbról számított `PROXY_HOPS`-adik bejegyzést használjuk (új `.env` beállítás, alapérték 1 = egy
  Apache; 0 = nincs proxy; 2 = az Apache előtt még egy proxy van). Érvénytelen/hiányzó fejlécnél a közvetlen kapcsolat címe marad.
  TELEPÍTÉS UTÁN ELLENŐRIZNI: docs/LOGIN_VEDELEM.md 9a. (hamis fejlécű próba-belépés -> a `login_kiserletek` táblában a valódi
  IP látszik). Új teszt: tests/t_ip.py.

## v21 – 2026-10-04
- BIZTONSÁG: nyílt átirányítás megszüntetése a munkakörnyezet-váltásnál (`/valaszt-ceget`): a visszairányítási cél (`next`)
  csak a saját oldalon belüli "/..." útvonal lehet; a `//külso.hu`, `/\külso.hu`, `https://...`, vezérlőkaraktert tartalmazó
  értékek a főoldalra cserélődnek (`security.biztonsagos_atiranyitas`). A felület működése nem változik. Új teszt: tests/t_redirect.py.

## v20 – 2026-10-04
- ÚJ: kétlépcsős hitelesítés (2FA) 5. fázis - elveszett eszköz. Ha egy felhasználó elveszti a telefonját, a rendszergazda
  a megszokott "Jelszó módosítása" gombbal új jelszót állít neki, és ez mostantól a 2FA-beállítását is törli (egy lépésben):
  a felhasználó az új jelszóval lép be, majd (kötelező cégnél) új QR-kódot állít be. Naplózva van; a felhasználó értesítő levelet
  kap, a többi rendszeradmin másolatot. A saját és a rendszeradmin 2FA-ját így nem lehet törölni (ellopott munkamenet ellen) -
  az elveszett rendszeradmin-telefon a szerverről oldható fel (`mfa_felold.py`). A jelszócsere-űrlapok alatt tájékoztató szöveg.
  Ezzel a 2FA mind az 5 fázisa kész. Alapállapotban semmi nem változik. Leírás: docs/KETLEPCSOS_HITELESITES.md (5e).

## v19 – 2026-10-04
- ÚJ: kétlépcsős hitelesítés (2FA) 4. fázis - cégkapcsoló a rendszeradmin felületen. Cégek -> pajzs ikon ->
  "Kétlépcsős hitelesítés" (`/rendszeradmin/ketlepcsos`): cégenként be-/kikapcsolható a kötelezés (a bekapcsoláshoz
  megerősítő jelölő kell), látszik, hány érintett felhasználónak kész már a beállítása, a változás naplózódik (AuditLog,
  `mfa_politika_valtozott_at`). Inaktív cégnél is beállítható (az aktiváláskor lép életbe, jelezve van).
- ÚJ: kizárás elleni védelem - a rendszeradmin NEM zárhatja ki magát: egy cég kapcsolója csak akkor kapcsolható be, ha
  minden érintett aktív rendszeradminnak (az 1-es cégnél mindegyiknek, más cégnél a kiosztott cég miatt érintetteknek) kész
  a 2FA-beállítása. Ehhez a rendszeradmin a saját hitelesítő alkalmazását előre beállíthatja ugyanazon az oldalon (jelszó +
  QR + első kód). Kikapcsolni mindig lehet.
- Biztonsági review nyomán: a saját beállítás indításához jelszó kell (ellopott munkamenettel ne lehessen "hamis kész"
  állapotot szerezni), az indítás atomi (megerősített beállítást párhuzamos kérés sem ír felül - a /mfa/beallitas is ezt
  használja), és az állapotot módosító POST-ok elutasítják a Sec-Fetch-Site: cross-site/same-site kéréseket.
- FIGYELEM: bekapcsoláskor a cég már belépett, kód nélküli munkamenetei megszűnnek (újra be kell lépniük). Az 5. fázis
  (elveszett eszköz felületről) előtt éles cégre óvatosan kapcsoljátok be - a felhasználó 2FA-ját addig csak a szerverről
  lehet visszaállítani (`mfa_felold.py`). Alapállapotban semmi nem változik. Leírás: docs/KETLEPCSOS_HITELESITES.md (5d).

## v18 – 2026-10-04
- ÚJ: kétlépcsős hitelesítés (2FA) 3. fázis - kötelező első beállítás. Ha a cégnél kötelező a 2FA, és a felhasználónak
  még nincs beállítása, a jelszó után a QR-beállító oldalra kerül (`/mfa/beallitas`): QR-kód + kézi kulcs, az
  alkalmazás első kódjával megerősíti, és be is lép. Megerősített beállítást az oldal nem ír felül (csak a rendszeradmin
  visszaállítása után lehet újra beállítani). A sikeres beállításról értesítő e-mail megy a felhasználónak (időpont, IP).
  A kód-találgatás itt is ugyanazt a tiltást kapja. A QR-oldal minden betöltése új titkot készít (a meg nem erősített
  titkot nem használjuk újra, hogy a jelszót ismerő támadó ne másolhassa le észrevétlenül). A vészfeloldó `mfa_felold.py
  felhasznalo` a jelszót nem érinti - ha a jelszó kiszivároghatott, cserélni kell (az 5. fázis egyesíti). Alapállapotban semmi nem változik. A felületi kapcsoló a 4. fázisban
  készül - éles cégre addig ne kapcsold be. Leírás: docs/KETLEPCSOS_HITELESITES.md (5c).

## v17 – 2026-10-04
- ÚJ: kétlépcsős hitelesítés (2FA, TOTP) 2. fázis - bejelentkezés kódkéréssel. Ha valamelyik cégnél
  kötelezővé teszik (a felülete a 4. fázisban készül), a jelszó után a felhasználónak be kell írnia a
  hitelesítő alkalmazás 6 jegyű kódját (új `/mfa` oldal); kód nélkül nincs munkamenet (a `get_current_user()`
  kikényszeríti, az átmeneti token nem jogosít belépésre). A kód-találgatás ugyanazt a tiltást kapja,
  mint a jelszó-találgatás. Szabály: ha BÁRMELYIK, a felhasználóhoz tartozó (saját vagy kiosztott) cégnél
  kötelező, neki is az; a rendszeradminra csak az 1-es cég / a kiosztott cégek kapcsolója vonatkozik.
- ÚJ: vészfeloldó szkript (`mfa_felold.py`) - a rendszeradmin nem zárhatja ki magát: a szerverről kikapcsolható
  egy/minden cég kötelezése, és törölhető egy felhasználó 2FA-beállítása. Bekapcsolni a szkripttel nem lehet.
- FIGYELEM: a kötelezést a 3. fázis (QR-beállító oldal) előtt NE kapcsoljátok be (a kötelezettek nem tudnák
  beállítani, és nem tudnának belépni). Alapállapotban semmi nem változik. Leírás: docs/KETLEPCSOS_HITELESITES.md.

## v16 – 2026-10-04
- ÚJ (előkészítés): kétlépcsős hitelesítés (2FA, TOTP) 1. fázis - alapinfrastruktúra. Új adatbázis-oszlopok
  (`users`: titkosított TOTP-titok, megerősítés, utolsó elfogadott lépés; `companies`: kötelezővé tevés
  kapcsoló), új `mfa_utils.py` (titok titkosított tárolása, kód-ellenőrzés visszajátszás elleni
  védelemmel és atomi rögzítéssel, QR-előállítás), új függőségek (`pyotp`, `qrcode`). A telepítés a
  működést NEM változtatja meg: a kapcsoló mindenhol ki van, belépéskor senki nem kap kódkérést.
  A bejelentkezés bővítése, a QR-beállítás, a rendszeradmin kapcsoló és a helyreállítás a következő
  fázisok. Telepítéskor: `pip install -r requirements.txt`. Leírás: docs/KETLEPCSOS_HITELESITES.md.

## v15 – 2026-10-04
- ÚJ: levél-feliratkozások hierarchiával - a gép-riasztások, a lejárati riport, a sikertelen vizsgálat
  értesítés és a bérelt gépek levelei már nem "mindig az Admin és az EÜI" kapják kódba égetve: a cég
  Admin-ja szerepkörönként és kategóriánként kötelező / alapból be / alapból ki / tiltott szabályt
  állít (Beállítások / Levél-feliratkozási szabályok), a felhasználó pedig a saját "Értesítéseim"
  oldalán (profil-menü) azt kapcsolja ki/be, amit a szabály megenged. Szabály nélkül a működés
  pontosan a régi (Admin + EÜI kap levelet) - nincs migráció.
- ÚJ: a cég Admin-ja táblázatban látja, ki mit kap most; "0 címzett" figyelmeztetés, ha egy
  levélfajtát senki nem kap. A cégszintű főkapcsolók (riport gyakorisága, sikertelen vizsgálat
  e-mail) megmaradtak és felülbírálják a hierarchiát.
- BIZTONSÁG: az Admin/EÜI kivételével csak cég szintű hozzáférésű, Emelőgép modulos felhasználó
  kaphat levelet (a hatóköre feletti gépekről ne tudjon meg többet); a napi riport dolgozói
  (orvosi alkalmasság, jogosítvány) szakasza csak az Admin/EÜI címzetteknek megy.
- JAVÍTÁS: az inaktív felhasználók már nem kapnak riasztást; a jóvá nem hagyott bérlet nem küld
  levelet a bérlő cégnek a gép adataival.
- Új táblák: email_feliratkozas_szabalyok, email_feliratkozasok (induláskor automatikusan létrejönnek).
  Részletek: docs/FELIRATKOZASOK.md.

## v14 – 2026-10-04
- ÚJ: aktiváló e-mail - új felhasználónál (Beállítások, Felhasználók, EBK megrendelő/koordinátor,
  VIVÜ megrendelő, Tűzvédelem) NINCS kezdő jelszó: az admin csak a nevet és az e-mail címet adja
  meg, a felhasználó e-mailben kap egy egyszer használható, 72 óráig érvényes linket, és a jelszavát
  maga állítja be. Aktiválásig a fiókba nem lehet belépni (kiadott JWT sem működik). A meglévő
  felhasználók aktiváltnak számítanak.
- ÚJ: a cég Admin-ja és a rendszeradmin új linket küldhet („Link újraküldése" gomb, vagy a „Jelszó
  módosítása" váró fióknál; két küldés között legalább 5 perc); a rendszeradmin végszükségben
  kézzel aktiválhatja a fiókot jelszó megadásával (csak ő). Aktiválásra váró fiókoknál
  „Aktiválásra vár" jelvény látszik.
- BIZTONSÁG: az adatbázisban csak a token SHA-256 lenyomata van; egyszeri használat atomi
  lefoglalással; a link megnyitása (GET) nem módosít; no-referrer/no-store fejlécek; a token az
  alkalmazás naplójában maszkolva; a kimenő sorban a levél törzse (a linkkel) kiküldés után törlődik;
  e-mail cím módosításakor a régi link érvénytelen; a váró fiók címére nem megy riasztás.
- BIZTONSÁG: a jelszó legfeljebb 72 bájt lehet (korábban a bcrypt hosszabbra 500-as hibát adott).
- JAVÍTÁS: az EBK megrendelő/koordinátor létrehozás nem ellenőrizte a csak megtekintési jogot és az
  inaktív céget; a „hibás levelek újrapróbálása" kihagyja az aktiváló leveleket.
- Telepítéskor: állítsd be az Alkalmazás URL-t (E-mail beállítások), különben a levélben localhost
  link lesz; az Apache naplóban az /aktivalas/ útvonalat érdemes kihagyni - lásd docs/AKTIVALAS.md 8.

## v13 – 2026-10-04
- ÚJ: bejelentkezés-védelem (kitiltások) - a sikertelen belépések számlálása az adatbázisba került
  (eddig a folyamat memóriájában, workerenként külön, újraindításkor nullázódva). Ha egy fiókra 8,
  vagy egy IP-címről 20 sikertelen kísérlet történik 5 percen belül, tiltás keletkezik: először 15
  perc, 24 órán belüli ismétlésnél 60 perc, a HARMADIK tiltás VÉGLEGES (csak valós, nem
  rendszeradmin fióknál) - addig tart, amíg a rendszeradmin fel nem oldja. A rendszeradmin fiók
  és az IP-tiltás sosem végleges.
- ÚJ: a rendszeradmin e-mail értesítést kap, ha egy VALÓS (létező) fiókot kitiltanak - ismeretlen
  címek/botok tiltásáról nem. Óránként legfeljebb 10 egyedi levél, felette napi összefoglaló; a
  végleges tiltásról mindig megy levél.
- ÚJ: Rendszeradmin / Bejelentkezési tiltások oldal (/rendszeradmin/kitiltasok; lakat-ikon a Cégek
  oldalon): aktív tiltások és előzmény; a tiltást KIZÁRÓLAG a rendszeradmin oldhatja fel (céges
  Admin és csak megtekintő fiók nem). A feloldás a Jogosultsági naplóba kerül.
- ÚJ: vészfeloldás a szerverről (`python login_felold.py`), arra az esetre, ha minden rendszeradmint
  kitiltottak.
- Változás: a /login válasza továbbra is azonos valós és nem létező fióknál (nem derül ki, hogy egy
  cím regisztrált-e); a tiltott fiók helyes jelszóval sem léphet be; sikeres belépés csak az adott
  fiók számlálóját nullázza (az IP-ét nem).
- BIZTONSÁG: egyediségi őr az adatbázisban (párhuzamos workerek nem hozhatnak létre két aktív
  tiltást ugyanarra az azonosítóra); a számlálás friss adatbázis-pillanatképen fut (MariaDB
  REPEATABLE READ miatt).
- Ismert korlát: az X-Forwarded-For első bejegyzését vesszük, ami hamisítható - lásd
  docs/LOGIN_VEDELEM.md 9.1.
- Adatbázis: 2 új tábla (login_kiserletek, login_tiltasok) - induláskor automatikusan létrejönnek,
  migráció nem kell. Új függőség nincs.
- Dokumentáció: `docs/LOGIN_VEDELEM.md`.

## v12 – 2026-10-04
- ÚJ: kimenő levelek sora - minden e-mail előbb az `email_kimeno` táblába kerül, és egy percenként
  futó feladat küldi ki. Ha az SMTP-szerver nem elérhető, a levél nem vész el: növekvő
  várakozással újrapróbálja (5-160 perc, 6 próba), utána "hibás" lesz, és a rendszeradmin a
  felületen újra sorba állíthatja.
- ÚJ: sebességkorlát (a feladó-cím spamgyanússá válása ellen) - óránként és naponta legfeljebb a
  rendszeradmin által beállított számú levél megy ki (alapérték: 10/óra, 100/nap); a többi a
  sorban vár; a sürgős (kritikus riasztás) levelekre csak a napi korlát vonatkozik, a 20 óránál
  régebbi, ki nem ment napi riport pedig "lejárt" lesz. A rendszeradmin új oldala: "Kimenő levelek" (/rendszeradmin/email-sor) - állapot,
  korlátok, utolsó 50 levél. Percenként legfeljebb 5 levél megy ki, a kritikus riasztások előbb.
- ÚJ: ismétlődő hibák szűrése - ha egy hiba (pl. egy gép lejárt vizsgálata, vagy ugyanaz a
  gépnapló-hiba) napokon át fennáll, csak az első alkalommal megy róla levél, majd 7 nap után
  (állítható) emlékeztető, ha még fennáll. Új/más hiba azonnal megy; a hibajegy lezárása nullázza
  a számlálót. A napi riportban a korábban jelzett tételek kimaradnak, a levél láblécében jelezve;
  ha csak ilyen van, nem megy levél. A "Minden rendben" levél megmarad, ha tényleg nincs tétel.
- JAVÍTVA: az ütemezett feladatok (napi riport 06:00, gépellenőrzés 06:05) több gunicorn worker
  esetén workerenként lefuthattak (akár 3x kiküldött riport) - mostantól az adatbázisban
  lefoglalt futással pontosan egyszer futnak (új `utemezett_futasok` tábla).
- BIZTONSÁG: a levelek HTML törzsében a felhasználótól származó szövegek (gépnév, gyári szám,
  hibaleírás, bejelentő, dolgozónév, cégnév) mostantól HTML-escape-eltek - korábban egy gépnévbe
  írt HTML/link megjelent volna a rendszeradminnak/ügyintézőnek küldött levélben.
- Változás: minden levél címzettenként külön megy ki (nem közös "To:" mezővel), Date/Message-ID
  fejléccel és szöveges változattal; az üzenetek legfeljebb ~1 percet késnek. A kézi
  /teszt-riport is a sorba teszi a leveleket (és minden tételt tartalmaz).
- Adatbázis: 3 új tábla (email_kimeno, email_ertesites_allapot, utemezett_futasok) - induláskor
  automatikusan létrejönnek, migráció nem kell. Új függőség nincs.
- Dokumentáció: `docs/EMAIL_SOR.md`.

## v11 – 2026-10-04
- ÚJ: az e-mail küldés (SMTP) beállításai a rendszeradmin felületről állíthatók
  (Rendszeradmin / Cégek oldal, boríték ikon -> "E-mail beállítások"): SMTP-szerver, port,
  felhasználó, jelszó, titkosítás (SSL / STARTTLS), feladó-cím, TLS-tanúsítvány-ellenőrzés és az
  alkalmazás nyilvános URL-je. Új "Teszt-levél küldése" gomb. Mentés után újraindítás nélkül élő.
- Az SMTP-jelszó titkosítva (Fernet) kerül az adatbázisba (új `rendszer_beallitasok` tábla, az
  induláskor automatikusan létrejön); a kulcs a `.env`-ből jön (opcionális `CONFIG_ENCRYPTION_KEY`,
  ennek hiányában a `SECRET_KEY`-ből származtatott). A jelszó az oldalon sosem jelenik meg újra.
- Visszafelé kompatibilis: amíg a felületen nincs elmentett SMTP-szerver, a rendszer a `.env`
  SMTP_* értékeit használja tovább (opcionális átültetés: `migracio_smtp_env_to_db.py`).
- JAVÍTVA: a napi riport e-mail "Belépés a Vezérlőpultra" gombja korábban az SMTP-szerver nevére
  mutatott - mostantól az "Alkalmazás URL" beállításra.
- Keményítés: az SMTP-kapcsolatnak most 30 mp időtúllépése van (korábban egy elérhetetlen
  levelezőszerver végtelenségig blokkolhatta a háttérfeladatot); az új beállításnál alapértelmezés
  a szerver TLS-tanúsítványának ellenőrzése (a `.env`-tartalék a régi, ellenőrzés nélküli módon fut).
- Függőség: `cryptography` (requirements.txt) - telepítés: `pip install -r requirements.txt`.
- Dokumentáció: `docs/EMAIL_RENDSZER.md` (működés, telepítés, biztonsági döntések, következő fázisok).

## v10 – 2026-10-03
- KRITIKUS: belső biztonsági audit 2. köre - 20 javítás/keményítés egy nap alatt, 5
  egymásra épülő fázisban (0-4), a Claude Docs-ban rögzített cselekvési terv alapján.
- CSRF-javítások: MSZ 16226 PDF-letöltés, kijelentkezés (`/logout`) és a `/teszt-riport`
  mostantól GET helyett POST (ugyanaz a SameSite=Lax-cookie okozta hibaosztály, mint a
  korábban javított munkakörnyezet-/cégváltásnál).
- Jogosultsági rések zárva: egy TELEPHELY-re korlátozott felhasználó másik telephelyi gép
  QR-kódját is beolvashatta; az új céges felhasználó szerepkör/hozzáférés-szint mezője
  validálatlan volt; a VIVÜ megrendelői hozzáférés-kezelésnél hiányzott az inaktív-cég/
  csak-olvasás ellenőrzés.
- XSS-javítások: dokumentum-import ütközés-feloldó listája, AI-adattábla-beolvasás
  eredmény-megjelenítése.
- Adatszivárgás megszüntetve: a gép-szerkesztő JSON mostantól csak a Machine tábla saját
  oszlopaiból épül (nem a teljes ORM-objektumból); nyers kivétel/traceback-részletek
  eltávolítva a dokumentum-import és az AI-szkennelés válaszaiból (hibakódokkal
  helyettesítve - E-DOK-04, E-AI-01).
- Feltöltés-keményítés: kockázatértékelés kép-feltöltésnél mostantól valódi tartalmi
  ellenőrzés (nem csak kiterjesztés), Excel-import sorszám-felsőkorlát (memória-kimerítés
  ellen), rate limit az AI-adattábla-szkenneléshez (10 kérés / 5 perc / felhasználó).
- Kaszkád-törlés kiegészítve: cég/gép végleges törlésénél a tervezett vizsgálatok, az
  MSZ 16226 dokumentumok, valamint a teljes EBK- és VIVÜ-modul adatai is törlődnek
  (korábban árván maradtak volna).
- JWT-visszavonás: jelszóváltás után (saját magunk vagy egy admin által) egy korábban
  kiadott token azonnal érvénytelenné válik, nem kell a lejáratáig várni - új
  `jelszo_valtozott_at` mező (migráció: `migracio_jelszo_valtozott_at.py`, szerveren
  kézzel futtatandó).
- Szabad szöveges "enum" mezők (gép-státusz, vizsgálat-típus, végső minősítés, szakértői
  ütemező vizsgálat-típusa) mostantól szerver-oldali whitelist-tel védettek.
- E-mail CRLF-fejléc-injekció elleni védelem (Subject/To mezők).
- Holt `licenc_max_szuperfelhasznalo` mező eltávolítva.
- ÚJ: ellentmondás-figyelmeztetés a vizsgálati checklist és a végső minősítés között.
- Folyamat (nem kód): `pip-audit` és `gitleaks` git-history scan lefuttatva - 4 elavult
  függőség (python-dotenv, pyjwt, pypdf, pillow, frissítésük külön feladat), a
  git-történetben nincs beégetett titok/kulcs. Javasolt havi rutinná tenni.
- Tudatosan nyitva hagyva: a tűzvédelem-modul (nincs kidolgozva, élesben csak az egyetlen
  superadmin használja) néhány kapcsolódó hibája - l. a cselekvési tervben jelölve.

## v9 – 2026-10-02
- JAVÍTVA: a Jogosultsági napló (Beállítások) eddig egyáltalán nem rögzítette az új
  felhasználó-fiókok létrehozását - csak az aktiválás/inaktiválás jelent meg benne.
- A Jogosultsági napló ezentúl a be- és kijelentkezéseket is rögzíti (IP-cím megjelölésével),
  továbbra is kizárólag jogosultsági jellegű eseményként.

## v8 – 2026-10-02
- ÚJ: Szakértői ütemező (/szakerto-dashboard), kizárólag "Emelőgép szakértő" szerepkörnek -
  ügyfelei (cégei) szerinti bontásban, telephelyenként mutatja a gépszámot/vizsgálati
  módokat, és a kiválasztott időszakra eső (vagy lejárt) vizsgálati teendőket.
- Cégenként önként beállítható "megbízatás" (mely vizsgálat-típusokra szól) - csak az
  ütemező tartalmát szűri, a vizsgálat-rögzítést nem korlátozza.
- Valódi, perzisztens ütemezés: a szakértő gépenként/vizsgálat-típusonként tervezett
  dátumot rögzíthet, ami a tényleges jegyzőkönyv kiállításakor automatikusan törlődik.
- Átnézve: a meglévő "Saját vizsgálati riport" (/vizsgaloi-riport) funkció megfelelően
  kezeli az Emelőgép szakértő/vizsgáló szerepkör-felosztást, nem igényelt javítást.

## v7 – 2026-09-30
- KRITIKUS FOLYAMAT-VÁLTOZÁS: "Korlátozással alkalmas" minősítésnél a gép mostantól NEM
  vonódik ki azonnal - a "2. Soron kívül javítani, pótolni kell" mező és a Határidő megadása
  kötelezővé vált, a gép a határidőig HASZNÁLHATÓ marad, határidős hibajegy nyílik rá és
  értesítést kap az EÜI; ha a hibajegy időben lezárásra kerül (javítás), a gép Aktív marad,
  ha nem, egy új napi ütemezett feladat a határidő elteltével automatikusan kivonja. A "Nem
  alkalmas / Nem felelt meg" minősítés viselkedése változatlan (azonnali kivonás).
- Vizsgálati lap: új jelölőnégyzet ("Bizonyítvány csatolása a jegyzőkönyvhöz") - eddig a
  feltöltött bizonyítvány mindig automatikusan a jegyzőkönyv PDF-hez lett fűzve, mostantól
  a vizsgáló dönti el kapcsolónként.

## v6 – 2026-09-30
- KRITIKUS: hiányzott a kiszolgáló route az arculati logó és a bizonyítvány-fájlok
  `/uploads/...` útvonalaihoz - emiatt a rendszeradmin felület logó-előnézete és a
  "Jelenlegi fájl megtekintése" link mindig 404-et adott (úgy nézett ki, mintha a mentés
  meg sem történt volna); + egy általánosabb route-ütközés is javítva (a gép-fájlokat
  kiszolgáló route eddig minden nem-számjegyű útvonal-szegmensre 422-es hibát adott
  ahelyett, hogy továbbengedte volna a kéréseket a helyes route-hoz)

## v5 – 2026-09-30
- Arculati logó (jegyzőkönyv/üzemviteli dokumentum fejléce): néma hibaelnyelés megszüntetve,
  útvonal-feloldás abszolút útvonalra váltva (nem függ a szerver aktuális munkakönyvtárától),
  sikertelen beágyazásnál Pillow-alapú újrakódolási próbálkozás - ha a logó mégsem jelenne meg,
  a szerver logjában mostantól pontos ok található

## v4 – 2026-09-29
- "Kivonva" gépnél megjelenő figyelmeztetés ikonja javítva (a valódi "Státusz váltása" gomb
  be/kikapcsoló ikonjára, nem a körkörös nyíl ikonra hivatkozott)
- Egyszeri figyelmeztető sávok (gép nem aktív, inaktív cég, csak olvasás) mostantól F5
  (oldalfrissítés) után nem térnek vissza feleslegesen

## v3 – 2026-09-29
- "Dokumentumok és fájlok" gomb javítva feltöltési jog nélküli felhasználóknál (ugyanaz a
  null-ellenőrzés-hiányzik hibaosztály, mint a jkv-hiba) - a fájlok megtekintéséhez ezután
  nem kell feltöltési jog

## v2 – 2026-09-29
- KRITIKUS: Emelőgép ügyintézőnél (ha nincs bekapcsolva az "EÜI fővizsgálat engedélyezve")
  a jegyzőkönyv generálása egy JS-hiba miatt nyers 422-es hibaoldalt adott - a submit-védelem
  mostantól a fájl elején fut, egy null-ellenőrzés hiánya sem tudja megkerülhetővé tenni
- Bizonyítvány/tanúsítvány fájl feltöltése és cseréje már meglévő EÜI/Emelőgép szakértő/vizsgáló
  felhasználó szerkesztésekor is (eddig csak létrehozáskor lehetett), + a jelenlegi fájlra mutató
  link megjelenítése a szerkesztő ablakban

## v1 – 2026-09-29
- Verziókövetés bevezetése (ez a fájl + megjelenítés a rendszeradmin felületen)
- Belső hibaüzenetek hibakóddal ellátva + hibakód-magyarázatok a rendszeradmin felületen
- Gépvizsgálati jegyzőkönyv: hibaelhárítási határidő mező, minősítés szerinti záró szövegek,
  alkalmazott előírások/szabványok, soron következő vizsgálat (MSZ 9750 táblázat)
- Üzemóra megadása a vizsgálati lapon (opcionális, teherfelvevő eszközöknél nem jelenik meg)
- Vizsgálati lap: nyers 422-es hibaoldal javítása, jövőbeli dátum tiltása, "Kivonva" státuszú
  gépnél magyarázó üzenet, "Módja" mező többválasztóssá alakítva
- KRITIKUS: jogosultság-eszkaláció javítása (POST /szerkeszt-felhasznalo)
- KRITIKUS: cross-tenant QR-IDOR javítás (mobile_qr.py)
- Stored XSS javítások (dashboard, tömeges matrica, import-riportok, QR-menü, épület/katalógus-listák)
- Login rate limiting, szerver-oldali jelszóerősség-ellenőrzés, timing-alapú user-enumeráció elleni védelem
- Feltöltött kép/PDF/DOCX/XLSX fájlok tartalom-ellenőrzése (nem csak a kiterjesztés alapján)
- Hibaüzenet-szivárgás megszüntetése, törlő végpontok szigorítása, chunked feltöltési méretkorlát
