10 KiB
🐛 BMW123 Jármű Adatmegjelenítési Hibajelentés
Dátum: 2026-06-20
Vizsgált entitás: bcfed768-c8c2-4867-a7bb-38a6517dce36 (BMW123 / BMW / BMWM3)
Scope: Backend (asset modell + AssetUpdate séma) → Frontend (OverviewTab, VehicleFormModal)
Hibák száma: 4
🔍 Összefoglaló
A BMW123 rendszámú jármű adatbázisban tárolt registration_certificate_validity (2026-08-08) adata nem jelenik meg a frontend járműáttekintő oldalon. Emellett a VehicleFormModal adminisztrációs fülön beállítható mezők (insurance_expiry_date, purchase_date) értékei elvesznek a mentés során, mivel a backend Pydantic sémái és adatbázis modellje nem tartalmazza ezeket a mezőket.
🐛 BUG #1 — KRITIKUS: MOT/Regisztrációs Érvényesség Eltérés
Adatbázis oldal
A vehicle.assets táblában a registration_certificate_validity mező létezik és helyes értéket tárol:
registration_certificate_validity = 2026-08-08 00:00:00+00
Ez a mező egy top-level DateTime oszlop az Asset modellben:
registration_certificate_validity: Mapped[Optional[datetime]] = mapped_column(
DateTime(timezone=True), nullable=True
)
Frontend hiba
Az OverviewTab.vue a registration_certificate_validity helyett tévesen a individual_equipment.dates.mot_expiry JSONB mezőből olvassa ki a műszaki érvényességet:
const motExpiryLabel = computed(() => {
const dates = vehicle?.value?.individual_equipment?.dates
if (!dates?.mot_expiry) return t('common.noData')
return formatDate(dates.mot_expiry)
})
Gyökérok
A JSONB individual_equipment.dates objektum és a top-level registration_certificate_validity oszlop két különböző tárolási hely. A VehicleFormModal a registration_certificate_validity mezőt használja (helyesen), de az OverviewTab a JSONB-ből próbál olvasni. Mivel a dates objektum nem létezik a BMW123 adataiban (individual_equipment = {"features": [...], "car_specs": {...}}), mindig "Nincs adat" jelenik meg.
Érintett fájlok
frontend/src/components/vehicles/tabs/OverviewTab.vue:273— hibás olvasásfrontend/src/stores/vehicle.ts:89-92—datesinterfész definícióbackend/app/models/vehicle/asset.py:137-140— helyes adatbázis mező
Javasolt javítás
Az OverviewTab.vue-ban a motExpiryLabel computed property-t át kell írni, hogy a vehicle.value?.registration_certificate_validity-ből olvasson, vagy alternatívaként a VehicleFormModal handleSave() függvényében a registration_certificate_validity értékét szinkronizálni kell a individual_equipment.dates.mot_expiry-be is.
🐛 BUG #2 — KRITIKUS: Biztosítási és Vásárlási Adatok Elvesznek
Adatbázis modell hiányosság
Az Asset modellben NEM léteznek az alábbi mezők:
insurance_expiry_date(biztosítás lejárta)purchase_date(vásárlás dátuma)
Ezek a mezők teljesen hiányoznak az adatbázis sémából.
Pydantic séma hiányosság
Az AssetUpdate és AssetCreate sémákban NEM szerepelnek:
insurance_expiry_datepurchase_date
Frontend helyzet
A VehicleFormModal.vue adminisztrációs fül (Tab 2) tartalmazza ezeket a mezőket:
form.insurance_expiry_date— "Biztosítás lejárta" dátumválasztóform.purchase_date— "Vásárlás dátuma" dátumválasztóform.registration_certificate_validity— "Forgalmi engedély érvényessége" dátumválasztó
A handleSave() függvény a payload-ba teszi ezeket:
const payload: Record<string, any> = {
...form.value,
// ...
}
A populateForm() függvény pedig a vehicle objektumból várja ezeket:
form.value.insurance_expiry_date = vehicle.insurance_expiry_date || ''
form.value.purchase_date = vehicle.purchase_date || ''
Gyökérok
Az update_vehicle endpoint payload.model_dump(exclude_unset=True)-t használ, ami kizárólag az AssetUpdate Pydantic sémában definiált mezőket adja át az adatbázisnak. Mivel insurance_expiry_date és purchase_date nem szerepelnek az AssetUpdate-ben, ezek az értékek csendben elvesznek a PUT kérés során.
Érintett fájlok
backend/app/models/vehicle/asset.py:69— hiányzó modell mezőkbackend/app/schemas/asset.py:269— hiányzó séma mezőkbackend/app/schemas/asset.py:122— hiányzó séma mezők (Create)frontend/src/components/dashboard/VehicleFormModal.vue:440-460— frontend várja ezeketfrontend/src/components/dashboard/VehicleFormModal.vue:507— frontend küldi ezeket
Javasolt javítás
- Hozzáadni az
Assetmodellhez:insurance_expiry_date: Mapped[Optional[datetime]]éspurchase_date: Mapped[Optional[datetime]] - Hozzáadni az
AssetUpdateésAssetCreatesémákhoz ezeket a mezőket - Futtatni a
sync_engine-t a séma frissítéséhez
🐛 BUG #3 — HIÁNYZÓ FUNKCIÓ: Nincs Dedikált Biztosítási Adat Struktúra
Hiányzó mezők
Sem az Asset modellben, sem más kapcsolódó táblában (asset_financials, asset_events) NEM léteznek dedikált mezők az alábbiakra:
- Kötelező felelősségbiztosítás (liability insurance)
- Kötvény száma
- Lejárati dátuma
- Biztosító neve
- CASCO biztosítás
- Kötvény száma
- Lejárati dátuma
- Önrész összege
- Biztosító neve
Javasolt megoldás
Új tábla létrehozása: vehicle.insurance_policies:
CREATE TABLE vehicle.insurance_policies (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
asset_id UUID NOT NULL REFERENCES vehicle.assets(id) ON DELETE CASCADE,
insurance_type VARCHAR(20) NOT NULL CHECK (insurance_type IN ('liability', 'casco')),
policy_number VARCHAR(100),
insurer_name VARCHAR(255),
start_date DATE,
expiry_date DATE,
deductible_amount DECIMAL(12,2),
status VARCHAR(20) DEFAULT 'active',
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
🐛 BUG #4 — KISEBB: "Következő Szerviz" Helyettesítő Szöveg
Hiba
Az OverviewTab.vue "Következő szerviz" mezője mindig "Coming Soon" szöveget mutat:
const nextServiceLabel = computed(() => {
// Placeholder — will be connected to the service book / maintenance schedule later
return t('vehicleDetail.comingSoon')
})
Érintett fájl
Javasolt javítás
Össze kell kötni a szervizkönyv modullal. A következő szerviz esedékességét az asset_events táblában rögzített szerviz előzményekből kellene kiszámolni (pl. utolsó olajcsere + 15.000 km vagy + 1 év).
📊 Adatfolyam Diagram (Jelenlegi Hibás Állapot)
flowchart TD
DB[(PostgreSQL\nvehicle.assets)]
DB -->|registration_certificate_validity\n2026-08-08| API
API[GET /api/v1/vehicles/{id}]
API -->|AssetResponse\nregistration_certificate_validity| FE_Store[Pinia Store\nvehicle.ts]
FE_Store -->|vehicle.registration_certificate_validity| OverviewTab
FE_Store -->|vehicle.individual_equipment.dates.mot_expiry| OverviewTab
subgraph OverviewTab [OverviewTab.vue - HIBA]
MOT[MOT label\nolvas: individual_equipment.dates.mot_expiry]
Service[Next Service\nComing Soon placeholder]
end
subgraph VehicleFormModal [VehicleFormModal.vue - VESZÉLYES]
Form[Adminisztráció fül]
Form --> insurance[insurance_expiry_date]
Form --> purchase[purchase_date]
Form --> regCert[registration_certificate_validity]
insurance -->|ELVESZ| PUT[PUT /vehicles/{id}\nexclude_unset=True]
purchase -->|ELVESZ| PUT
regCert -->|ELTÁROLVA| PUT
end
PUT -->|AssetUpdate.model_dump\ncsak definiált mezők| DB
✅ Javítási Terv (Jóváhagyásra Vár)
| # | Prioritás | Feladat | Érintett fájlok |
|---|---|---|---|
| 1 | KRITIKUS | OverviewTab.vue MOT olvasás javítása registration_certificate_validity-ből |
OverviewTab.vue |
| 2 | KRITIKUS | insurance_expiry_date és purchase_date hozzáadása az Asset modellhez |
asset.py |
| 3 | KRITIKUS | insurance_expiry_date és purchase_date hozzáadása az AssetUpdate/AssetCreate sémákhoz |
asset.py schema |
| 4 | MAGAS | Szinkronizációs logika: registration_certificate_validity másolása individual_equipment.dates.mot_expiry-be |
assets.py endpoint |
| 5 | KÖZEPES | Dedikált insurance_policies tábla létrehozása |
Új SQLAlchemy modell |
| 6 | KÖZEPES | Következő szerviz összekötése a szervizkönyv adatokkal | OverviewTab.vue |
📝 Technikai Megjegyzések
- A Sync Engine használata kötelező az új mezők adatbázisba vezetéséhez:
docker exec sf_api python3 -m app.scripts.sync_engine - A JSONB
individual_equipment.datesopcionális, nem minden járműnél van kitöltve - A frontend
Vehicleinterfész frissítése is szükséges avehicle.tsstore-ban - A
populateFormfüggvényben a hiányzó mezők miatt TypeScript hiba léphet fel, ha szigorú típusellenőrzés van
Jelentés készült: 2026-06-20 | Auditor: Rendszer-Architect