# Jegyzőkönyv Generátor 3.0.5

Asztali alkalmazás HRAMN jegyzőkönyvek szerkesztéséhez, mentéséhez,
HTML-exportjához és kereshető szöveget tartalmazó PDF előállításához.
Az alkalmazás PySide6/Qt 6 alapú, a koordináta-átszámítást a pyproj,
a sablonkezelést a Jinja2 végzi.

A 3.0.5 kiadás külön könyvtárban él; a korábbi program fájljait nem
írja felül. A régi, weboldal által olvasott publikus mezőnevek az exportban
változatlanok maradnak.

## Projektformátum és adatbiztonság

Az új natív projekt egy teljes `valami.jkvproj` **könyvtár**, benne a
`project.json` és a `media/` mappa. Másik gépre mindig az egész `.jkvproj`
mappát kell átmásolni, nem csak a JSON-t. Mentéskor a program a kiválasztott
képekről stabil pillanatképet készít, tartalom alapján ellenőrzi őket, majd
hash-alapú néven a projektbe másolja. Megnyitáskor a generált képfájlok
ellenőrzőösszegét is ellenőrzi.

A `project.json` atomi cserével és folyamatok közötti operációsrendszer-szintű
zárral készül. A `.project-save.lock` rejtett fájl szándékosan a mappában
marad; nem jelent aktív zárat, és az egész projektmappával együtt biztonságosan
másolható. Az aktív zárat maga az operációs rendszer tartja, ezért összeomlás
után automatikusan felszabadul.

A régi, séma nélküli JSON importja külön felhasználói jóváhagyást igényel,
mert külső helyi fájlokra hivatkozhat. Import után új `.jkvproj` formátumba
kell menteni. Ismeretlen jövőbeli és weboldal-specifikus adatmezők mentéskor
megmaradnak.

## HTML-, térképi és PDF-kimenet

A mappás export önállóan, hálózat nélkül használható, és többek között ezt
tartalmazza:

- a megjeleníthető `<azonosító>.html` dokumentumot;
- az összes stabil régi publikus és az új opcionális mezőt tartalmazó,
  HTML-be ágyazott `report-data` gépi adatot;
- HTML-be ágyazott, szabványos hosszúság/szélesség sorrendű GeoJSON pontot;
- HTML-be ágyazott SHA-256 asset-leltárt, benne a végleges PDF-fel;
- kizárólag WebP formátumú, legfeljebb 650 pixel széles webes képmásolatokat;
- helyi `style/`, `media/` és beágyazható Noto Sans font-erőforrásokat.

A HTML megtartja a korábbi osztály- és `data-field` szerződést, emellett
opcionális canonical, Open Graph, Twitter, geo metaadatot és JSON-LD
`Dataset`/`Place` leírást ad. A felhasználói szöveg HTML-escape-et kap, a
külső URL-ek és képek ellenőrzöttek. A nyomtatási CSS A4-re készült, a hosszú
megjegyzések, licencek és további képek több oldalra törhetnek. A PDF vektoros,
a magyar szöveg kijelölhető és kereshető.

A nyers légifelvételek szenzora a `nyers_felvetel_szenzor`, a pontfelhő
pontjainak száma pedig a `las_pontok_szama` kulcson érhető el; utóbbi
mértékegységét a `las_pontok_szama_unit` tárolja. Mindkettő
opcionális és üres alapértékű, ezért a korábbi projektek változtatás nélkül
betölthetők; üres új mezőknél a régi rendelkezésre-állási táblázat formája is
változatlan marad.

Az Áttekintő kép képaláírásának szerkeszthető alapértéke „A terület átnézeti
képe”. Régi vagy üres feliratú projekt betöltésekor, illetve a fő kép törlése
után ez az alapérték áll vissza; egyedi képaláírás szabadon megadható.

A SEO-kulcsszólista automatikusan `HRAMN`, projektmegnevezés, dátum,
`ortofotó`, `modell`, `pontfelhő`, `fotogrammetria` sorrendben készül. A
kanonikus cím a végleges tárhely ismeretéig üresen hagyható. Üres kézi
megosztásikép-URL esetén a mappás HTML az Áttekintő képet használja Open Graph
és Twitter képként; az egyfájlos HTML nem másolja be másodszor a nagy data
URI-t a metaadatba.

A látható HTML és a beépített előnézet a korábbi program bevált sablonját,
szövegsorrendjét és képernyős CSS-ét használja. A kompatibilitást a régi CSS
pontos SHA-256 lenyomata, több képernyőszélességű pixel-összehasonlítás és egy
valódi régi projekt 4 oldalas PDF-regressziója védi. A hosszú megjegyzések
nyomtatáskor legalább 2+2 soros, árvasor nélküli oldaltörést kapnak, a záró
tájékoztató és aláírás pedig együtt marad.

