Files
service-finder/docs/profile_person_user_audit_2026-06-06.md
2026-06-10 08:06:07 +00:00

191 lines
8.8 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📋 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