Files
service-finder/docs/full_stack_disconnect_analysis_2026-06-16.md

233 lines
11 KiB
Markdown

# 🚨 Full Stack Disconnect Analysis — "Extrák" Hiányzó Checkbox Grid
**Dátum:** 2026-06-16
**Elemző:** Rendszer-Architect
**Scope:** VehicleFormModal (Frontend) ↔ Asset Schema (Backend) ↔ Asset DB Model (PostgreSQL)
---
## 🔍 1. FRONTEND VIZSGÁLAT — VehicleFormModal.vue
### Jelenlegi lépések (line 870-875):
| Index | Lépés neve | Tartalom |
|-------|------------|----------|
| 0 | **Azonosítás** | Kategória, VIN, Rendszám |
| 1 | **Alapadatok** | Márka, Modell, Évjárat, Üzemanyag, **Kivitel/Felszereltség (összemosva)**, Becenév, Km óra |
| 2 | **Műszaki** | Hengerűrtartalom, Teljesítmény kW, Hajtás, Váltó, Karosszéria (body_type), Klíma, Ajtók, Ülések, EV blokk, Okmányadatok |
| 3 | **Extrák** | Saját besorolás, Saját megjegyzés + Features checkbox grid (csak `personal` esetén!) |
### Step 3 ("Extrák") valós tartalma (line 684-764):
```html
<div v-if="step === 3" class="space-y-4">
<p>Itt adhatsz hozzá extra információkat a járművedhez.</p>
<!-- Saját besorolás (condition) select -->
<!-- Saját megjegyzés (notes) input -->
<!-- Features / Extrák - CSAK personal járműveknél -->
<div v-if="form.vehicle_class === 'personal'" class="pt-2">
<!-- Technical, Interior, Exterior, Multimedia, Other checkbox groups -->
</div>
</div>
```
### ⚠️ Kritikus probléma:
A **75+ checkbox** csak akkor jelenik meg, ha a felhasználó `personal` (személyautó) kategóriát választott. Minden más járműosztálynál (motorcycle, light_commercial, commercial, work_machine, trailer, bus, camper, boat, aircraft, other) a Step 3 tényleg **üres** — csak "Saját besorolás" és "Saját megjegyzés" látszik. Ez magyarázza a képernyőképen látott üres felületet!
### A features tömörítve individual_equipment.car_specs.features-ként megy a backendbe
### Mely fájlba lettek a checkboxok?
A checkbox grid a VehicleFormModal.vue fájlban van (line 710-763), de **nem kapta meg a saját dedikált komponensét**, és **nincs külön "Extrák" almappája a kategóriáknak** (Beltér/Kültér/Multimédia/Egyéb). Minden egy `form.features` string tömbben van tárolva, nem pedig strukturált JSONB-ként.
---
## 🗄️ 2. ADATBÁZIS & SÉMA VIZSGÁLAT
### Tervező által kért mezők vs Valós állapot
#### ✅ Azonosítás
| Kért mező | Backend (DB Model) | Pydantic Schema | Frontend Form | Státusz |
|-----------|-------------------|-----------------|---------------|---------|
| Márka | Asset.brand ✅ | AssetCreate.brand ✅ | form.brand ✅ | ✅ OK |
| Modell | Asset.model ✅ | AssetCreate.model ✅ | form.model ✅ | ✅ OK |
| Típusjel | ❌ **NINCS** | ❌ **NINCS** | ❌ **NINCS** | ❌ **HIÁNYZIK** |
> **"Típusjel"** — ez a mező sehol nem létezik önálló entitásként. A `trim_level` ("Kivitel / Felszereltség") próbálja helyettesíteni, de a Tervező szerint a Típusjel (pl. "320i", "X5 xDrive30d") külön fogalom.
#### ✅ Általános
| Kért mező | Backend | Schema | Frontend | Státusz |
|-----------|---------|--------|----------|---------|
| Km óra állás | current_mileage ✅ | ✅ | ✅ | ✅ OK |
| Évjárat | year_of_manufacture ✅ | ✅ | ✅ | ✅ OK |
| Kivitel (Karosszéria) | ❌ body_type a JSONB-ben | ❌ nincs külön mező | form.body_type (Step 2-ben!) | ❌ **ROSSZ helyen** |
| Állapot | condition_score ✅ | ❌ **NINCS a sémában** | form.condition (string!) | ⚠️ **Inkonzisztens** |
> **"Kivitel (Karosszéria)"** — a `body_type` mező létezik a JSONB-ben (individual_equipment.car_specs.body_type), de a **"Műszaki" (Step 2)** fül alatt van, nem az alapadatok között. A Tervező szerint az Általános adatoknál kellene lennie, külön a "Felszereltségtől".
#### ✅ Műszaki
| Kért mező | Backend | Schema | Frontend | Státusz |
|-----------|---------|--------|----------|---------|
| Üzemanyag | fuel_type ✅ | ✅ | ✅ | ✅ OK |
| Hengerűrtartalom (cm³) | engine_capacity ✅ | ✅ | ✅ | ✅ OK |
| Teljesítmény (kW/LE) | power_kw ✅ | ✅ | ✅ (HP display) | ✅ OK |
| **Nyomaték (Nm)** | torque_nm ✅ **DB-ben** | ✅ AssetCreate.torque_nm | ❌ **NINCS input mező!** | ❌ **HIÁNYZIK** |
> **Nyomaték (torque_nm)** — a legkritikusabb hiányzó mező! A backend modellben (Asset.py sor 97) benne van, a Pydantic sémában (AssetCreate.torque_nm sor 151) benne van, de a frontend űrlapban **SEHOL** nincs input mező a Nyomaték megadására. Amikor a felhasználó elmenti az űrlapot, a torque_nm egyszerűen null marad.
#### ✅ Hajtáslánc
| Kért mező | Backend | Schema | Frontend | Státusz |
|-----------|---------|--------|----------|---------|
| Sebességváltó | transmission_type ✅ | ✅ | ✅ | ✅ OK |
| Hajtás | drive_type ✅ | ✅ | ✅ | ✅ OK |
#### ✅ Kényelem
| Kért mező | Backend | Schema | Frontend | Státusz |
|-----------|---------|--------|----------|---------|
| Klíma fajtája | JSONB-ben (ac_type) | ❌ nincs külön mező | form.ac_type ✅ | ⚠️ JSONB-be van rejtve |
#### ✅ Okmányok
| Kért mező | Backend | Schema | Frontend | Státusz |
|-----------|---------|--------|----------|---------|
| Forgalmi szám | JSONB-ben | ❌ nincs külön mező | ✅ | ⚠️ JSONB-ben |
| Törzskönyv szám | JSONB-ben | ❌ nincs külön mező | ✅ | ⚠️ JSONB-ben |
| Műszaki lejárat | JSONB-ben | ❌ nincs külön mező | ✅ | ⚠️ JSONB-ben |
| Okmány lejárat | JSONB-ben | ❌ nincs külön mező | ✅ | ⚠️ JSONB-ben |
#### ✅ Extrák (JSONB)
| Kért mező | Backend | Schema | Frontend | Státusz |
|-----------|---------|--------|----------|---------|
| Beltér | JSONB car_specs.features | individual_equipment | ✅ (checkbox) | ✅ OK |
| Kültér | JSONB car_specs.features | individual_equipment | ✅ (checkbox) | ✅ OK |
| Multimédia | JSONB car_specs.features | individual_equipment | ✅ (checkbox) | ✅ OK |
| Egyéb | JSONB car_specs.features | individual_equipment | ✅ (checkbox) | ✅ OK |
### További hiányzó mezők a frontendről (de backendben léteznek):
| Mező | DB Oszlop | Pydantic Schema | Frontend Input | Státusz |
|------|-----------|----------------|---------------|---------|
| curb_weight (saját tömeg) | ✅ | ✅ | ❌ | **HIÁNYZIK** |
| max_weight (össztömeg) | ✅ | ✅ | ❌ | **HIÁNYZIK** |
| cargo_volume_x (raktér hossz) | ✅ | ✅ | ❌ | **HIÁNYZIK** |
| cargo_volume_y (raktér szél.) | ✅ | ✅ | ❌ | **HIÁNYZIK** |
| roof_type (tető típus) | ✅ | ✅ | ❌ | **HIÁNYZIK** |
| audio_system_type (hangi) | ✅ | ✅ | ❌ | **HIÁNYZIK** |
---
## 🌐 3. API VÁLASZ VIZSGÁLAT
### GET /assets/vehicles/{id} (assets.py line 290-337)
A végpont az AssetResponse Pydantic modellt használja (response_model=AssetResponse). A from_attributes=True miatt az ORM Asset objektum automatikusan Pydantic-ként szerializálódik.
**A JSON válasz tartalmazza:**
- Az összes "sima" oszlopot (brand, model, engine_capacity, power_kw, torque_nm, transmission_type, drive_type, stb.)
- Az individual_equipment JSONB mezőt teljes egészében (benne car_specs, ev_specs, dates, documents)
- A catalog kapcsolódó objektumot (ha van)
**A frontend populateForm() (line 1162-1215) helyesen olvassa vissza a JSONB-t**, de a torque_nm sosem kerül beolvasásra, mert nincs hozzá input mező.
---
## 🎯 4. ÖSSZEGZÉS: A KAPCSOLAT MEGSZAKADÁSI PONTOK
### 1. 🔴 **Nyomaték (torque_nm) — Backend adat, frontend nélkül**
- **Hol:** DB Asset.torque_nm sor 97, Schema AssetCreate.torque_nm sor 151
- **Probléma:** A backend tárolja és a Pydantic séma támogatja, de a VehicleFormModal.vue egyetlen lépésében sincs input mező.
- **Következmény:** A flottavezetők soha nem adják meg a nyomatékot, a "Thick Digital Twin" koncepció adathiányos.
### 2. 🟠 **"Típusjel" mező teljes hiánya**
- **Hol:** Sehol az egész stack-ben
- **Probléma:** A Tervező által kért Típusjel (pl. "320i", "X5 xDrive30d") fogalma nem létezik. Csak a trim_level van.
### 3. 🟠 **"Kivitel" és "Felszereltség" összemosása**
- **Hol:** VehicleFormModal.vue Step 1 (line 376-409)
- **Probléma:** A trim_level egyszerre próbálja lefedni a karosszéria kivitelt ÉS a felszereltségi szintet.
### 4. 🟡 **Features checkbox grid csak personal osztálynál**
- **Hol:** VehicleFormModal.vue line 711
- **Probléma:** v-if="form.vehicle_class === 'personal'" — más osztályoknál tényleg üres az Extrák fül.
### 5. 🟡 **Hiányzó fizikai méret és tömeg mezők**
- curb_weight, max_weight, cargo_volume_x, cargo_volume_y — backendben vannak, de nincsenek a formban.
### 6. 🟡 **Okmányadatok JSONB-be rejtve**
- mot_expiry, document_expiry, reg_cert_number, title_cert_number a JSONB-ben, nem dedikált oszlopokban.
---
## 🏗️ 5. JAVASLAT: 7 LÉPÉSES ÚJ ŰRLAPSTRUKTÚRA
```
Step 0: 🚗 AZONOSÍTÁS
- Kategória (vehicle_class)
- Márka (brand)
- Modell (model)
- Típusjel (type_designation) ⬅️ ÚJ!
- Rendszám (license_plate)
- Alvázszám (vin)
Step 1: 📋 ÁLTALÁNOS ADATOK
- Évjárat (year_of_manufacture)
- Km óra állás (current_mileage)
- Kivitel / Karosszéria (body_type) ⬅️ Külön!
- Állapot / Saját besorolás (condition)
Step 2: ⚙️ MŰSZAKI ADATOK
- Üzemanyag (fuel_type)
- Hengerűrtartalom (engine_capacity)
- Teljesítmény (power_kw) + LE kijelzés
- Nyomaték (torque_nm) ⬅️ ÚJ!
- Hengerelrendezés (cylinder_layout)
Step 3: 🔧 HAJTÁSLÁNC
- Sebességváltó (transmission_type)
- Hajtás (drive_type)
Step 4: 🌡️ KÉNYELEM & KLÍMA
- Klíma fajtája (ac_type)
- Tető típus (roof_type) ⬅️ ÚJ!
- Hangrendszer (audio_system_type) ⬅️ ÚJ!
- Ajtók száma (door_count)
- Ülések száma (seat_count)
Step 5: 📄 OKMÁNYOK
- Műszaki érvényesség (mot_expiry)
- Okmány érvényesség (document_expiry)
- Forgalmi szám (registration_cert_number)
- Törzskönyv szám (title_cert_number)
Step 6: ✨ EXTRÁK (Felszereltség) - Dedikált komponens!
- Beltér (interior features)
- Kültér (exterior features)
- Multimédia (multimedia features)
- Technikai (technical features)
- Egyéb (other features)
- Súly & Méretek (curb_weight, max_weight, cargo)
```
---
## 📊 HIÁNYZÓ MEZŐK MASTER LIST
| # | Mező | DB/Séma | Frontend | Javasolt lépés |
|---|------|---------|----------|----------------|
| 1 | torque_nm | ✅ Van | ❌ NINCS | Step 2 |
| 2 | type_designation | ❌ NINCS | ❌ NINCS | Step 0 |
| 3 | curb_weight | ✅ Van | ❌ NINCS | Step 6 |
| 4 | max_weight | ✅ Van | ❌ NINCS | Step 6 |
| 5 | cargo_volume_x | ✅ Van | ❌ NINCS | Step 6 |
| 6 | cargo_volume_y | ✅ Van | ❌ NINCS | Step 6 |
| 7 | roof_type | ✅ Van | ❌ NINCS | Step 4 |
| 8 | audio_system_type | ✅ Van | ❌ NINCS | Step 4 |
---
## ⚡ AZONNALI TEENDŐK (Prioritási sorrendben)
1. **🟢 FRONTEND:** Add hozzá a `torque_nm` input mezőt a "Műszaki" (Step 2) lépéshez. Ez 5 perc fejlesztés és a legnagyobb adatveszteséget szünteti meg.
2. **🟡 FRONTEND:** Bontsd ki a features checkbox grid-et egy külön Vue komponensbe (`VehicleFeaturesGrid.vue`), és engedélyezd MINDEN járműosztálynál, ne csak personal-nál.
3. **🟡 FRONTEND+SCHEMA:** Válaszd szét a "Kivitel" (body_type) és "Felszereltség" (trim_level) fogalmakat.
4. **🔴 ARCHITECT TERV:** Készíts `logic_spec` dokumentációt az űrlap teljes átépítéséhez a fenti 7 lépéses struktúra alapján.