🏗️ P0 DEEP ARCHITECTURE AUDIT — Teljes Adatbázis Séma Audit
Dátum: 2026-06-20
Hatáskör: Teljes SQLAlchemy modellréteg (backend/app/models/)
Elemzett fájlok: 26 modellfájl
Feltárt kapcsolatok: 95 ForeignKey, 65 relationship() deklaráció
JSONB mezők: 56 darab
Tartalomjegyzék
- Séma Áttekintés
- Teljes Táblalista Sémánként
- Kapcsolati Térkép (Entity-Relationship)
- Központi Entitás: Asset (Digital Twin)
- JSONB Mezők Teljes Feltárása
- Redundancia Analízis
- Hiányosság Elemzés — Admin, Biztosítás, Adó
- Architekturális Javaslat — Admin & Pénzügyi Adatok Tárolása
- Függelék: Teljes FK-relationship Mátrix
1. Séma Áttekintés
Az adatbázis 9 PostgreSQL sémára van bontva, Domain-Driven Design (DDD) elvek szerint:
| Séma |
Táblák száma |
Elsődleges Domain |
vehicle |
~28 |
Járművek, katalógus, költségek, események |
identity |
10 |
Személyek, felhasználók, tárcák, eszközök |
fleet |
7 |
Szervezetek, tagok, telephelyek, asset-hozzárendelés |
system |
14 |
Rendszerparaméterek, dokumentumok, értesítések, címek |
marketplace |
10 |
Szolgáltatók, szakértői címkék, felfedezés |
finance |
7 |
Kibocsátók, fizetési szándékok, kivételi kérelmek |
audit |
4 |
Biztonsági napló, műveleti napló, főkönyv |
gamification |
9 |
Pontok, szintek, jelvények, szezonok |
marketing |
7 |
Kampányok, kreatívok, elhelyezések, hirdetések |
| ÖSSZESEN |
~96 tábla |
|
2. Teljes Táblalista Sémánként
2.1 vehicle séma (~28 tábla)
| Tábla |
Modell |
Fájl |
Leírás |
vehicle.vehicle_types |
VehicleType |
vehicle_definitions.py:17 |
Jármű kategóriák JSONB units-szal |
vehicle.feature_definitions |
FeatureDefinition |
vehicle_definitions.py:33 |
Felszereltség jegyzék |
vehicle.vehicle_model_definitions |
VehicleModelDefinition |
vehicle_definitions.py:48 |
MDM Master — 60+ mező, 4 JSONB, UniqueConstraint 7 mezőn |
vehicle.model_feature_maps |
ModelFeatureMap |
vehicle_definitions.py:148 |
M:N modell↔felszereltség |
vehicle.dict_body_types |
BodyTypeDictionary |
vehicle_definitions.py:162 |
Karosszéria típusok i18n-nel |
vehicle.vehicle_catalog |
AssetCatalog |
asset.py:14 |
Katalógus bejegyzés, JSONB factory_data |
vehicle.assets |
Asset |
asset.py:69 |
Digital Twin — 84 oszlop, központi entitás |
vehicle.asset_financials |
AssetFinancials |
asset.py:246 |
Beszerzési/amortizációs adatok |
vehicle.asset_costs |
AssetCost |
asset.py:271 |
TCO költségek |
vehicle.vehicle_logbook |
VehicleLogbook |
asset.py:312 |
NAV menetlevél GPS-szel |
vehicle.asset_inspections |
AssetInspection |
asset.py:341 |
Napi ellenőrző lista |
vehicle.asset_reviews |
AssetReview |
asset.py:357 |
Jármű értékelések |
vehicle.vehicle_ownership_history |
VehicleOwnership |
asset.py:373 |
Tulajdonosváltozások |
vehicle.asset_telemetry |
AssetTelemetry |
asset.py:389 |
Telemetria (1:1) |
vehicle.odometer_readings |
OdometerReading |
asset.py:398 |
Kilométeróra állások időrendben |
vehicle.asset_assignments |
AssetAssignment |
asset.py:415 |
Asset↔Organization kapcsolat |
vehicle.asset_events |
AssetEvent |
asset.py:447 |
Digitális Szervizkönyv |
vehicle.exchange_rates |
ExchangeRate |
asset.py:492 |
Árfolyamok |
vehicle.catalog_discovery |
CatalogDiscovery |
asset.py:499 |
Robot felfedező munkaterület |
vehicle.vehicle_expenses |
VehicleExpenses |
asset.py:528 |
Költség reporting |
vehicle.vehicle_transfer_requests |
VehicleTransferRequest |
asset.py:546 |
Asset átadás-átvétel workflow |
vehicle.cost_categories |
CostCategory |
vehicle.py:19 |
Hierarchikus költségkategóriák |
vehicle.costs |
VehicleCost |
vehicle.py:64 |
⚠️ VMD-hez kötve, NEM Asset-hez! |
vehicle.vehicle_user_ratings |
VehicleUserRating |
vehicle.py:112 |
4-dimenziós felhasználói értékelés |
vehicle.gb_catalog_discovery |
GbCatalogDiscovery |
vehicle.py:168 |
GB piaci felfedező robot |
vehicle.motorcycle_specs |
MotorcycleSpecs |
motorcycle_specs.py:6 |
Motor technikai adatok JSONB-ben |
vehicle.external_reference_library |
ExternalReferenceLibrary |
external_reference.py:6 |
Külső referencia könyvtár |
vehicle.external_reference_queue |
ExternalReferenceQueue |
external_reference_queue.py:6 |
Külső referencia várólista |
vehicle.reference_lookup |
ReferenceLookup |
reference_data.py |
Referencia kereső JSONB-vel |
2.2 identity séma (10 tábla)
| Tábla |
Modell |
Fájl |
Leírás |
identity.persons |
Person |
identity.py:37 |
DNS — valós személy, soha nem törölhető |
identity.users |
User |
identity.py:126 |
Login entitás, GDPR törölhető |
identity.wallets |
Wallet |
identity.py:223 |
Triple Wallet |
identity.verification_tokens |
VerificationToken |
identity.py:244 |
Jóváhagyó tokenek |
identity.social_accounts |
SocialAccount |
identity.py:258 |
Közösségi fiókok |
identity.active_vouchers |
ActiveVoucher |
identity.py:276 |
Aktív utalványok |
identity.user_trust_profiles |
UserTrustProfile |
identity.py:290 |
Gondos Gazda Index |
identity.one_time_passwords |
OneTimePassword |
identity.py:321 |
Egyszeri jelszavak |
identity.devices |
Device |
identity.py:340 |
Eszköz fingerprint |
identity.user_device_links |
UserDeviceLink |
identity.py:355 |
User↔Device kapcsolat |
2.3 fleet séma (7 tábla)
| Tábla |
Modell |
Fájl |
Leírás |
fleet.organizations |
Organization |
organization.py:70 |
Központi szervezet — lifecycle |
fleet.org_roles |
OrgRole |
organization.py:39 |
Dinamikus RBAC JSONB-vel |
fleet.organization_financials |
OrganizationFinancials |
organization.py:215 |
Éves pénzügyi adatok |
fleet.organization_members |
OrganizationMember |
organization.py:230 |
Tagok (user/person/invited_email) |
fleet.organization_sales_assignments |
OrganizationSalesAssignment |
organization.py:268 |
Értékesítési hozzárendelés |
fleet.branches |
Branch |
organization.py:279 |
Telephelyek PostGIS-szel |
fleet.asset_assignments |
AssetAssignment |
asset.py:415 |
Asset-szervezet kapcsolat |
2.4 system séma (14 tábla)
| Tábla |
Modell |
Fájl |
Leírás |
system.system_parameters |
SystemParameter |
system.py:19 |
Hierarchikus paraméterek |
system.internal_notifications |
InternalNotification |
system.py:40 |
Értesítések |
system.system_data_completion_weights |
SystemDataCompletionWeight |
system.py:62 |
Kitöltöttségi súlyok |
system.system_service_staging |
SystemServiceStaging |
system.py:85 |
Szolgáltatás staging |
system.documents |
Document |
document.py:11 |
NAS-alapú doksi metatároló |
system.legal_documents |
LegalDocument |
legal.py:9 |
Jogi dokumentumok |
system.legal_acceptances |
LegalAcceptance |
legal.py:24 |
Jogi elfogadások |
system.translations |
Translation |
translation.py:8 |
Fordítások |
system.geo_postal_codes |
GeoPostalCode |
address.py:12 |
Irányítószám kereső |
system.geo_streets |
GeoStreet |
address.py:22 |
Utca regiszter |
system.geo_street_types |
GeoStreetType |
address.py:31 |
Utca típusok |
system.addresses |
Address |
address.py:39 |
Univerzális cím GPS-szel |
system.pending_actions |
PendingAction |
security.py:22 |
Sentinel — 4 szem elv |
system.subscription_tiers |
SubscriptionTier |
core_logic.py:12 |
Előfizetési csomagok |
2.5 marketplace séma (10 tábla)
| Tábla |
Modell |
Fájl |
Leírás |
marketplace.service_profiles |
ServiceProfile |
service.py:21 |
Szolgáltatói profilok PostGIS-szel |
marketplace.expertise_tags |
ExpertiseTag |
service.py:79 |
4-szintű hierarchia |
marketplace.service_expertises |
ServiceExpertise |
service.py:142 |
M:N profil↔tag |
marketplace.service_staging |
ServiceStaging |
service.py:158 |
Szolgáltatás staging |
marketplace.discovery_parameters |
DiscoveryParameter |
service.py:184 |
Felfedezési paraméterek |
marketplace.costs |
Cost |
service.py:196 |
Költségek |
marketplace.service_specialties |
ServiceSpecialty |
core_logic.py:88 |
Önhivatkozó hierarchia |
marketplace.service_providers |
ServiceProvider |
social.py:22 |
Közösségi szolgáltatók |
marketplace.ratings |
Rating |
address.py:77 |
Univerzális értékelés |
marketplace.service_reviews |
ServiceReview |
social.py:86 |
Ellenőrzött értékelések |
marketplace.votes |
Vote |
social.py:46 |
Közösségi szavazatok |
2.6 finance séma (7 tábla)
| Tábla |
Modell |
Fájl |
Leírás |
finance.issuers |
Issuer |
finance.py:27 |
Számlakibocsátók |
finance.payment_intents |
PaymentIntent |
payment.py:30 |
Double Lock |
finance.withdrawal_requests |
WithdrawalRequest |
payment.py:147 |
Kivételi kérelmek |
finance.org_subscriptions |
OrganizationSubscription |
core_logic.py:25 |
Szervezeti előfizetés |
finance.user_subscriptions |
UserSubscription |
core_logic.py:49 |
Felhasználói előfizetés |
finance.credit_logs |
CreditTransaction |
core_logic.py:72 |
Kredit napló |
finance.exchange_rates |
ExchangeRate |
asset.py:492 |
Árfolyamok |
2.7 audit séma (4 tábla)
| Tábla |
Modell |
Fájl |
Leírás |
audit.security_audit_logs |
SecurityAuditLog |
audit.py:12 |
Biztonsági események |
audit.operational_logs |
OperationalLog |
audit.py:29 |
Napi műveletek |
audit.process_logs |
ProcessLog |
audit.py:43 |
Robot naplók |
audit.financial_ledger |
FinancialLedger |
audit.py:78 |
Központi főkönyv |
2.8 gamification séma (9 tábla)
| Tábla |
Modell |
Fájl |
Leírás |
gamification.point_rules |
PointRule |
gamification.py:13 |
Akció→pont szabályok |
gamification.level_configs |
LevelConfig |
gamification.py:23 |
Szintküszöbök |
gamification.points_ledger |
PointsLedger |
gamification.py:33 |
XP/büntetés tranzakciók |
gamification.user_stats |
UserStats |
gamification.py:49 |
Aggregált statok |
gamification.badges |
Badge |
gamification.py:71 |
Jelvények |
gamification.user_badges |
UserBadge |
gamification.py:80 |
M:N user↔jelvény |
gamification.user_contributions |
UserContribution |
gamification.py:95 |
Hozzájárulások |
gamification.seasons |
Season |
gamification.py:136 |
Szezonok |
gamification.seasonal_competitions |
SeasonalCompetitions |
gamification.py:149 |
Versenyek |
2.9 marketing séma (7 tábla)
| Tábla |
Modell |
Fájl |
Leírás |
marketing.campaigns |
Campaign |
marketing.py:65 |
Kampányok JSONB célzással |
marketing.creatives |
Creative |
marketing.py:126 |
Kreatív anyagok |
marketing.placements |
Placement |
marketing.py:174 |
Hirdetési felületek |
marketing.campaign_creatives |
CampaignCreative |
marketing.py:204 |
M:N kampány↔kreatív |
marketing.campaign_placements |
CampaignPlacement |
marketing.py:226 |
M:N kampány↔elhelyezés |
marketing.ad_impressions |
AdImpression |
marketing.py:247 |
Hirdetési megjelenések |
marketing.ad_clicks |
AdClick |
marketing.py:276 |
Hirdetési kattintások |
3. Kapcsolati Térkép (Entity-Relationship)
3.1 Vizuális Összefoglaló
3.2 Kritikus Kapcsolatok
✳️ FIGYELEM: VehicleCost eltérő referenciája
A VehicleCost vehicle_id mezeje a VehicleModelDefinition-re mutat, NEM az Asset-re! Ez architekturális anomália: a költségek a modelldefinícióhoz vannak kötve, nem a konkrét járműpéldányhoz.
✳️ Többféle cost modell
✳️ Person-User Dual Entity
Person — DNS, halhatatlan, merged_into_id self-ref
User — Login entitás, törölhető
OrganizationMember mindkettőhöz kötődhet
✳️ Önhivatkozó hierarchiák (7 darab)
CostCategory — parent_id self
ExpertiseTag — parent_id + path (4 szint)
ServiceSpecialty — parent_id self
User.referred_by_id — self
User.current_sales_agent_id — self
Person.merged_into_id — self
ServiceProfile.parent_id — self
4. Központi Entitás: Asset (Digital Twin)
Az Asset a rendszer központi entitása, 84 oszloppal és 12+ kapcsolattal.
4.1 Asset mezőstruktúra
4.2 Asset kapcsolati kép
5. JSONB Mezők Teljes Feltárása
Összesen 56 JSONB mező található. Alább a kritikusak.
5.1 Asset.individual_equipment — KRITIKUS
Deklaráció: asset.py:114
Jelenlegi tartalom:
Probléma: Az is_primary logikai mező JSONB-ben van elrejtve, lekérdezhetetlen index nélkül. ORM szinten computed property-ként van kezelve (lásd asset.py:183-198).
5.2 Többi Kritikus JSONB Mező
| Modell |
Mező |
Cél |
AssetCatalog |
factory_data |
Gyári adatok |
AssetFinancials |
accounting_details |
Számviteli részletek |
AssetCost |
data |
Költség metaadatok |
VehicleModelDefinition |
marketing_name_aliases |
Alternatív nevek |
VehicleModelDefinition |
raw_api_data |
API nyers válasz |
VehicleModelDefinition |
research_metadata |
Kutatási adatok |
VehicleModelDefinition |
specifications |
Specifikációk |
Person |
identity_docs |
Személyi docs |
Person |
ice_contact |
Vészhelyzeti kapcsolat |
User |
visual_settings |
UI beállítások |
User |
custom_permissions |
Egyedi jogok |
User |
alternative_emails |
Alternatív emailek |
User |
email_history |
Email változások |
Organization |
visual_settings |
Cég UI beállítások |
Organization |
settings |
Cég beállítások |
Organization |
aliases |
Alias nevek |
Organization |
tags |
Címkék |
Organization |
notification_settings |
Értesítési beállítások |
Organization |
external_integration_config |
Külső integráció |
ServiceProfile |
vibe_analysis |
AI hangulatelemzés |
ServiceProfile |
social_links |
Közösségi linkek |
ServiceProfile |
specialization_tags |
Specializációk |
ServiceProfile |
verification_log |
Ellenőrzési napló |
ServiceProfile |
opening_hours |
Nyitvatartás |
ExpertiseTag |
name_translations |
Többnyelvű név |
ExpertiseTag |
search_keywords |
Kulcsszavak |
OrgRole |
permissions |
Capability flag-ek |
Branch |
opening_hours |
Nyitvatartás |
Rating |
images |
Képek array |
Campaign |
targeting |
Célzás |
AssetInspection |
checklist_results |
Ellenőrző lista |
PendingAction |
payload |
Műveleti adatok |
SubscriptionTier |
rules |
Csomag szabályok |
OrganizationSubscription |
extra_allowances |
Booster architektúra |
SystemParameter |
value |
Paraméter érték |
InternalNotification |
data |
Értesítési adatok |
SystemServiceStaging |
raw_data |
Nyers staging adat |
FinancialLedger |
details |
Tranzakció részletek |
6. Redundancia Analízis
6.1 MAGAS KOCKÁZATÚ
1. Dupla Költség Rendszer
| Tábla |
Referencia |
Cél |
VehicleCost |
vehicle_id → VMD.id |
❌ Anomália |
AssetCost |
asset_id → Asset.id |
✅ Helyes |
VehicleExpenses |
vehicle_id → Asset.id |
✅ Helyes |
Kockázat: VehicleCost a modell-definícióhoz köt, nem a konkrét járműhöz.
2. Háromszoros kilométeróra tárolás
Asset.current_mileage — denormalizált utolsó érték
OdometerReading.reading — időbeli adatsor
AssetTelemetry.current_mileage — harmadik helyen!
3. Asset mezők duplikációja
make, model, year, variant, fuel_type szerepel:
Asset-ben (denormalizált)
VehicleModelDefinition-ben (eredeti)
AssetCatalog-ban (katalógus)
4. Cím adatok duplikációja
Branch denormalizált címmezőket tartalmaz Address mellett.
6.2 KÖZEPES KOCKÁZATÚ
5. Kettős tulajdonos mezők
Organization.owner_id → users (technikai, törölhető)
Organization.legal_owner_id → persons (jogi, halhatatlan)
Szándékos (Dual Entity), de potenciális konfúzió.
6. Subscription mezők duplikációja
Organization denormalizáltan tárolja a subscription_plan, base_asset_limit, purchased_extra_slots mezőket, melyek az OrganizationSubscription-ban is szerepelnek.
6.3 ALACSONY KOCKÁZAT (szándékos)
owner_person_id + owner_org_id — B2B/B2C miatt
- Triple Wallet mezők — szándékos
7. Hiányosság Elemzés
7.1 Jelenlegi Állapot
| Domain |
Státusz |
Megjegyzés |
| Regisztrációs doksik |
⚠️ Részleges |
3 mező az Asset-en |
| Műszaki vizsga |
⚠️ Részleges |
2 mező (last/next) |
| Első forgalomba helyezés |
✅ Van |
first_registration_date |
| KGFB biztosítás |
❌ HIÁNYZIK |
Nincs adatmodell |
| Casco biztosítás |
❌ HIÁNYZIK |
Nincs adatmodell |
| Súlyadó |
❌ HIÁNYZIK |
Nincs adatmodell |
| Cégautó adó |
❌ HIÁNYZIK |
Nincs adatmodell |
| Forgalmi engedély |
⚠️ Részleges |
Csak szám + érvényesség |
| Törzskönyv |
⚠️ Részleges |
Csak szám |
| Import megkülönböztetés |
❌ HIÁNYZIK |
Nincs |
| Expected/Recurring költségek |
❌ HIÁNYZIK |
Nincs |
7.2 Specifikus Hiányzó Mezők
Biztosítás (teljesen hiányzik)
Adók (teljesen hiányzik)
Admin (részleges)
Ütemezett költségek (teljesen hiányzik)
8. Architekturális Javaslat
8.1 Ajánlott: Dedikált táblák (előnyben részesített)
8.2 Alternatíva: Meglévő modellek bővítése (gyorsabb)
Asset bővítése:
AssetFinancials bővítése:
8.3 Ajánlott Megvalósítási Sorrend
- P1 —
VehicleInsurancePolicy új modell (dedikált tábla)
- P1 —
VehicleTaxObligation új modell (dedikált tábla)
- P2 —
VehicleExpectedCost új modell (ütemezett költségek)
- P2 —
VehicleRegistrationDocument új modell (admin adatok elkülönítése)
- P3 —
individual_equipment.is_primary kivezetése dedikált boolean oszlopba
9. Függelék: Teljes FK-relationship Mátrix
9.1 Minden ForeignKey
9.2 Leggyakrabban Hivatkozott Táblák
| Tábla |
Hivatkozások |
Honnan |
identity.users |
30+ |
Minden domainből |
vehicle.assets |
12 |
cost, event, logbook, inspection, stb. |
fleet.organizations |
10 |
asset, cost, member, branch, stb. |
identity.persons |
6 |
user, organization, financial_ledger |
vehicle.vehicle_model_definitions |
4 |
catalog, cost, rating |
vehicle.cost_categories |
3 |
asset_cost, vehicle_cost |
Összefoglalás
Főbb Megállapítások
- Központi entitás:
Asset — Digital Twin, 12+ kapcsolattal
- Legkritikusabb redundancia:
VehicleCost a VMD-hez köt (NEM az Asset-hez)
- Dual Entity:
Person (DNS) + User (login) sikeresen implementálva
- 7 önhivatkozó hierarchia — CostCategory, ExpertiseTag (4 szint), ServiceSpecialty, User (referral, sales), Person (merge), ServiceProfile
- 56 JSONB mező — Rugalmasság, de kereshetőséget ront
individual_equipment.is_primary — Logikai mező JSONB-ben elrejtve
Kritikus Hiányosságok
- ❌ Biztosítási adatok teljes hiánya (KGFB, Casco)
- ❌ Adó adatok teljes hiánya (súlyadó, cégautó adó)
- ❌ Első forgalomba helyezés típusának hiánya
- ❌ Ütemezett/expected költségek hiánya
- ⚠️ Regisztrációs dokumentumok részlegesek (3 mező)
- ⚠️ Három cost modell párhuzamosan eltérő referenciákkal
Ajánlott Következő Lépések
- P1: Dedikált
VehicleInsurancePolicy és VehicleTaxObligation modellek
- P1:
Asset bővítése hiányzó admin mezőkkel
- P2:
VehicleExpectedCost modell
- P2:
VehicleRegistrationDocument modell
- P3:
individual_equipment.is_primary dedikált boolean oszlopba
- P3: Cost modellek konszolidációja