frontend kínlódás

This commit is contained in:
Roo
2026-03-31 06:20:43 +00:00
parent 2508ae7452
commit c7cbe60976
46 changed files with 6091 additions and 136 deletions

View File

@@ -0,0 +1,190 @@
# Database Schema Version 2.0.1
**Verzió:** 2.0.1
**Dátum:** 2026-03-30
**Státusz:** Aktív
**Kapcsolódó issue:** #179 (Asset Refactor Documentation Sync)
## 1. Áttekintés
A Service Finder 2.0.1 adatbázisa **PostgreSQL 15+** és **SQLAlchemy 2.0+** (asyncpg) alapú. A séma **domaindriven design (DDD)** elvekre épül, az adatok logikai sémákba vannak csoportosítva:
- **`identity`** személyazonosság, felhasználók, szerepkörök, bizalomprofilok.
- **`finance`** pénzügyi motor (triple wallet, főkönyv, pénznemváltás).
- **`vehicle`** járművek, katalógus, szerviznapló, költségek, telemetria.
- **`fleet`** flottakezelés, szervezetek, fióktelepek, eszközhozzárendelések.
- **`marketplace`** szolgáltatók, szervizprofilok, foglalások, értékelések.
- **`system`** rendszerparaméterek, naplók, dokumentumok, fordítások.
- **`audit`** auditnaplók, moderálási műveletek.
Ez a dokumentum a **`vehicle` séma aktuális állapotát** részletezi, különös tekintettel a Digital Twin (Asset) refaktor által bevezetett változásokra.
## 2. Vehicle séma Fő táblák
### 2.1. `vehicle.assets` A Digital Twin (Thick Asset)
| Mező | Típus | Nullable | Default | Index | Leírás |
|------|-------|----------|---------|-------|--------|
| `id` | UUID | ❌ | `uuid_generate_v4()` | ✅ | Elsődleges kulcs |
| `vin` | VARCHAR(17) | ✅ | NULL | ✅ | Jármű azonosító szám (VIN) |
| `license_plate` | VARCHAR(20) | ✅ | NULL | ✅ | Rendszám |
| `name` | VARCHAR | ✅ | NULL | ❌ | Emberi olvasható név (pl. „Kis Piros”) |
| `catalog_id` | INTEGER | ✅ | NULL | ❌ | Külső kulcs a `vehicle.vehicle_catalog.id`re |
| `vehicle_class` | VARCHAR(50) | ✅ | NULL | ✅ | Járműosztály (VehicleClassEnum) |
| `brand` | VARCHAR(100) | ✅ | NULL | ✅ | Márka (ha nincs catalog) |
| `model` | VARCHAR(100) | ✅ | NULL | ✅ | Modell (ha nincs catalog) |
| `trim_level` | VARCHAR(100) | ✅ | NULL | ❌ | Felszereltségi szint/kivitel |
| `fuel_type` | VARCHAR(50) | ✅ | NULL | ✅ | Üzemanyag típus (benzin, diesel, elektromos, etanol, gáz) |
| `engine_capacity` | INTEGER | ✅ | NULL | ✅ | Hengerűrtartalom (cm³) |
| `power_kw` | INTEGER | ✅ | NULL | ✅ | Teljesítmény (kW) |
| `torque_nm` | INTEGER | ✅ | NULL | ❌ | Nyomaték (Nm) |
| `cylinder_layout` | VARCHAR(50) | ✅ | NULL | ❌ | Hengerelrendezés (soros, V, boxer) |
| `transmission_type` | VARCHAR(50) | ✅ | NULL | ✅ | Sebességváltó típus (kézi, autómata, CVT, DCT) |
| `drive_type` | VARCHAR(50) | ✅ | NULL | ✅ | Hajtás (első, hátsó, összkerék) |
| `euro_classification` | VARCHAR(10) | ✅ | NULL | ❌ | EURO besorolás (EURO 16) |
| `curb_weight` | INTEGER | ✅ | NULL | ❌ | Saját tömeg (kg) |
| `max_weight` | INTEGER | ✅ | NULL | ❌ | Össztömeg (kg) |
| `cargo_volume_x` | NUMERIC(10,2) | ✅ | NULL | ❌ | Csomagtartó hossz (cm) |
| `cargo_volume_y` | NUMERIC(10,2) | ✅ | NULL | ❌ | Csomagtartó szélesség (cm) |
| `door_count` | INTEGER | ✅ | NULL | ❌ | Ajtók száma |
| `seat_count` | INTEGER | ✅ | NULL | ❌ | Ülések száma |
| `roof_type` | VARCHAR(50) | ✅ | NULL | ❌ | Tető típus (RoofTypeEnum) |
| `audio_system_type` | VARCHAR(100) | ✅ | NULL | ❌ | Hangrendszer típusa |
| `individual_equipment` | JSONB | ✅ | `'{}'::jsonb` | ❌ | Egyéni felszerelések (JSONB) |
| `current_mileage` | INTEGER | ❌ | 0 | ✅ | Jelenlegi kilométerállás |
| `condition_score` | INTEGER | ❌ | 100 | ❌ | Állapotpontszám (0100) |
| `status` | VARCHAR(20) | ❌ | `'active'` | ❌ | Általános státusz (active, inactive, sold) |
| `data_status` | VARCHAR(20) | ✅ | `'draft'` | ❌ | Adatminőségi státusz (DRAFT, DISCOVERED, ENRICHED, ACTIVE, ARCHIVED) |
| `year_of_manufacture` | INTEGER | ✅ | NULL | ✅ | Gyártási év |
| `first_registration_date` | TIMESTAMPTZ | ✅ | NULL | ❌ | Első forgalomba helyezés dátuma |
| `created_at` | TIMESTAMPTZ | ❌ | `now()` | ❌ | Létrehozás időpontja |
| `updated_at` | TIMESTAMPTZ | ✅ | NULL | ❌ | Utolsó módosítás időpontja |
| `is_for_sale` | BOOLEAN | ❌ | `false` | ✅ | Értékesítésre kínálva |
| `price` | NUMERIC(15,2) | ✅ | NULL | ❌ | Ár |
| `currency` | VARCHAR(3) | ❌ | `'EUR'` | ❌ | Pénznem |
| `current_organization_id` | INTEGER | ✅ | NULL | ❌ | Külső kulcs a `fleet.organizations.id`re |
| `branch_id` | UUID | ✅ | NULL | ❌ | Külső kulcs a `fleet.branches.id`re |
| `relocation_performed` | BOOLEAN | ❌ | `false` | ❌ | Áthelyezés történte |
| `owner_person_id` | BIGINT | ✅ | NULL | ❌ | Külső kulcs a `identity.persons.id`re |
| `owner_org_id` | INTEGER | ✅ | NULL | ❌ | Külső kulcs a `fleet.organizations.id`re |
| `operator_person_id` | BIGINT | ✅ | NULL | ❌ | Külső kulcs a `identity.persons.id`re |
| `operator_org_id` | INTEGER | ✅ | NULL | ❌ | Külső kulcs a `fleet.organizations.id`re |
**Megjegyzések:**
- A `vin` egyedi index (`UNIQUE`), de lehet NULL.
- A `catalog_id` opcionális; ha nincs megadva, a `brand` és `model` mezők használhatók.
- A `data_status` a profil kitöltöttségét tükrözi; a `system_data_completion_weights` tábla alapján számolt `profile_completion_percentage`al összefügg.
- A `current_organization_id` és `branch_id` a flottakezeléshez szükséges.
### 2.2. `vehicle.asset_events` Digitális Szervizkönyv
| Mező | Típus | Nullable | Default | Index | Leírás |
|------|-------|----------|---------|-------|--------|
| `id` | UUID | ❌ | `uuid_generate_v4()` | ✅ | Elsődleges kulcs |
| `asset_id` | UUID | ❌ | | ✅ | Külső kulcs a `vehicle.assets.id`re |
| `user_id` | INTEGER | ✅ | NULL | ❌ | Külső kulcs a `identity.users.id`re |
| `organization_id` | INTEGER | ✅ | NULL | ❌ | Külső kulcs a `fleet.organizations.id`re |
| `event_type` | VARCHAR(50) | ❌ | | ❌ | Esemény típus (AssetEventTypeEnum) |
| `odometer_reading` | INTEGER | ✅ | NULL | ❌ | Km óra állás az eseménykor |
| `description` | TEXT | ✅ | NULL | ❌ | Szabad szöveges leírás |
| `cost_id` | UUID | ✅ | NULL | ❌ | Külső kulcs a `vehicle.asset_costs.id`re |
| `event_date` | TIMESTAMPTZ | ❌ | `now()` | ❌ | Az esemény dátuma |
| `created_at` | TIMESTAMPTZ | ❌ | `now()` | ❌ | Rögzítés időpontja |
| `updated_at` | TIMESTAMPTZ | ✅ | NULL | ❌ | Utolsó módosítás időpontja |
**Megjegyzések:**
- A `cost_id` kapcsolja össze a költségekkel; ha NULL, az esemény nem köthető konkrét kiadáshoz.
- Az `event_type` a felsorolt 8 típus egyike (SERVICE, REPAIR, ACCIDENT, INSPECTION, TIRE_CHANGE, MAINTENANCE, UPGRADE, RECALL).
### 2.3. `vehicle.vehicle_catalog` Katalógus mesteradatok
| Mező | Típus | Nullable | Default | Index | Leírás |
|------|-------|----------|---------|-------|--------|
| `id` | INTEGER | ❌ | | ✅ | Elsődleges kulcs |
| `master_definition_id` | INTEGER | ✅ | NULL | ❌ | Külső kulcs a `vehicle.vehicle_model_definitions.id`re |
| `make` | VARCHAR | ❌ | | ✅ | Márka |
| `model` | VARCHAR | ❌ | | ✅ | Modell |
| `generation` | VARCHAR | ✅ | NULL | ✅ | Generáció |
| `year_from` | INTEGER | ✅ | NULL | ❌ | Évjárat tól |
| `year_to` | INTEGER | ✅ | NULL | ❌ | Évjárat ig |
| `fuel_type` | VARCHAR | ✅ | NULL | ✅ | Üzemanyag típus |
| `power_kw` | INTEGER | ✅ | NULL | ✅ | Teljesítmény (kW) |
| `engine_capacity` | INTEGER | ✅ | NULL | ✅ | Hengerűrtartalom (cm³) |
| `factory_data` | JSONB | ❌ | `'{}'::jsonb` | ❌ | Gyári adatok (JSONB) |
**Egyedi korlát:** `UNIQUE (make, model, year_from, fuel_type)` ugyanaz a modellváltozat ne kerüljön be többször.
### 2.4. `vehicle.asset_costs` Jármű költségek
| Mező | Típus | Nullable | Default | Index | Leírás |
|------|-------|----------|---------|-------|--------|
| `id` | UUID | ❌ | `uuid_generate_v4()` | ✅ | Elsődleges kulcs |
| `asset_id` | UUID | ❌ | | ✅ | Külső kulcs a `vehicle.assets.id`re |
| `organization_id` | INTEGER | ❌ | | ❌ | Külső kulcs a `fleet.organizations.id`re |
| `cost_category` | VARCHAR(50) | ❌ | | ✅ | Költségkategória (pl. maintenance, repair, fuel, insurance) |
| `amount_net` | NUMERIC(18,2) | ❌ | | ❌ | Nettó összeg |
| `currency` | VARCHAR(3) | ❌ | `'HUF'` | ❌ | Pénznem |
| `date` | TIMESTAMPTZ | ❌ | `now()` | ❌ | A költség keletkezésének dátuma |
| `invoice_number` | VARCHAR(100) | ✅ | NULL | ✅ | Számlaszám |
| `data` | JSONB | ❌ | `'{}'::jsonb` | ❌ | Extra adatok (JSONB) |
### 2.5. További táblák (rövid leírás)
| Tábla | Séma | Leírás |
|-------|------|--------|
| `vehicle_model_definitions` | vehicle | Robotok által feltöltött technikai mesteradatok (`gold_enriched` státusszal) |
| `gb_catalog_discovery` | vehicle | Brit (GB) felfedezési várólista |
| `catalog_discovery` | vehicle | Globális felfedezési várólista (RDW, NHTSA, stb.) |
| `vehicle_logbook` | vehicle | Útnyilvántartás (NAV, kiküldetés, munkábajárás) |
| `asset_financials` | vehicle | Beszerzési adatok és amortizáció |
| `asset_inspections` | vehicle | Napi ellenőrző listák és biztonsági checkek |
| `asset_reviews` | vehicle | Jármű értékelések és visszajelzések |
| `asset_telemetry` | vehicle | Valós idejű telemetria (jelenleg csak current_mileage) |
| `asset_assignments` | fleet | Eszközszervezet összerendelések |
| `vehicle_ownership_history` | vehicle | Tulajdonosváltások története |
| `vehicle_transfer_requests` | vehicle | Járműátadási kérelmek |
| `vehicle_expenses` | vehicle | Jelentéskészítéshez használt költségek (kompatibilitási réteg) |
## 3. Enum típusok
### 3.1. VehicleClassEnum
```sql
CREATE TYPE vehicle_class_enum AS ENUM (
'personal', -- Személygépjármű
'motorcycle', -- Motorkerékpár
'light_commercial', -- Kishaszon gépjármű
'commercial', -- Haszonjármű
'work_machine', -- Munkagép
'trailer', -- Pótkocsi/utánfutó
'bus', -- Autóbusz
'camper', -- Lakókocsi/lakóautó
'boat', -- Hajó
'aircraft' -- Repülőgép
);
```
### 3.2. RoofTypeEnum
```sql
CREATE TYPE roof_type_enum AS ENUM (
'metal', -- Lemeztető
'fabric', -- Vászontető
'hardtop', -- Nyitható keménytető
'folding', -- Harmonikatető
'targa', -- Targatető
'fixed_glass', -- Fix üvegtető
'panoramic', -- Panorámatető
'fixed_sunroof', -- Fix napfénytető
'openable_sunroof', -- Nyitható napfénytető
'retractable_sunroof', -- Elhúzható napfénytető
'motorized_sunroof', -- Motoros napfénytető
'openable_panoramic' -- Nyitható panorámatető
);
```
### 3.3. AssetEventTypeEnum
```sql
CREATE TYPE asset_event_type_enum AS ENUM (
'SERVICE', -- Szerviz
'REPAIR', -- Javítás
'ACCIDENT', -- Baleset
'INSPECTION',