# emelog

FastAPI alapú webalkalmazás (SQLAlchemy + Jinja2), amely emelőgép-vizsgálati, EBK
(munkavédelmi), tűzvédelmi és VIVÜ modulokat kezel: gépek/ügyfelek nyilvántartása,
ellenőrzések, riportok (PDF/Excel export), felhasználó- és jogosultságkezelés.

## Technológia

- Python 3.13, FastAPI, Uvicorn
- SQLAlchemy ORM - MariaDB/MySQL éles környezetben, helyi SQLite fallback fejlesztéshez
- Jinja2 sablonok
- JWT alapú bejelentkezés (PyJWT + bcrypt)
- Opcionális AI adattábla-felismerés (Anthropic API)

## Fejlesztői környezet beállítása

1. Klónozd a repót, majd hozz létre virtuális környezetet:
   ```bash
   python -m venv .venv
   # Windows:
   .venv\Scripts\activate
   # Linux/Mac:
   source .venv/bin/activate
   ```
2. Telepítsd a függőségeket:
   ```bash
   pip install -r requirements.txt
   ```
3. Másold az `.env.example` fájlt `.env` néven, és töltsd ki a saját értékeiddel
   (SECRET_KEY, DB_*, ANTHROPIC_API_KEY - ez utóbbi opcionális; az SMTP_* már csak tartalék, az e-mail küldést a rendszeradmin felületen kell beállítani).
4. Helyi fejlesztéshez a legegyszerűbb, ha nincs `.env`-ben megadott MariaDB-hez
   hozzáférésed: hozz létre egy üres `emelo_reg.db` SQLite fájlt a projekt
   mellett - ekkor a rendszer automatikusan azt használja MariaDB helyett.
5. Indítás:
   ```bash
   uvicorn main:app --reload
   ```

## Dokumentáció

- [`docs/EMAIL_RENDSZER.md`](docs/EMAIL_RENDSZER.md) - az e-mail rendszer: SMTP-beállítások a
  rendszeradmin felületről, titkosított jelszó, telepítési lépések, biztonsági döntések, ütemterv.
