# 📋 Person & User Profil Adatkezelés Audit (2026-06-06) ## 🎯 Cél A Person és User entitások által nyilvántartott adatok összehasonlítása a frontend ProfileView által megjelenített és szerkeszthető mezőkkel. --- ## 📊 Adatbázis Modellek (Backend) ### 🧑 Person (identity.persons) – Természetes Személy **Séma:** `identity.persons` | Mező | Típus | Nullable | Cél | |------|-------|----------|-----| | `id` | BigInteger | **NOT NULL** | Elsődleges kulcs | | `id_uuid` | UUID | **NOT NULL** | Külső API-khoz UUID azonosító | | `address_id` | UUID | NULL | FK → `system.addresses` | | `identity_hash` | String(64) | NULL | Deduplikáció: Név+Anyja+DOB hash | | **`last_name`** | String | **NOT NULL** | ✅ **Frontend használja** | | **`first_name`** | String | **NOT NULL** | ✅ **Frontend használja** | | **`phone`** | String | NULL | ✅ **Frontend használja** | | **`mothers_last_name`** | String | NULL | ✅ **Frontend használja** | | **`mothers_first_name`** | String | NULL | ✅ **Frontend használja** | | **`birth_place`** | String | NULL | ✅ **Frontend használja** | | **`birth_date`** | DateTime | NULL | ✅ **Frontend használja** | | **`identity_docs`** | JSON | **NOT NULL** (default `{}`) | ✅ **Részben használva** (ID_CARD, LICENSE) | | **`ice_contact`** | JSON | **NOT NULL** (default `{}`) | ❌ **NEM használja a frontend!** | | `lifetime_xp` | BigInteger | **NOT NULL** (default -1) | ❌ **Gamification – nem látható** | | `penalty_points` | Integer | **NOT NULL** (default -1) | ❌ **Gamification – nem látható** | | `social_reputation` | Numeric(3,2) | **NOT NULL** | ❌ **Nem látható** | | `is_sales_agent` | Boolean | **NOT NULL** | ⚙️ **Belső rendszer, nem látható** | | `is_active` | Boolean | **NOT NULL** | ⚙️ **Belső rendszer** | | `is_ghost` | Boolean | **NOT NULL** | ⚙️ **Soft-delete logika** | | `merged_into_id` | BigInteger | NULL | FK (self) – MDM merge logika | ### 👤 User (identity.users) – Login Entitás **Séma:** `identity.users` | Mező | Típus | Nullable | Frontend látható? | |------|-------|----------|-------------------| | `id` | Integer | **NOT NULL** | – | | **`email`** | String | **NOT NULL** (unique) | ✅ **Readonly a profilban** | | `hashed_password` | String | NULL | ✅ **Külön modal változtatáshoz** | | **`role`** | UserRole ENUM | **NOT NULL** | ❌ **Nem látható** | | `person_id` | BigInteger | NULL | FK | | `subscription_plan` | String(30) | **NOT NULL** (default 'FREE') | ❌ **Nem látható** | | `subscription_expires_at` | DateTime | NULL | ❌ **Nem látható** | | `is_vip` | Boolean | **NOT NULL** | ❌ **Nem látható** | | `referral_code` | String(20) | NULL (unique) | ❌ **Nem látható** | | **`preferred_language`** | String(5) | **NOT NULL** (default "hu") | ❌ **Nem látható/szerkeszthető!** | | **`region_code`** | String(5) | **NOT NULL** (default "HU") | ❌ **Nem látható!** | | **`preferred_currency`** | String(3) | **NOT NULL** (default "HUF") | ❌ **Nem látható!** | | **`ui_mode`** | String(20) | **NOT NULL** (default "personal") | ❌ **Nem látható!** | | `alternative_emails` | JSON | **NOT NULL** (default `[]`) | ❌ **Nem látható** | | `email_history` | JSON | **NOT NULL** (default `[]`) | ❌ **Nem látható** | ### 🏠 Address (system.addresses) | Mező | Típus | Frontend használja? | |------|-------|---------------------| | **`street_name`** | String(200) | ✅ `address_street_name` | | **`street_type`** | String(50) | ✅ `address_street_type` | | **`house_number`** | String(50) | ✅ `address_house_number` | | **`stairwell`** | String(20) | ✅ `address_stairwell` | | **`floor`** | String(20) | ✅ `address_floor` | | **`door`** | String(20) | ✅ `address_door` | | **`parcel_id`** (HRSZ) | String(50) | ⚠️ **EditForm-ban van, de UI-on HIÁNYZIK!** | | `.zip` (property) | String | ✅ `address_zip` | | `.city` (property) | String | ✅ `address_city` | --- ## 🖥️ Frontend ProfileView.vue ### ✅ Megjelenített és Szerkeszthető Mezők #### 1️⃣ Fiók Adatok (User) - `email` ❌ **Readonly** - `password` ✅ **Külön modal** #### 2️⃣ Személyes Adatok (Person) - `first_name`, `last_name`, `phone` - `birth_place`, `birth_date` - `mothers_last_name`, `mothers_first_name` #### 3️⃣ Okmányok (identity_docs JSON) - **ID_CARD**: `number`, `expiry_date` - **LICENSE**: `number`, `expiry_date`, `categories` #### 4️⃣ Lakcím (Address) - `address_zip`, `address_city` (auto-fill) - `address_street_name`, `address_street_type`, `address_house_number` - `address_stairwell`, `address_floor`, `address_door` - ⚠️ **`address_hrsz` NINCS UI-on!** --- ## 🚨 KRITIKUS HIÁNYOSSÁGOK ### 🔴 1. HRSZ (helyrajzi szám) mező hiányzik a UI-ból **Probléma:** Az `editForm.address_hrsz` reactive változóban szerepel, a backend támogatja (`Address.parcel_id`), de **nincs input mező a template-ben**. **Hatás:** Vidéki ingatlanok (telek, tanya) esetén a HRSZ kötelező adat lehet, ezt jelenleg nem lehet megadni. ### 🟠 2. Vészhelyzeti Kapcsolattartó (ICE Contact) hiányzik **Probléma:** A `Person.ice_contact` JSON mező az adatbázisban létezik (default `{}`), de **sehol sem szerkeszthető**. **Hatás:** Balesetnél vagy vészhelyzetben nem tud a rendszer értesítést küldeni. **Javasolt struktúra:** ```json { "name": "Nagy János", "relationship": "testvér", "phone": "+36 30 123 4567", "email": "janos.nagy@example.com" } ``` ### 🟡 3. User Preferenciák nem szerkeszthetők **Probléma:** Az alábbi User-szintű beállítások NEM láthatók/módosíthatók: - `preferred_language` (jelenleg "hu" fix) - `region_code` (jelenleg "HU" fix) - `preferred_currency` (jelenleg "HUF" fix) - `ui_mode` (personal/fleet váltás) **Hatás:** - A nyelvet a LanguageSwitcher komponens kezeli, de nem kerül mentésre a User táblába - A többdevizás költségkövetés (EUR, USD) nem működik - A "personal" vs "fleet" mód nem váltható ### 🟢 4. Passport (Útlevél) és Tax Number (Adószám) hiányzik **Javasolt bővítés (identity_docs JSON):** ```json { "PASSPORT": { "number": "...", "expiry_date": "...", "issuing_country": "HU" }, "TAX_ID": { "number": "...", "country": "HU" } } ``` ### 🔵 5. Gamification és Trust Score adatok nem láthatók **Probléma:** A felhasználó **nem láthatja a saját** statisztikáit: - `Person.lifetime_xp`, `penalty_points`, `social_reputation` - `UserTrustProfile.trust_score` (Gondos Gazda Index) **Hatás:** A gamification funkciók nem motiválják a felhasználót. **Megoldás:** A backend már támogatja: `GET /users/me/trust` ### 🟣 6. Subscription (Előfizetés) információk elrejtve **Probléma:** `subscription_plan`, `subscription_expires_at`, `is_vip` **sehol sem látszódnak**. **Hatás:** A felhasználó nem tudja, meddig érvényes a PRO csomagja. --- ## 📝 ÖSSZEFOGLALÓ TÁBLÁZAT | Kategória | Backend (DB) | Frontend (UI) | Státusz | |-----------|--------------|---------------|---------| | **Person főbb adatok** | ✅ Teljes | ✅ Teljes | 🟢 **SZINKRONBAN** | | **Identity Docs (ID, License)** | ✅ JSON | ✅ Szerkeszthető | 🟢 **SZINKRONBAN** | | **Lakcím alapadatok** | ✅ 8 mező | ✅ 8 mező | 🟢 **SZINKRONBAN** | | **HRSZ (parcel_id)** | ✅ Létezik | ❌ **Hiányzik** | 🔴 **GAP!** | | **ICE Contact** | ✅ JSON | ❌ **Hiányzik** | 🔴 **GAP!** | | **User preferenciák** | ✅ 4 mező | ❌ **Nem szerkeszthető** | 🟠 **GAP!** | | **Passport, Tax ID** | ⚠️ JSON-ban lehetne | ❌ **Hiányzik** | 🟡 **Fejlesztendő** | | **Gamification** | ✅ Létezik | ❌ **Nem látható** | 🟡 **Fejlesztendő** | | **Subscription** | ✅ Létezik | ❌ **Nem látható** | 🟡 **Fejlesztendő** | --- ## 🎯 KÖVETKEZŐ LÉPÉSEK ### 🔴 Kritikus (Immediate) 1. **HRSZ mező hozzáadása** a ProfileView.vue-hoz (~10 perc) 2. **PersonUpdate schema audit**: Megkeresni a sémát ### 🟠 Fontos (Short-term) 3. **ICE Contact szerkesztő** (~1 óra) 4. **User Preferences** szerkeszthetővé tétele (~2 óra) ### 🟡 Hasznos (Mid-term) 5. **Passport és Tax ID** (~1 óra) 6. **Gamification/Trust Score megjelenítés** (~30 perc) 7. **Subscription info megjelenítése** (~20 perc) --- **Dokumentum:** 2026-06-06 | Service Finder System Audit