10 KiB
Thick Asset Filozófia – A Digital Twin mint elsődleges adattároló
Verzió: 2.0.1
Dátum: 2026-03-30
Státusz: Aktív
Kapcsolódó issue: #179 (Asset Refactor Documentation Sync)
1. Mi a „Thick Asset”?
A Service Finder 2.0.1 architektúrája a „Thick Asset” (vastag eszköz) elvet követi. Ez azt jelenti, hogy a fizikai jármű digitális ikre (Digital Twin) nem csupán egy hivatkozás a katalógusra, hanem egy teljes értékű, önálló adattároló entitás, amely magában hordozza a jármű összes releváns technikai, gazdasági és üzemeltetési adatát.
1.1. A régi „Thin Asset” modell
- Az Asset csak egy külső kulcs a
vehicle_catalogvagyvehicle_model_definitionstáblákra. - A technikai specifikációk (lökettérfogat, teljesítmény, felszereltség) kizárólag a katalógusban voltak tárolva.
- Ha egy jármű módosításon esett át (pl. tuning, átépítés), az adatok elvesztek vagy nem voltak nyomon követhetők.
1.2. Az új „Thick Asset” modell
- Az Asset (
vehicle.assetstábla) tartalmazza a jármű saját technikai adatait (lásd a 22+ új oszlopot). - A katalógus (
vehicle.vehicle_catalog) továbbra is szolgál mint ellenőrzött mestersablon, de az Asset önállóan tárolhat eltérő értékeket. - A modell lehetővé teszi:
- Egyedi módosítások rögzítését (pl. tuning, felszereltség‑bővítés).
- Időbeli változások nyomon követését (pl. motorcsere, üzemanyag‑átállítás).
- Hiányzó katalógus esetén is a jármű teljes profiljának kezelését.
2. A filozófia előnyei
2.1. Adatintegritás és teljesség
- A jármű adatai egy helyen, az Asset rekordban összpontosulnak.
- A katalógus frissítése (pl. újabb évjárat) nem írja felül a már létező Asset adatait.
- A profile_completion_percentage dinamikusan számolható a ténylegesen kitöltött mezők alapján.
2.2. Rugalmasság a valós üzleti folyamatokhoz
- Költségkövetés: Minden kiadás (
vehicle.asset_costs) közvetlenül az Asset‑hez kapcsolódik. - Szerviztörténet: Az AssetEvent szolgáltatásnapló (
vehicle.asset_events) az Asset‑hez kötődik, nem a katalógushoz. - Tulajdonosi változások: A
vehicle_transfer_requestsésvehicle_ownership_historytáblák az Asset‑en keresztül kezelik a tulajdonosváltásokat.
2.3. Teljesítmény és lekérdezési hatékonyság
- A gyakran használt technikai adatok (pl.
fuel_type,power_kw,vehicle_class) indexelve vannak az Asset táblában, így a szűrés és jelentéskészítés gyorsabb. - Nincs szükség összetett JOIN‑okra a katalógussal minden egyes lekérdezésnél.
3. Technikai megvalósítás
3.1. Az Asset tábla szerkezete
A vehicle.assets tábla jelenleg 22+ új oszlopot tartalmaz a korábbi v1-hez képest. Ezek az oszlopok a következő kategóriákba sorolhatók:
- Azonosítás (
vin,license_plate,name,catalog_id) - Osztályozás (
vehicle_class,brand,model,trim_level) - Technikai specifikációk (
fuel_type,engine_capacity,power_kw,torque_nm,cylinder_layout,transmission_type,drive_type,euro_classification) - Fizikai méretek (
curb_weight,max_weight,cargo_volume_x,cargo_volume_y,door_count,seat_count) - Felszereltség (
roof_type,audio_system_type,individual_equipment(JSONB)) - Állapot (
current_mileage,condition_score,status,data_status) - Idővonal (
year_of_manufacture,first_registration_date,created_at,updated_at) - Értékesítés (
is_for_sale,price,currency) - Szervezeti kapcsolatok (
current_organization_id,branch_id,relocation_performed) - Tulajdonosi kapcsolatok (
owner_person_id,owner_org_id,operator_person_id,operator_org_id)
3.2. Kapcsolatok
catalog– kapcsolat avehicle.vehicle_catalogtáblával (opcionális, ha a jármű ismert katalóguselemhez tartozik).financials– az AssetFinancials rekord (beszerzési adatok, amortizáció).costs– az AssetCost rekordok (üzemeltetési költségek).events– az AssetEvent rekordok (szerviznapló).logbook– a VehicleLogbook bejegyzések (útnyilvántartás).inspections,reviews,telemetry,assignments,ownership_history,service_requests– további kapcsolatok.
3.3. Enum típusok
A következő enumerációk definiálva vannak a modellben:
VehicleClassEnum– járműosztályok (personal, motorcycle, light_commercial, commercial, work_machine, trailer, bus, camper, boat, aircraft).RoofTypeEnum– tetőtípusok (metal, fabric, hardtop, folding, targa, fixed_glass, panoramic, fixed_sunroof, openable_sunroof, retractable_sunroof, motorized_sunroof, openable_panoramic).AssetEventTypeEnum– eseménytípusok a digitális szervizkönyvben (SERVICE, REPAIR, ACCIDENT, INSPECTION, TIRE_CHANGE, MAINTENANCE, UPGRADE, RECALL).
4. Migrációs útmutató
A meglévő, „thin” Asset rekordok frissítése a következő lépésekből áll:
- Katalógus keresés – ha a jármű ismert márka/modell/évjárat kombináció, a
catalog_idbeállítása. - Hiányzó mezők kitöltése – a katalógusból másolható adatok (pl.
engine_capacity,power_kw) átmásolása az Asset rekordba. - Adatminőség javítása – a
data_statusmező beállítása (DRAFT, DISCOVERED, ENRICHED, ACTIVE, ARCHIVED) a kitöltöttség függvényében.
A migrációt a sync_engine.py szkript végzi automatikusan, amikor a séma változás észlelhető.
5. Jövőbeli kiterjesztések
- Real‑time telemetria – az
asset_telemetrytábla bővítése GPS, üzemanyag‑fogyasztás, hibakódok rögzítésére. - Predictive maintenance – a szervizesemények és költségek alapján javaslatok generálása.
- Multi‑asset kapcsolatok – pl. pótkocsi‑vontató összerendelés, flotta‑szintű optimalizálás.
6. API Végpontok és Payload Struktúrák
6.1. Asset Létrehozás (POST /api/v1/assets)
Endpoint: POST /api/v1/assets
RBAC: asset:create jogosultság szükséges
Státusz logika: Automatikus státusz meghatározás az adatkomplettség alapján
Request Body (AssetCreate):
{
"license_plate": "ABC-123",
"vin": "WBA12345678901234",
"brand": "BMW",
"model": "320i",
"vehicle_class": "personal",
"fuel_type": "petrol",
"catalog_id": 12345,
"engine_capacity": 1998,
"power_kw": 135,
"year_of_manufacture": 2020,
"organization_id": 1
}
Státusz meghatározás szabályai:
- "active" státusz: Ha mind az 5 alapvető mező (
license_plate,brand,model,vehicle_class,fuel_type) kitöltve van - "draft" státusz: Ha bármelyik alapvető mező hiányzik
- A
vinmező nem kötelező az "active" státuszhoz, de növeli a profil kitöltési százalékot
6.2. Asset Válasz (GET /api/v1/assets/{id})
Response Body (AssetResponse):
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"vin": "WBA12345678901234",
"license_plate": "ABC-123",
"brand": "BMW",
"model": "320i",
"vehicle_class": "personal",
"fuel_type": "petrol",
"engine_capacity": 1998,
"power_kw": 135,
"status": "active",
"data_status": "enriched",
"is_verified": false,
"profile_completion_percentage": 85,
"year_of_manufacture": 2020,
"current_organization_id": 1,
"owner_organization_id": 1,
"created_at": "2026-03-30T21:30:00Z",
"updated_at": "2026-03-30T21:30:00Z",
"catalog": {
"id": 12345,
"make": "BMW",
"model": "3 Series",
"generation": "G20",
"vehicle_class": "personal",
"fuel_type": "petrol",
"power_kw": 135,
"engine_capacity": 1998
}
}
6.3. Catalog Snapshot Sync Funkcionalitás
Ha a kérés tartalmaz catalog_id-t, a rendszer automatikusan betölti a hiányzó technikai adatokat a VehicleModelDefinition táblából:
Szinkronizációs logika:
- Ha a felhasználó nem ad meg értéket egy mezőhöz (pl.
power_kw), de a katalógus tartalmazza, a katalógus értéke kerül felhasználásra - Ha a felhasználó explicit megad egy értéket, az felülírja a katalógus értékét
- A szinkronizáció csak a következő mezőkre vonatkozik:
brand,model,vehicle_class,fuel_type,power_kw,engine_capacity,euro_classification,body_type
6.4. Service Book API (Digitális Szervizkönyv)
Esemény hozzáadása (POST /api/v1/assets/{id}/events):
{
"event_type": "SERVICE",
"odometer_reading": 50000,
"description": "Rendszeres szerviz: olajcsere, szűrők cseréje",
"event_date": "2026-03-30T10:00:00Z"
}
RBAC szabályok:
- Csak a
operator_org_idvagyowner_org_idszervezethez tartozó felhasználók adhatnak hozzá eseményeket - Admin felhasználók bármely eszközhöz hozzáadhatnak eseményeket
6.5. SaaS Limit Integráció
A create_or_claim_vehicle metódus továbbra is tiszteletben tartja a meglévő SaaS limit logikát:
- A
get_user_vehicle_limitfüggvény ellenőrzi a felhasználó és szervezet limitjeit - Csak "active" státuszú járművek számítanak a limitbe
- "draft" státuszú járművek nem érintik a limitet
7. Összefoglaló
A Thick Asset filozófia a Service Finder 2.0.1 alapvető pillére. Biztosítja, hogy a digitális ikrek ne csupán üres héjak legyenek, hanem teljes értékű, önállóan kezelhető üzleti entitások, amelyek képesek a valós világ változásait tükrözni és támogatni a flottavezetés, költségkövetés és szerviznaplózás összetett folyamatait.
Kulcsfontosságú implementációs pontok:
- Backward compatibility: A meglévő SaaS limit és RBAC logika változatlan marad
- Automatikus státuszkezelés: Az adatkomplettség alapján automatikus "draft" vs "active" státusz
- Intelligens katalógus szinkron: Hiányzó technikai adatok automatikus kitöltése katalógusból
- Service Book integráció: Teljes körű digitális szervizkönyv támogatás RBAC védelme mellett