- [`docs/EMAIL_SOR.md`](docs/EMAIL_SOR.md) - a kimenő levelek sora, a sebességkorlát, az ismétlődő hibák szűrése és az ütemező egyszeri futása.
- [`docs/LOGIN_VEDELEM.md`](docs/LOGIN_VEDELEM.md) - bejelentkezés-védelem: adatbázis-alapú számláló, kitiltások, a rendszeradmin értesítése és feloldása, vészfeloldás a szerverről.
- [`docs/FELIRATKOZASOK.md`](docs/FELIRATKOZASOK.md) - levél-feliratkozások: szerepkörönkénti szabályok (kötelező/alapból be/ki/tiltott), a felhasználó saját "Értesítéseim" oldala, hatókör- és adatvédelmi szabályok.
- [`docs/AKTIVALAS.md`](docs/AKTIVALAS.md) - új felhasználó aktiválása e-mailben: egyszer használható link, jelszó beállítása a linken, újraküldés, kézi aktiválás, biztonsági döntések.
- [`docs/JOGOSULTSAGOK.md`](docs/JOGOSULTSAGOK.md) - szerepkörök, jogosultságok, ki hozhat létre felhasználót/céget/projektet, modulonkénti "ki mit tehet" mátrixok és a kódaudit hibalistája (J-01...J-28); részletek: `docs/jogosultsag_reszletes/`, a jelenlegi felhasználók: `docs/JOGOSULTSAGOK_FELHASZNALOK.md`.
- [`docs/EGYIDEJU_BELEPES.md`](docs/EGYIDEJU_BELEPES.md) - az egyidejű belépés tiltása (v32): egy fiók egyszerre csak egy helyen, az új belépés kidobja a régit, a rendszeradmin kivétel; munkamenet-azonosító, kódhelyek, telepítési teendők; v33: hibakód (E-LIC-01), naplózás, opcionális rendszeradmin-értesítés.
- [`docs/RA_DASHBOARD.md`](docs/RA_DASHBOARD.md) - a rendszeradmin áttekintő dashboard (v30): kártyák, az "Aktív problémák" szabályai, kártya-kapcsolók és tárolásuk, navigáció, bővítés, tesztek.
- [`docs/PROFIL_ES_SZABADSAG.md`](docs/PROFIL_ES_SZABADSAG.md) - a Profilom oldal (v35: jelszó, értesítések, 2FA-mentőkód egy helyen) és a "Szabadságon vagyok" kapcsoló: szabályok, a visszatartott levelek és az egyetlen összegző levél, a Beállítások "E-mail riportok" fülén (v41) ugyanezek a saját levelezési beállítások, automatikus vég, tranzakció, kódhelyek, korlátok, tesztek.
- [`docs/JELSZO_HAZIREND.md`](docs/JELSZO_HAZIREND.md) - a cég jelszó-házirendje (v36): kötelező jelszócsere (30-180 nap) emlékeztető levéllel, bonyolultság, jelszó-előzmény, gyengeség-figyelmeztetés a cégadminnak; a Beállítások külön "Jelszó-házirend" fülén (v41) az űrlap közvetlenül szerkeszthető; opcionális, működés, kódhelyek, korlátok, tesztek.
- [`docs/DESIGN_RENDSZER.md`](docs/DESIGN_RENDSZER.md) - az egységes design (v42-től): közös `<head>` / lábléc / téma-kapcsoló / stílus (`_head_kozos.html`, `_lablec.html`, `emelog.css`, `tema.js`), a méret-skála, a kivételek és az "új oldal készítésekor" szabály; a rendszeradmin közös fejléc (`_fejlec_rendszeradmin.html`, v43: `ra_aktiv` / `ra_ikon` / `ra_cim` + include, kitűző, menüsor) az emelőgépes közös fejléc (`_fejlec_emelogep.html`, v44: `eg_aktiv` / `eg_ikon` / `eg_cim` + include) az EBK közös fejléc (`_fejlec_ebk.html`, v45: `ebk_aktiv` + include) a VIVÜ közös fejléc (`_fejlec_vivu.html`, v46: `vivu_aktiv` + include) a tűzvédelmi közös fejléc (`_fejlec_tuzvedelem.html`, v47: `tuz_aktiv` + include) az emelőgépes Beállítások oldal fejléce + fülei (`.el-fulek`, v48) és a gépkereső + a service worker-es oldalak (v49, `routers/offline_sync.py`: `emeloreg-offline-v3`) és a kis gombok egységes mérete (`.btn-sm`, v50) és az okostelefonos alap (v51: `table-responsive` mindenhol, érintési méret, görgethető fülsor, `tools/mobil_felmeres.py`) a helyszíni QR-oldalak a közös designon (v52) és a középre igazított telefonos fejléc (v53); ultrawide monitoron az oldal legfeljebb 1920 px (Full HD) széles és középre kerül (`--el-max-szelesseg`, v62); a fejlécek adatait a `modul_fejlec_adat` Jinja-globál adja.
- [`docs/MOBIL_TERV.md`](docs/MOBIL_TERV.md) - az okostelefonra optimalizált (reszponzív) kinézet terve ÉS megvalósítási naplója (v51-v58; az asztali kinézet kompakt, érintésre alkalmas változata): a v50 utáni mért állapot (390 / 820 px, 40+ oldal), alapelvek, tokenek, fejléc / menü / táblázat / űrlap / modál terv, a megvalósított szeletek (v51-v55, v57, v58; a v56 közbeékelt kérés), a lezáró mérés (5.2), nyitott kérdések.
- [`docs/RENDSZERNAPLO.md`](docs/RENDSZERNAPLO.md) - a rendszeradmin összes-naplója (v37): dashboard-kártya (utolsó 15 esemény) + teljes napló cégre / felhasználóra / kategóriára / dátumra / szövegre szűrve, lapozva, CSV-exporttal; kategóriák, a cég- és felhasználó-szűrő szabályai
- [`docs/TIPUS_ATVETEL.md`](docs/TIPUS_ATVETEL.md) - típus alapú adatátvétel új gép felvételekor (v79): az ajánló végpont, mely adatok vehetők át (és melyek soha), a mentéskori ellenőrzés és a két eseménynapló-sor.
- [`docs/KOZOS_DOKUMENTUM.md`](docs/KOZOS_DOKUMENTUM.md) - megosztott dokumentumok (v80): a Használati utasítás / Gépkönyv / Adatlap egy fájlra hivatkozó több azonos típusú gép, közös mappa, kiszolgálás, törlés-számlálás.
- [`docs/CEG_SABLONOK.md`](docs/CEG_SABLONOK.md) - az ellenőrzőlista-sablon feltöltő szkriptek futtatása a Cégek oldalról (v81): új cégnél és meglévő cégnél jelölőnégyzettel, árnyékolás, mit ír felül, hibakezelés.
- [`docs/ATADAS.md`](docs/ATADAS.md) - átadó-jegyzet a közös fejlesztéshez (v83): hol kezdj el olvasni, az állandó szabályok, a tesztelési menet, a buktatók, a telepítési megjegyzések és a nyitott pontok - elsősorban új fejlesztőnek / új Claude-munkamenetnek
- [`docs/GET_ATTEKINTES.md`](docs/GET_ATTEKINTES.md) - a GET-kérések teljes átvizsgálása (mi maradhat GET, mi ment/megy POST-ra és miért), a method nélküli űrlapok javítása és a jelszó-megerősítés (v27), a regressziós teszt (`tests/t_get_audit.py`) kivétel-listájával.
- [`docs/FELHASZNALOK_LISTA.md`](docs/FELHASZNALOK_LISTA.md) - a rendszeradmin teljes felhasználólistája (`/felhasznalok`, v24) a szerepkör/cég/extra cég módosítás (v25) és a teljes felhasználókezelés (v26 Kezelés ablak: szerkesztés, jelszó, 2FA, aktív/inaktív, törlés): mit mutat, ki éri el, védőkorlátok, mellékhatások, audit napló, használat.
- [`docs/KETLEPCSOS_HITELESITES.md`](docs/KETLEPCSOS_HITELESITES.md) - kétlépcsős hitelesítés (TOTP): a döntött szabályok, az 5 fázis, az adatmodell, a `mfa_utils.py` és a biztonsági döntések (mind az 5 fázis kész: alapok, bejelentkezés kódkéréssel, vészfeloldó szkript, kötelező QR-beállítás, cégkapcsoló a rendszeradmin felületen + kizárás elleni védelem, elveszett eszköz kezelése jelszó-visszaállítással; v34: mentőkódok).
- [`tests/README.md`](tests/README.md) - az automatikus tesztek: mit fednek le, hogyan kell futtatni (`python tests/futtat.py`), és miért nem nyúlnak a helyi adatbázishoz.
- [`CHANGELOG.md`](CHANGELOG.md) - verziótörténet (a rendszeradmin "Rendszerinformáció" oldala is ebből olvas).

## Megjegyzés

A `.env` fájl és az `uploads/` / `import_fotok/` mappák (feltöltött dokumentumok,
fényképek) nincsenek verziókezelve - lásd `.gitignore`.
