191 lines
8.8 KiB
Markdown
191 lines
8.8 KiB
Markdown
# 📋 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
|
||
|