# 📊 Adatbázis Katalógus & Szótár Felderítés **Dátum:** 2026-06-11 **Vizsgált rendszer:** Service Finder Backend (PostgreSQL + SQLAlchemy) **Cél:** Karosszéria/Kivitel (Body Type / Trim) funkció előfeltérképezése --- ## 1. SQL Adatbázis Felfedezés ### 1.1 Katalógus-táblák a `vehicle` sémában Az `information_schema.tables` lekérdezés alapján az összes releváns tábla a **`vehicle`** sémában található. Nincs külön `catalog` vagy `dictionary` séma. | # | Tábla | Típus | Sorok száma | Állapot | |---|-------|-------|-------------|---------| | 1 | `vehicle.vehicle_model_definitions` | BASE TABLE | **345,400** | ✅ Feltöltve (MDM master) | | 2 | `vehicle.vehicle_catalog` | BASE TABLE | **1,596,564** | ✅ Feltöltve (variánsok) | | 3 | `vehicle.vehicle_types` | BASE TABLE | **1** | ❌ Csak 1 rekord (`car`) | | 4 | `vehicle.feature_definitions` | BASE TABLE | **16** | ⚠️ Csak 16 felszereltség | | 5 | `vehicle.model_feature_maps` | BASE TABLE | **0** | ❌ Üres kapcsolótábla | | 6 | `vehicle.catalog_discovery` | BASE TABLE | **172,525** | ✅ Feltöltve (robot várólista) | | 7 | `vehicle.gb_catalog_discovery` | BASE TABLE | **0** | ❌ Üres (UK piac) | ### 1.2 Body Típusok (Karosszéria) Állapota - **152 különböző `body_type` érték** létezik az adatbázisban - **4,050 rekordnál** (~1.17%) hiányzik a body_type - **Probléma:** Az értékek **nem normalizáltak** — ugyanaz a karosszéria többféleképpen van tárolva: - `"SUV"` vs `"SUV, Crossover"` vs `"SUV, Fastback"` - `"SEDAN"` vs `"Sedan"` vs `"sedan"` - `"CONVERTIBLE"` vs `"Cabriolet"` vs `"cabriolet"` - Hollandi nyelvű RDW értékek: `"hatchback"`, `"stationwagen"`, `"cabriolet"` stb. ### 1.3 Trim Szintek (Kivitelek) Állapota - **22,375 különböző `trim_level` érték** - **187,159 rekordnál** (~54%) hiányzik a trim_level - Az értékek többsége kódolt (#BK, #LE, #LF stb.) — nem emészthető emberi szemmel ### 1.4 Vehicle Típusok - Csak **1 rekord**: `code='car'`, `name='Személyautó'` - A `motorcycle`, `truck`, `bus` stb. típusok nincsenek feltöltve ### 1.5 Vehicle Class 4 érték található: `car`, `motorcycle`, `other`, `truck` --- ## 2. SQLAlchemy Modellek Állapota ### 2.1 A `vehicle_definitions.py` modelljei | Modell | Tábla | Oszlopok | Létezik? | |--------|-------|----------|----------| | `VehicleType` (`vehicle_definitions.py:17`) | `vehicle.vehicle_types` | `id, code, name, icon, units` | ✅ Van | | `FeatureDefinition` (`vehicle_definitions.py:33`) | `vehicle.feature_definitions` | `id, vehicle_type_id, code, name, category` | ✅ Van | | `VehicleModelDefinition` (`vehicle_definitions.py:48`) | `vehicle.vehicle_model_definitions` | `id, make, marketing_name, body_type, trim_level, vehicle_class, fuel_type...` | ✅ Van (MDM) | | `ModelFeatureMap` (`vehicle_definitions.py:145`) | `vehicle.model_feature_maps` | `id, model_definition_id, feature_id, is_standard` | ✅ Van | ### 2.2 A `asset.py` modelljei | Modell | Tábla | Oszlopok | Létezik? | |--------|-------|----------|----------| | `AssetCatalog` (`asset.py:14`) | `vehicle.vehicle_catalog` | `id, make, model, generation, year_from, year_to, fuel_type...` | ✅ Van | | `Asset` (`asset.py:69`) | `vehicle.assets` | `id, vin, brand, model, trim_level, vehicle_class...` | ✅ Van | | `CatalogDiscovery` (`asset.py:402`) | `vehicle.catalog_discovery` | `id, make, model, vehicle_class, market, model_year, status` | ✅ Van | | `GbCatalogDiscovery` (`vehicle.py:195`) | `vehicle.gb_catalog_discovery` | `id, vrm, make, model, status` | ✅ Van | ### 2.3 Egyéb releváns modellek | Fájl | Modell | Tábla | |------|--------|-------| | `external_reference.py:6` | `ExternalReferenceLibrary` | `vehicle.external_reference_library` | | `motorcycle_specs.py:6` | `MotorcycleSpecs` | `vehicle.motorcycle_specs` | | `reference_data.py:6` | `ReferenceLookup` | `vehicle.reference_lookup` | ### 2.4 ⚠️ Kritikus hiányosság: NINCS BodyType modell! **Nincs önálló `BodyType` SQLAlchemy modell!** A `body_type` jelenleg egy szabad szöveges (`String(100)`) mező a `VehicleModelDefinition` osztályban (`vehicle_definitions.py:92`). Ez magyarázza a 152 nem normalizált értéket. Ugyanez igaz a `trim_level`-re is (`vehicle_definitions.py:94`): szabad szöveges mező, nincs normalizált szótár mögötte. --- ## 3. API Végpontok Állapota ### 3.1 Meglévő katalógus végpontok (`catalog.py`) | Végpont | Módszer | Leírás | Védett? | |---------|---------|--------|---------| | `/makes` (`catalog.py:11`) | GET | Márkák listázása (opcionális vehicle_class szűrő) | ✅ Igen | | `/models` (`catalog.py:21`) | GET | Modellek listázása adott márkához | ✅ Igen | | `/generations` (`catalog.py:38`) | GET | Generációk/évjáratok listázása | ✅ Igen | | `/engines` (`catalog.py:55`) | GET | Motorváltozatok és specifikációk | ✅ Igen | **Minden végpont az `AssetService`-t használja** (`asset_service.py:339-385`), ami a `vehicle_model_definitions` táblából lekérdezéseket futtat. ### 3.2 NEM létező, de szükséges végpontok A Karosszéria/Kivitel funkcióhoz az alábbi végpontok **hiányoznak**: - ❌ `GET /body-types` — Karosszéria típusok listázása - ❌ `GET /trims` — Kivitelek listázása (szűrhető márka/modell szerint) - ❌ `GET /vehicle-classes` — Jármű osztályok listázása - ❌ `POST /body-types` — Új karosszériatípus hozzáadása (admin) - ❌ `POST /trims` — Új kivitel hozzáadása (admin) ### 3.3 Meglévő jármű végpontok (`vehicles.py`) | Végpont | Módszer | Leírás | |---------|---------|--------| | `/{vehicle_id}/ratings` (`vehicles.py:22`) | POST | Értékelés küldése | | `/{vehicle_id}/ratings` (`vehicles.py:94`) | GET | Értékelések lekérése | --- ## 4. Összefoglaló és Javaslatok ### 4.1 Adatbázis ✅ **345,400 járműdefiníció** és **1.59M katalógus variáns** — a botok jól dolgoztak ⚠️ **`vehicle_types`** tábla majdnem üres (csak 1 rekord) ⚠️ **`body_type`** és **`trim_level`** nem normalizált, szabad szöveges mezők ⚠️ 152 féle body_type, nagy része duplikátum (kisbetű/nagybetű, holland/angol keverék) ### 4.2 Modellek ✅ Létezik `VehicleModelDefinition`, `VehicleType`, `FeatureDefinition` ❌ **NINCS önálló `BodyType` modell** — ez a legnagyobb hiányosság ❌ NINCS önálló `TrimLevel` modell sem ### 4.3 API ✅ Négy katalógus végpont működik (`/makes`, `/models`, `/generations`, `/engines`) ❌ **NINCS** `/body-types`, `/trims`, `/vehicle-classes` végpont ### 4.4 Ajánlott következő lépések 1. **`BodyType` modell létrehozása** — normalizált karosszériatípus szótár (id, code, name, icon, vehicle_class_id) 2. **`TrimLevel` modell létrehozása** — normalizált kivitel szótár (id, code, name) 3. **Adatmigráció:** A 152 meglévő body_type érték normalizálása és deduplikálása 4. **API végpontok:** `GET /body-types`, `GET /trims`, `GET /vehicle-classes` 5. **`vehicle_types` feltöltése** — a hiányzó járműtípusok (motorcycle, truck, bus stb.) hozzáadása