Files
service-finder/docs/database_catalog_reconnaissance_2026-06-11.md

146 lines
7.0 KiB
Markdown

# 📊 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