181 lines
9.3 KiB
Markdown
181 lines
9.3 KiB
Markdown
# 🚗 Jármű Adatfolyam Audit 2026-06-21
|
|
|
|
**Kártya:** #275 - Audit: Jármű adatfolyam (DB → API → Frontend) teljes körű elemzése
|
|
**Auditor:** Rendszer-Architect
|
|
**Státusz:** Kész
|
|
|
|
---
|
|
|
|
## 📋 Vizsgált Kérdések
|
|
|
|
1. **Dashboard jármű kártyák hova mutatnak?**
|
|
2. **Járművek oldalon milyen adatok látszanak?**
|
|
3. **Áttekintés (Overview) fül melyik adatbázis táblákból kapja az adatokat?**
|
|
4. **API kapcsolatok lefedik-e az összes adatbázis adatot?**
|
|
|
|
---
|
|
|
|
## 1. Dashboard Jármű Kártyák (VehicleCardStandard)
|
|
|
|
**Fájl:** `frontend/src/components/vehicle/VehicleCardStandard.vue`
|
|
|
|
**Linkelés:**
|
|
- `@click="$emit('click', vehicle')` → A parent komponens kezeli (pl. DashboardView, CompanyGarageView), ami megnyitja a `VehicleDetailModal`-t
|
|
|
|
**Kártyán megjelenő adatok és forrásaik:**
|
|
|
|
| Mező | Forrás (DB) | API |
|
|
|------|-------------|-----|
|
|
| `license_plate` | `vehicle.asset.license_plate` | `GET /assets/vehicles` |
|
|
| `brand` | `vehicle.asset.brand` | `GET /assets/vehicles` |
|
|
| `model` | `vehicle.asset.model` | `GET /assets/vehicles` |
|
|
| `year_of_manufacture` | `vehicle.asset.year_of_manufacture` | `GET /assets/vehicles` |
|
|
| `current_mileage` | `vehicle.asset.current_mileage` | `GET /assets/vehicles` |
|
|
| `engine` (kW / cm³) | `vehicle.asset.power_kw` / `engine_capacity` | `GET /assets/vehicles` |
|
|
| `fuel_type` | `vehicle.asset.fuel_type` | `GET /assets/vehicles` |
|
|
| `color` | `individual_equipment.color` (JSONB) | `GET /assets/vehicles` |
|
|
| `nextService` | `individual_equipment.dates.next_service` (JSONB) | `GET /assets/vehicles` |
|
|
|
|
---
|
|
|
|
## 2. Jármű Részletek (VehicleDetailModal)
|
|
|
|
**Fájl:** `frontend/src/components/vehicle/VehicleDetailModal.vue`
|
|
|
|
A modál **4 tab**-ot tartalmaz:
|
|
|
|
### Tab 1: Alapadatok (Basic Data)
|
|
- **Forrás:** `vehicle.asset` mezői + `individual_equipment` JSONB
|
|
- **Megjelenített:** Engine (kW/LE), body_type, VIN, mileage, transmission, drive_type, fuel_type, trim_level, EV specs, features, dates, documents, trust score
|
|
|
|
### Tab 2: Pénzügyek (Finance)
|
|
- **API:** `GET /assets/{id}/costs` → `finance.asset_costs`
|
|
- **Tartalom:** Éves TCO, fix/running költségek, prémium chartok, átlag fogyasztás/km költség
|
|
- **HIÁNYZIK:** AssetFinancials (beszerzés/lízing), VehicleInsurancePolicy (biztosítások), VehicleTaxObligation (adók)
|
|
|
|
### Tab 3: Figyelmeztetések (Alerts)
|
|
- **Forrás:** `individual_equipment.dates.*` (JSONB)
|
|
- **Tartalom:** insurance_expiry, mot_expiry, next_service, tire_change
|
|
|
|
### Tab 4: Szervizkönyv (Servicebook)
|
|
- **API:** `GET /assets/{id}/events` → `vehicle.asset_events`
|
|
- **Művelet:** Listázás + POST új esemény
|
|
|
|
---
|
|
|
|
## 3. Áttekintés (OverviewTab) Adatforrásai
|
|
|
|
**Fájl:** `frontend/src/components/vehicles/tabs/OverviewTab.vue`
|
|
|
|
| Adat | Forrás | DB Tábla/Mező |
|
|
|------|--------|---------------|
|
|
| `license_plate` | `inject('vehicle')` | `vehicle.asset.license_plate` |
|
|
| `brand`, `model` | `inject('vehicle')` | `vehicle.asset.brand/model` |
|
|
| `year_of_manufacture` | `inject('vehicle')` | `vehicle.asset.year_of_manufacture` |
|
|
| `fuel_type` | `inject('vehicle')` (i18n) | `vehicle.asset.fuel_type` |
|
|
| `current_mileage` | `inject('vehicle')` | `vehicle.asset.current_mileage` |
|
|
| Havi költség | `expenseStore.monthlyCost` | `finance.asset_costs` (aggregált) |
|
|
| Havi km | `individual_equipment.monthly_mileage` (JSONB) | `vehicle.asset` |
|
|
| Legutóbbi 3 költség | `expenseStore.recentExpenses` | `finance.asset_costs` |
|
|
| MOT lejárat | `individual_equipment.dates.mot_expiry` (JSONB) | `vehicle.asset` |
|
|
| Következő szerviz | `individual_equipment.dates.next_service` (JSONB) | `vehicle.asset` |
|
|
|
|
---
|
|
|
|
## 4. API Lefedettség Ellenőrzés
|
|
|
|
### AssetResponse lefedettség (50+ mező)
|
|
- **Minden** `vehicle.asset` mező szerepel az `AssetResponse`-ban
|
|
- A frontend `Vehicle` interface is lefedi az összes mezőt
|
|
- **Kivétel:** `cargo_volume_x` és `cargo_volume_y` közül csak `cargo_volume_y` van a frontend típusban
|
|
|
|
### Fleet_finance lefedettség
|
|
- `asset_financials` → `GET /assets/vehicles/{id}/financials`
|
|
- `vehicle_insurance_policies` → `GET /assets/vehicles/{id}/insurance`
|
|
- `vehicle_tax_obligations` → `GET /assets/vehicles/{id}/taxes`
|
|
- Mindhárom külön API endpointon, teljes CRUD támogatással
|
|
|
|
### Hiányzó API endpointok
|
|
- `VehicleUserRating` → Nincs API (trust score rendszer hiányos)
|
|
- `VehicleTransferRequest` → Nincs API (tulajdonosváltás kézzel)
|
|
- `VehicleLogbook` → Nincs API (naplózás hiányos)
|
|
|
|
---
|
|
|
|
## 5. Feltárt Problémák
|
|
|
|
### PROBLÉMA 1: AssetFinancials hiánya a VehicleDetailModal-ból
|
|
**Súlyosság:** Magas
|
|
**Leírás:** A VehicleDetailModal Pénzügyek tabja csak az AssetCost adatokat jeleníti meg. Az AssetFinancials (beszerzés, lízing), VehicleInsurancePolicy (biztosítások) és VehicleTaxObligation (adók) adatok a külön FinancialsTab komponensben érhetők el, ami nem része a modálnak.
|
|
**Javaslat:** Integrálni a FinancialsTab-ot a VehicleDetailModal-ba, vagy legalább linket tenni a teljes pénzügyi nézetre.
|
|
|
|
### PROBLÉMA 2: is_primary vizuális jelzés hiánya
|
|
**Súlyosság:** Közepes
|
|
**Leírás:** Az `is_primary` mező létezik (JSONB-ből számolva), de a VehicleCardStandard nem jeleníti meg vizuálisan.
|
|
**Javaslat:** Csillag/jelvény hozzáadása a kártyához, ha a jármű elsődleges.
|
|
|
|
### PROBLÉMA 3: Frontend Vehicle típushiba
|
|
**Súlyosság:** Alacsony
|
|
**Leírás:** A frontend Vehicle interface tartalmaz `asset_financials`, `insurance_policies`, `tax_obligations` mezőket, de ezek nem részei a backend AssetResponse sémának - külön API hívásokkal töltődnek be.
|
|
**Javaslat:** Tisztázni a frontend típusokat, opcionális mezőként jelezni, hogy ezek külön betöltendők.
|
|
|
|
---
|
|
|
|
## 6. Adatfolyam Diagram
|
|
|
|
```
|
|
┌──────────────────┐ GET /assets/vehicles ┌──────────────────┐
|
|
│ PostgreSQL DB │ ←─────────────────────────→ │ FastAPI Backend │
|
|
│ │ │ │
|
|
│ vehicle.asset │ AssetResponse (50+ mező) │ /vehicles GET │
|
|
│ vehicle.asset_ │ AssetCatalogResponse │ /vehicles/{id} │
|
|
│ catalog │ AssetEventResponse │ /{id}/events │
|
|
│ finance.asset_ │ AssetCostResponse │ /{id}/costs │
|
|
│ costs │ AssetFinancialsResponse │ /{id}/financials│
|
|
│ fleet_finance.* │ VehicleInsurancePolicyResp │ /{id}/insurance │
|
|
│ vehicle.asset_ │ VehicleTaxObligationResp │ /{id}/taxes │
|
|
│ events │ │ │
|
|
└──────────────────┘ └──────────────────┘
|
|
│
|
|
▼
|
|
┌──────────────────┐
|
|
│ Vue 3 Frontend │
|
|
│ │
|
|
│ VehicleCard │
|
|
│ → click │
|
|
│ → DetailModal │
|
|
│ │
|
|
│ VehicleDetail │
|
|
│ Modal (4 tab) │
|
|
│ ├─ Alapadatok │
|
|
│ ├─ Pénzügyek │
|
|
│ │ (csak costs) │
|
|
│ ├─ Figyelmezt. │
|
|
│ └─ Szervizkönyv │
|
|
│ │
|
|
│ OverviewTab │
|
|
│ (inject vehicle │
|
|
│ + expenseStore)│
|
|
│ │
|
|
│ FinancialsTab │
|
|
│ (külön oldal) │
|
|
└──────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 7. Következtetés
|
|
|
|
**Összességében az adatfolyam megfelelően van felépítve.** Az API lefedi az adatbázis összes fontos mezőjét, a frontend komponensek a megfelelő API végpontokról olvassák az adatokat.
|
|
|
|
**Főbb erősségek:**
|
|
- Thick Digital Twin koncepció jól implementálva
|
|
- AssetResponse minden mezőt tartalmaz
|
|
- Fleet_finance modellek külön, tiszta API endpointokon
|
|
- JSONB mezők (individual_equipment) rugalmasan használva
|
|
|
|
**Főbb hiányosságok:**
|
|
1. VehicleDetailModal Pénzügyek tabja nem tartalmazza a lízing/biztosítás/adó adatokat
|
|
2. is_primary vizuális jelzés hiányzik a kártyán
|
|
3. VehicleUserRating, VehicleTransferRequest, VehicleLogbook API-hiányos
|