233 lines
11 KiB
Markdown
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.
|