Az exportmappát csak a teljes HTML+PDF+manifest elkészülte után publikálja a
program. A félbemaradt staging/backup állapotokat a következő indításkor
helyreállítja vagy karanténba/takarításra teszi; ilyen figyelmeztetés után az
érintett exportgyökeret kiadás előtt kézzel is ellenőrizni kell.
Mentetlen vagy módosított projekt exportálásakor a program előbb projektet
ment; új projektnél Mentés másként párbeszédet nyit, és megszakított mentés
esetén az export sem indul el.

## Fejlesztői indítás

Python 3.11–3.14 támogatott. Linux/macOS shellben:

```bash
python3 -m venv .venv
.venv/bin/python -m pip install -e ".[test]"
.venv/bin/python -m jegyzokonyv
```

Windows PowerShellben:

```powershell
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[test]"
.\.venv\Scripts\python.exe -m jegyzokonyv
```

A tesztek futtatása:

```bash
python -m pytest
```

## Normál és portable mód

Normál módban a csomagolt program a felhasználó saját konfigurációs és
adatkönyvtárát használja. A program erőforrásfája csak olvasható; a
projektek, exportok és naplók nem kerülnek a telepítési mappába.

A kiadott Windows portable ZIP és Linux portable TAR már tartalmazza a
`portable.flag` jelzőt, ezért kibontás után azonnal hordozható módban indul.
Forrásból vagy normál onedir mappából ugyanez a
`portable.flag.example` fájl `portable.flag` néven történő másolásával
kapcsolható be a `JegyzokonyvGenerator` vagy `JegyzokonyvGenerator.exe`
mellett. A program ekkor ugyanott egy `data` könyvtárat hoz létre, és minden
írható adatot abban tart. Írásvédett adathordozóról a portable mód nem tud
menteni.

Egy tisztán mentett aktív projektnél a munkamenet-konfiguráció csak a projekt
hivatkozását tárolja, nem másolja bele újra a teljes jegyzőkönyvet. Projekt
nélküli visszaállított űrlapot a program nem mentett munkának tekint, ezért
bezárás vagy másik projekt megnyitása előtt rákérdez.

Parancssorból a `--portable` kapcsoló is használható:

```bash
JegyzokonyvGenerator --portable
```

## Natív kiadások

A PyInstaller és a Nuitka nem keresztfordító. Windows `.exe` kizárólag
natív Windows buildkörnyezetben, Linux bináris natív Linuxon készül. A
projekt ehhez az alábbi belépési pontokat adja:

- Linux onedir: `scripts/build_linux.sh`
- Linux Nuitka standalone: `scripts/build_linux_nuitka.sh`
- Windows onedir: `scripts/build_windows.ps1`
- Windows telepítő EXE: `scripts/build_windows_installer.ps1`
- Windows Nuitka standalone: `scripts/build_windows_nuitka.ps1`

A pontos előfeltételek és a release-folyamat a [BUILD.md](BUILD.md) fájlban
található. A Qt WebEngine sok kísérő binárist és erőforrást igényel, ezért a
portable kiadás egyben kibontandó ZIP/TAR archívum. Windowsra emellett egyetlen
átadható telepítő EXE készíthető, amely telepítéskor ezt a teljes fájlfát bontja
ki, Start menü parancsikont és eltávolítót hoz létre.

## Forráskód és visszafejtés

A PyInstaller kiadásban a saját `.py` fájlok nem jelennek meg olvasható
szövegként, de a csomag Python bytecode-ja megfelelő eszközzel visszafejthető.
A Nuitka C/C++ kóddá fordítása ezt jelentősen megnehezítheti, de az sem
feltörhetetlen. Jelszót, privát kulcsot, API-kulcsot vagy más titkot egyik
binárisba sem szabad beégetni. Valódi titok csak hozzáférés-védett szerveren
vagy operációsrendszer-szintű titoktárban kezelhető.

A Nuitka kiadás a saját alkalmazásmodulokat fordítja. Az LGPL-es
PySide6/shiboken6 Python-indítómodulok és natív Qt-könyvtárak külön,
cserélhető komponensek; ezt a build a Nuitka riportból is ellenőrzi. A
megengedő licencű Python-segédcsomagok fordítva kerülhetnek a binárisba, de
eredeti licencszövegük minden esetben a kiadás része.

## Licencek

Az ECOMOSAIC Kft. saját kódjának feltételeit a [LICENSE.txt](LICENSE.txt)
tartalmazza. A harmadik féltől származó komponensek saját feltételei ettől
függetlenek; lásd a [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) fájlt.

A build előtt a licencgyűjtő az aktuális, pontosan rögzített csomagokból
másolja ki az eredeti licencszövegeket. Hiány esetén a build leáll. Ez a
technikai ellenőrzés nem helyettesíti a kiadó jogi felülvizsgálatát, különösen
a Qt/PySide licencelés, a fontok, logók és fényképek esetében.
A dinamikus Qt/PySide-könyvtárak cseréjének és a megfelelő forrás
elérhetőségének kiadói ellenőrzőlistája a
[QT_LGPL_COMPLIANCE.md](QT_LGPL_COMPLIANCE.md) fájlban van.
