# đŸ—ïž Teljes AdatbĂĄzis SĂ©ma Audit & Partner Modell FelfedezĂ©s **DĂĄtum:** 2026-06-16 **Auditor:** Rendszer-Architect (DeepSeek Reasoner) **CĂ©l:** Partner/SzolgĂĄltatĂł modellek azonosĂ­tĂĄsa Ă©s a teljes adatbĂĄzis tĂ©rkĂ©p elkĂ©szĂ­tĂ©se --- ## 1. 🔍 CÉLTUDATOS KERESÉS: CĂ©gek / Partnerek / SzolgĂĄltatĂłk ### 1.1. TalĂĄlatok összefoglalĂĄsa | KeresƑszĂł | TalĂĄlat | Modell | SĂ©ma | |-----------|---------|--------|------| | **Company** | ✅ VAN | `Organization` | `fleet.organizations` | | **Partner** | ✅ RÉSZBEN | `Organization.is_affiliate_partner` | `fleet.organizations` | | **Vendor** | ❌ NINCS | - | - | | **ServiceProvider** | ✅ VAN | `ServiceProvider` (rĂ©gi) | `marketplace.service_providers` | | **ServiceProfile** | ✅ VAN | `ServiceProfile` (Ășj) | `marketplace.service_profiles` | | **Contact/Person** | ✅ VAN | `Person` | `identity.persons` | | **Tenant** | ❌ NINCS | - | - | | **Business** | ✅ VAN | `Organization` (org_type=business) | `fleet.organizations` | | **Branch/Location** | ✅ VAN | `Branch` | `fleet.branches` | ### 1.2. FƑ következtetĂ©s **NINCS dedikĂĄlt "Partner" vagy "SzolgĂĄltatĂł" modell.** A rendszer **kĂ©t kĂŒlönbözƑ, egymĂĄstĂłl fĂŒggetlen** entitĂĄskĂ©szlettel dolgozik: 1. **`fleet.organizations`** - Szervezetek (CĂ©gek, FlottĂĄk, EgyĂ©ni vĂĄllalkozĂłk) 2. **`marketplace.service_providers`** + **`marketplace.service_profiles`** - Szerviz szolgĂĄltatĂłk Ez a kĂ©t vilĂĄg **gyengĂ©n kapcsolĂłdik** egymĂĄshoz: a `ServiceProfile` hivatkozhat egy `Organization`-ra, de ez opcionĂĄlis. --- ## 2. 📋 MEGLÉVƐ MODELLEK RÉSZLETES ELEMZÉSE ### 2.1. `fleet.organizations` (Organization modell) **FĂĄjl:** `backend/app/models/marketplace/organization.py` **TĂĄbla:** `fleet.organizations` **Oszlopok csoportosĂ­tva:** #### 🏱 Alapadatok | Oszlop | TĂ­pus | KötelezƑ? | MegjegyzĂ©s | |--------|-------|-----------|------------| | `id` | `INTEGER` | ✅ | PK | | `name` | `VARCHAR(255)` | ✅ | CĂ©gnĂ©v | | `full_name` | `VARCHAR` | ✅ | Teljes cĂ©gnĂ©v | | `display_name` | `VARCHAR(50)` | ❌ | Rövid megjelenĂ­tĂ©si nĂ©v | | `folder_slug` | `VARCHAR(12)` | ✅ | **UNIQUE** Rendszer azonosĂ­tĂł | | `org_type` | `ENUM(OrgType)` | ✅ | `individual`, `service`, `service_provider`, `fleet_owner`, `club`, `business` | #### 📍 CĂ­m adatok (DenormalizĂĄlt) | Oszlop | TĂ­pus | |--------|-------| | `address_id` | `UUID (FK → system.addresses.id)` | | `address_zip`, `address_city`, `address_street_name`, `address_street_type`, `address_house_number`, `address_hrsz` | `VARCHAR` | | `country_code` | `VARCHAR(2)` → default "HU" | | `language` | `VARCHAR(5)` → default "hu" | #### 🆔 AdĂłazonosĂ­tĂłk | Oszlop | TĂ­pus | MegjegyzĂ©s | |--------|-------|------------| | `tax_number` | `VARCHAR(20)` | **UNIQUE** AdĂłszĂĄm | | `reg_number` | `VARCHAR(50)` | CĂ©gjegyzĂ©kszĂĄm | #### đŸ›Ąïž ÉletĂșt / BiztonsĂĄg | Oszlop | TĂ­pus | MegjegyzĂ©s | |--------|-------|------------| | `legal_owner_id` | `BIGINT (FK → identity.persons.id)` | Jogi kĂ©pviselƑ (Person) | | `owner_id` | `INTEGER (FK → identity.users.id)` | Technikai tulajdonos (User) | | `first_registered_at` | `TIMESTAMPTZ` | ElsƑ regisztrĂĄciĂł (örök) | | `current_lifecycle_started_at` | `TIMESTAMPTZ` | AktuĂĄlis Ă©letciklus kezdete | | `lifecycle_index` | `INTEGER` | HĂĄnyadik Ă©letciklus | | `is_deleted` | `BOOLEAN` | Soft delete flag | | `is_active` | `BOOLEAN` | AktĂ­v flag | | `is_anonymized` | `BOOLEAN` | AnonimizĂĄlt flag | | `is_verified` | `BOOLEAN` | KYC verifikĂĄciĂł | #### 💰 Partner / ÉrtĂ©kesĂ­tĂ©s | Oszlop | TĂ­pus | MegjegyzĂ©s | |--------|-------|------------| | `is_affiliate_partner` | `BOOLEAN` | **PARTNER FLAG** → `false` default | | `subscription_plan` | `VARCHAR(30)` | "FREE", "PREMIUM", stb. | | `base_asset_limit` | `INTEGER` | Eszköz limit | | `is_ownership_transferable` | `BOOLEAN` | ÁtruhĂĄzhatĂł-e | #### ⚙ KonfigurĂĄciĂł | Oszlop | TĂ­pus | |--------|-------| | `notification_settings` | `JSON` | | `external_integration_config` | `JSON` | | `visual_settings` | `JSONB` | #### 🔗 Kapcsolatok (Relationships) ```python Organization ├── assets: List[AssetAssignment] # JĂĄrmƱ hozzĂĄrendelĂ©sek ├── members: List[OrganizationMember] # Tagok (User/Person) ├── owner: User # Technikai tulajdonos ├── financials: List[OrganizationFinancials] # PĂ©nzĂŒgyi adatok ├── service_profile: ServiceProfile # OpcionĂĄlis szerviz profil (1:1) ├── branches: List[Branch] # Telephelyek ├── legal_owner: Person # Jogi kĂ©pviselƑ └── vehicle_costs: List[VehicleCost] # JĂĄrmƱ költsĂ©gek ``` --- ### 2.2. `marketplace.service_providers` (ServiceProvider modell - RÉGI) **FĂĄjl:** `backend/app/models/marketplace/service.py` **TĂĄbla:** `marketplace.service_providers` | Oszlop | TĂ­pus | MegjegyzĂ©s | |--------|-------|------------| | `id` | `INTEGER` | PK | | `name` | `VARCHAR` | ✅ NĂ©v | | `address` | `VARCHAR` | ✅ CĂ­m (egyszerƱ szöveg) | | `category` | `VARCHAR` | ❌ KategĂłria | | `status` | `USER-DEFINED` | ✅ StĂĄtusz (ENUM) | | `source` | `USER-DEFINED` | ✅ ForrĂĄs (ENUM) | | `validation_score` | `INTEGER` | ✅ ValidĂĄciĂłs pontszĂĄm | | `evidence_image_path` | `VARCHAR` | ❌ KĂ©p bizonyĂ­tĂ©k | | `added_by_user_id` | `INTEGER` | ❌ Ki adta hozzĂĄ | | `created_at` | `TIMESTAMPTZ` | LĂ©trehozĂĄs | > ⚠ **Ez a tĂĄbla egy rĂ©gebbi verziĂł. Nem hasznĂĄlja a `ServiceProfile` modell, hanem kĂŒlön kezelendƑ.** --- ### 2.3. `marketplace.service_profiles` (ServiceProfile modell - ÚJ) **FĂĄjl:** `backend/app/models/marketplace/service.py` **TĂĄbla:** `marketplace.service_profiles` | Oszlop | TĂ­pus | MegjegyzĂ©s | |--------|-------|------------| | `id` | `INTEGER` | PK | | `organization_id` | `INTEGER (FK → fleet.organizations.id)` | **UNIQUE** - Kapcsolat a szervezethez | | `parent_id` | `INTEGER (FK → self)` | Hierarchia (pl. franchise) | | `fingerprint` | `VARCHAR(255)` | **UNIQUE INDEX** - Robot ĂĄltal generĂĄlt | | `location` | `GEOMETRY(POINT)` | PostGIS hely | | `status` | `ENUM(ServiceStatus)` | `ghost`, `active`, `flagged`, `suspended` | | `google_place_id` | `VARCHAR(100)` | **UNIQUE** Google Places azonosĂ­tĂł | | `trust_score` | `INTEGER` | Trust engine pontszĂĄm | | `is_verified` | `BOOLEAN` | VerifikĂĄlt szolgĂĄltatĂł | | `vibe_analysis` | `JSONB` | AI hangulatelemzĂ©s | | `social_links` | `JSONB` | KözössĂ©gi mĂ©dia linkek | | `specialization_tags` | `JSONB` | SpecializĂĄciĂłs cĂ­mkĂ©k | | `opening_hours` | `JSONB` | NyitvatartĂĄs | | `contact_phone` | `VARCHAR` | Telefon | | `contact_email` | `VARCHAR` | Email | | `website` | `VARCHAR` | Weboldal | | `bio` | `TEXT` | LeĂ­rĂĄs | | `rating_overall` | `FLOAT` | ÁtfogĂł Ă©rtĂ©kelĂ©s | | `rating_verified_count` | `INTEGER` | Verified review-ok szĂĄma | #### 🔗 Kapcsolatok ```python ServiceProfile ├── organization: Organization # 1:1 kapcsolat ├── expertises: List[ServiceExpertise] # Szakmai cĂ­mkĂ©k └── reviews: List[ServiceReview] # VĂ©lemĂ©nyek ``` --- ### 2.4. `marketplace.service_reviews` (Verified Service Reviews) **TĂĄbla:** `marketplace.service_reviews` | Oszlop | TĂ­pus | MegjegyzĂ©s | |--------|-------|------------| | `id` | `INTEGER` | PK | | `service_id` | `INTEGER (FK → marketplace.service_profiles.id)` | Melyik szerviz | | `user_id` | `INTEGER (FK → identity.users.id)` | Ki Ă­rta | | `transaction_id` | `UUID` | **UNIQUE** - TranzakciĂł azonosĂ­tĂł | | `price_rating` | `INTEGER (1-5)` | Ár Ă©rtĂ©kelĂ©s | | `quality_rating` | `INTEGER (1-5)` | MinƑsĂ©g Ă©rtĂ©kelĂ©s | | `time_rating` | `INTEGER (1-5)` | IdƑ Ă©rtĂ©kelĂ©s | | `communication_rating` | `INTEGER (1-5)` | KommunikĂĄciĂł Ă©rtĂ©kelĂ©s | | `comment` | `TEXT` | Szöveges vĂ©lemĂ©ny | | `is_verified` | `BOOLEAN` | TranzakciĂłhoz kötött | | `created_at`/`updated_at` | `TIMESTAMPTZ` | Audit | --- ### 2.5. `marketplace.ratings` (ÁltalĂĄnos Ă©rtĂ©kelĂ©sek) **TĂĄbla:** `marketplace.ratings` | Oszlop | TĂ­pus | MegjegyzĂ©s | |--------|-------|------------| | `id` | `INTEGER` | PK | | `author_id` | `INTEGER` | Ki Ă­rta | | `target_organization_id` | `INTEGER` | CĂ©l szervezet (opcionĂĄlis) | | `target_user_id` | `INTEGER` | CĂ©l felhasznĂĄlĂł (opcionĂĄlis) | | `target_branch_id` | `UUID` | CĂ©l telephely (opcionĂĄlis) | | `score` | `NUMERIC` | PontszĂĄm | | `comment` | `TEXT` | Szöveges | | `images` | `JSONB` | KĂ©pek | | `is_verified` | `BOOLEAN` | VerifikĂĄlt | --- ### 2.6. `fleet.branches` (Telephelyek) **TĂĄbla:** `fleet.branches` | Oszlop | TĂ­pus | MegjegyzĂ©s | |--------|-------|------------| | `id` | `UUID` | PK | | `organization_id` | `INTEGER (FK → fleet.organizations.id)` | ✅ Melyik szervezethez | | `address_id` | `UUID (FK → system.addresses.id)` | ❌ CĂ­m (strukturĂĄlt) | | `name` | `VARCHAR(100)` | ✅ Telephely nĂ©v | | `is_main` | `BOOLEAN` | Központi telephely | | `postal_code`, `city`, `street_name`, stb. | `VARCHAR` | DenormalizĂĄlt cĂ­m | | `location` | `GEOMETRY(POINT)` | PostGIS | | `opening_hours` | `JSONB` | NyitvatartĂĄs | | `branch_rating` | `FLOAT` | Telephely Ă©rtĂ©kelĂ©s | | `status` | `VARCHAR(30)` | `active`, `inactive` | | `is_deleted` | `BOOLEAN` | Soft delete | --- ## 3. đŸ—ș TELJES ADATBÁZIS TÉRKÉP (Minden sĂ©ma Ă©s tĂĄbla) ### 3.1. Identity sĂ©ma (SzemĂ©lyek, FelhasznĂĄlĂłk, HitelesĂ­tĂ©s) | TĂĄbla | LeĂ­rĂĄs | StĂĄtusz | |-------|--------|---------| | `identity.persons` | TermĂ©szetes szemĂ©lyek (DNS szint) | ✅ **AktĂ­v** | | `identity.users` | Technikai fiĂłkok (bejelentkezĂ©s) | ✅ **AktĂ­v** | | `identity.wallets` | PĂ©nztĂĄrcĂĄk (Triple Wallet) | ✅ **AktĂ­v** | | `identity.active_vouchers` | AktĂ­v voucher-ek | ✅ **AktĂ­v** | | `identity.user_trust_profiles` | Trust score profilok | ✅ **AktĂ­v** | | `identity.verification_tokens` | Email/telefon verifikĂĄciĂł | ✅ **AktĂ­v** | | `identity.one_time_passwords` | OTP kĂłdok | ✅ **AktĂ­v** | | `identity.social_accounts` | KözössĂ©gi mĂ©dia kapcsolatok | ✅ **AktĂ­v** | | `identity.devices` | Eszköz fingerprint | ✅ **AktĂ­v** | | `identity.user_device_links` | User-Eszköz kapcsolatok | ✅ **AktĂ­v** | ### 3.2. Fleet sĂ©ma (Szervezetek, FlottĂĄk) | TĂĄbla | LeĂ­rĂĄs | StĂĄtusz | |-------|--------|---------| | `fleet.organizations` | Szervezetek (cĂ©gek, flottĂĄk, szolgĂĄltatĂłk) | ✅ **AktĂ­v** | | `fleet.organization_members` | TagsĂĄgok (User/Person → Organization) | ✅ **AktĂ­v** | | `fleet.organization_financials` | PĂ©nzĂŒgyi adatok (Ă©ves) | ✅ **AktĂ­v** | | `fleet.branches` | Telephelyek | ✅ **AktĂ­v** | | `fleet.asset_assignments` | JĂĄrmƱ hozzĂĄrendelĂ©sek | ✅ **AktĂ­v** | | `fleet.org_sales_assignments` | ÉrtĂ©kesĂ­tĂ©si hozzĂĄrendelĂ©sek | ✅ **AktĂ­v** | ### 3.3. Vehicle sĂ©ma (JĂĄrmƱvek, KatalĂłgus) | TĂĄbla | LeĂ­rĂĄs | StĂĄtusz | |-------|--------|---------| | `vehicle.vehicle_model_definitions` | JĂĄrmƱ modellek (MDM) | ✅ **AktĂ­v** | | `vehicle.vehicle_catalog` | KatalĂłgus sablonok | ✅ **AktĂ­v** | | `vehicle.assets` | Fizikai eszközök (Digital Twin) | ✅ **AktĂ­v** | | `vehicle.vehicle_types` | JĂĄrmƱ tĂ­pusok | ✅ **AktĂ­v** | | `vehicle.feature_definitions` | FelszereltsĂ©g elemek | ✅ **AktĂ­v** | | `vehicle.model_feature_maps` | Modell-FelszereltsĂ©g kapcsolatok | ✅ **AktĂ­v** | | `vehicle.dict_body_types` | KarosszĂ©ria tĂ­pus szĂłtĂĄr | ✅ **AktĂ­v** | | `vehicle.cost_categories` | KöltsĂ©gkategĂłriĂĄk | ✅ **AktĂ­v** | | `vehicle.costs` | JĂĄrmƱ költsĂ©gek (TCO) | ✅ **AktĂ­v** | | `vehicle.vehicle_expenses` | JĂĄrmƱ kiadĂĄsok (jelentĂ©sekhez) | ✅ **AktĂ­v** | | `vehicle.odometer_readings` | KilomĂ©terĂłra ĂĄllĂĄsok | ✅ **AktĂ­v** | | `vehicle.vehicle_ownership_history` | Tulajdonos törtĂ©net | ✅ **AktĂ­v** | | `vehicle.vehicle_transfer_requests` | ÁtruhĂĄzĂĄsi kĂ©relmek | ✅ **AktĂ­v** | | `vehicle.catalog_discovery` | KatalĂłgus felfedezƑ vĂĄrĂłlista | ✅ **AktĂ­v** | | `vehicle.gb_catalog_discovery` | UK piaci felfedezƑ | ✅ **AktĂ­v** | | `vehicle.auto_data_crawler_queue` | Crawler vĂĄrĂłlista | ✅ **AktĂ­v** | | `vehicle.vehicle_logbook` | JĂĄrmƱ naplĂłkönyv | ✅ **AktĂ­v** | | `vehicle.motorcycle_specs` | MotorkerĂ©kpĂĄr specifikĂĄciĂłk | ✅ **AktĂ­v** | | `vehicle.external_reference_library` | KĂŒlsƑ referencia könyvtĂĄr | ✅ **AktĂ­v** | | `vehicle.reference_lookup` | Referencia keresƑ | ✅ **AktĂ­v** | | `vehicle.vehicle_user_ratings` | FelhasznĂĄlĂłi jĂĄrmƱ Ă©rtĂ©kelĂ©sek | ✅ **AktĂ­v** | | `vehicle.asset_costs` | Eszköz költsĂ©gek | ✅ **AktĂ­v** | | `vehicle.asset_events` | EsemĂ©nynaplĂł | ✅ **AktĂ­v** | | `vehicle.asset_financials` | PĂ©nzĂŒgyi adatok | ✅ **AktĂ­v** | | `vehicle.asset_inspections` | EllenƑrzĂ©sek | ✅ **AktĂ­v** | | `vehicle.asset_reviews` | Eszköz vĂ©lemĂ©nyek | ✅ **AktĂ­v** | | `vehicle.asset_telemetry` | Telemetria adatok | ✅ **AktĂ­v** | ### 3.4. Marketplace sĂ©ma (PiactĂ©r, Szervizek) | TĂĄbla | LeĂ­rĂĄs | StĂĄtusz | |-------|--------|---------| | `marketplace.service_providers` | SzolgĂĄltatĂłk (RÉGI, egyszerƱ) | ⚠ **HasznĂĄlaton kĂ­vĂŒl?** | | `marketplace.service_profiles` | Szerviz profilok (ÚJ) | ✅ **AktĂ­v** | | `marketplace.service_reviews` | VerifikĂĄlt vĂ©lemĂ©nyek | ✅ **AktĂ­v** | | `marketplace.expertise_tags` | Szakmai cĂ­mkĂ©k | ✅ **AktĂ­v** | | `marketplace.service_expertises` | Szerviz-Szakma kapcsolatok | ✅ **AktĂ­v** | | `marketplace.service_specialties` | SpecializĂĄciĂłk (hierarchikus) | ✅ **AktĂ­v** | | `marketplace.service_staging` | Robot ĂĄltal gyƱjtött adatok | ✅ **AktĂ­v** | | `marketplace.discovery_parameters` | Robot keresĂ©si paramĂ©terek | ✅ **AktĂ­v** | | `marketplace.service_requests` | SzervizigĂ©nyek | ✅ **AktĂ­v** | | `marketplace.ratings` | ÁltalĂĄnos Ă©rtĂ©kelĂ©sek | ✅ **AktĂ­v** | | `marketplace.votes` | Szavazatok | ✅ **AktĂ­v** | | `marketplace.costs` | KöltsĂ©gnaplĂł (Trust Engine) | ✅ **AktĂ­v** | ### 3.5. Finance sĂ©ma (PĂ©nzĂŒgyek) | TĂĄbla | LeĂ­rĂĄs | StĂĄtusz | |-------|--------|---------| | `finance.credit_logs` | Hitel naplĂł | ✅ **AktĂ­v** | | `finance.exchange_rates` | Árfolyamok | ✅ **AktĂ­v** | | `finance.issuers` | KibocsĂĄtĂłk | ✅ **AktĂ­v** | | `finance.org_subscriptions` | Szervezeti elƑfizetĂ©sek | ✅ **AktĂ­v** | | `finance.user_subscriptions` | FelhasznĂĄlĂłi elƑfizetĂ©sek | ✅ **AktĂ­v** | | `finance.payment_intents` | FizetĂ©si szĂĄndĂ©kok | ✅ **AktĂ­v** | | `finance.withdrawal_requests` | KifizetĂ©si kĂ©relmek | ✅ **AktĂ­v** | ### 3.6. System sĂ©ma (Rendszeradatok) | TĂĄbla | LeĂ­rĂĄs | StĂĄtusz | |-------|--------|---------| | `system.addresses` | StrukturĂĄlt cĂ­mek | ✅ **AktĂ­v** | | `system.documents` | Dokumentumok | ✅ **AktĂ­v** | | `system.translations` | TöbbnyelvƱ fordĂ­tĂĄsok | ✅ **AktĂ­v** | | `system.system_parameters` | Rendszer paramĂ©terek | ✅ **AktĂ­v** | | `system.internal_notifications` | BelsƑ Ă©rtesĂ­tĂ©sek | ✅ **AktĂ­v** | | `system.pending_actions` | FĂŒggƑben lĂ©vƑ mƱveletek | ✅ **AktĂ­v** | | `system.service_catalog` | SzolgĂĄltatĂĄs katalĂłgus | ✅ **AktĂ­v** | | `system.subscription_tiers` | ElƑfizetĂ©si szintek | ✅ **AktĂ­v** | | `system.service_staging` | SzolgĂĄltatĂĄs staging | ⚠ **DuplikĂĄciĂł?** | | `system.staged_vehicle_data` | JĂĄrmƱ adat staging | ✅ **AktĂ­v** | | `system.geo_postal_codes` | IrĂĄnyĂ­tĂłszĂĄm adatok | ✅ **AktĂ­v** | | `system.geo_streets` | UtcĂĄk | ✅ **AktĂ­v** | | `system.geo_street_types` | Utca tĂ­pusok | ✅ **AktĂ­v** | | `system.competitions_deprecated` | Versenyek (DEPR) | ❌ **Deprecated** | | `system.user_scores_deprecated` | PontszĂĄmok (DEPR) | ❌ **Deprecated** | | `system.service_staging_deprecated` | Staging (DEPR) | ❌ **Deprecated** | | `system.system_data_completion_weights` | AdatteljessĂ©gi sĂșlyok | ✅ **AktĂ­v** | ### 3.7. Audit sĂ©ma (NaplĂłzĂĄs) | TĂĄbla | LeĂ­rĂĄs | StĂĄtusz | |-------|--------|---------| | `audit.audit_logs` | ÁltalĂĄnos audit naplĂł | ✅ **AktĂ­v** | | `audit.financial_ledger` | PĂ©nzĂŒgyi fƑkönyv | ✅ **AktĂ­v** | | `audit.operational_logs` | MƱködĂ©si naplĂł | ✅ **AktĂ­v** | | `audit.process_logs` | Folyamat naplĂł | ✅ **AktĂ­v** | | `audit.security_audit_logs` | BiztonsĂĄgi audit naplĂł | ✅ **AktĂ­v** | ### 3.8. Gamification sĂ©ma (JĂĄtĂ©kosĂ­tĂĄs) | TĂĄbla | LeĂ­rĂĄs | StĂĄtusz | |-------|--------|---------| | `gamification.badges` | JelvĂ©nyek | ✅ **AktĂ­v** | | `gamification.competitions` | Versenyek | ✅ **AktĂ­v** | | `gamification.level_configs` | Szint konfigurĂĄciĂłk | ✅ **AktĂ­v** | | `gamification.point_rules` | Pont szabĂĄlyok | ✅ **AktĂ­v** | | `gamification.points_ledger` | Pont fƑkönyv | ✅ **AktĂ­v** | | `gamification.seasonal_competitions` | SzezonĂĄlis versenyek | ✅ **AktĂ­v** | | `gamification.seasons` | Szezonok | ✅ **AktĂ­v** | | `gamification.user_badges` | FelhasznĂĄlĂłi jelvĂ©nyek | ✅ **AktĂ­v** | | `gamification.user_contributions` | FelhasznĂĄlĂłi hozzĂĄjĂĄrulĂĄsok | ✅ **AktĂ­v** | | `gamification.user_scores` | FelhasznĂĄlĂłi pontszĂĄmok | ✅ **AktĂ­v** | | `gamification.user_stats` | FelhasznĂĄlĂłi statisztikĂĄk | ✅ **AktĂ­v** | --- ## 4. 🔗 KAPCSOLATOK TÉRKÉP (Entity Relationship) ```mermaid erDiagram PERSON ||--o{ USER : "has" PERSON ||--o{ ORGANIZATION_MEMBER : "member of" PERSON ||--o{ ORGANIZATION : "legal owner of" USER ||--o{ ORGANIZATION : "technical owner of" USER ||--o{ SERVICE_REVIEW : "writes" USER ||--o{ SERVICE_REQUEST : "creates" USER ||--o{ VEHICLE_USER_RATING : "rates" ORGANIZATION ||--o{ ORGANIZATION_MEMBER : "has members" ORGANIZATION ||--o{ BRANCH : "has locations" ORGANIZATION ||--o| SERVICE_PROFILE : "optional service" ORGANIZATION ||--o{ ASSET_ASSIGNMENT : "owns vehicles" ORGANIZATION ||--o{ VEHICLE_COST : "pays costs" SERVICE_PROFILE ||--o{ SERVICE_REVIEW : "receives" SERVICE_PROFILE ||--o{ SERVICE_EXPERTISE : "specializes" SERVICE_PROFILE ||--o{ BRANCH : "operates" BRANCH ||--o{ RATING : "rated by" BRANCH ||--o{ SERVICE_REQUEST : "receives requests" VEHICLE_MODEL_DEFINITION ||--o{ ASSET_CATALOG : "has variants" VEHICLE_MODEL_DEFINITION ||--o{ VEHICLE_COST : "has costs" VEHICLE_MODEL_DEFINITION ||--o{ VEHICLE_USER_RATING : "rated by users" ASSET_CATALOG ||--o{ ASSET : "defines" ASSET ||--o{ ASSET_EVENT : "has events" ASSET ||--o{ SERVICE_REQUEST : "referenced in" ADDRESS ||--o{ PERSON : "lives at" ADDRESS ||--o{ ORGANIZATION : "located at" ADDRESS ||--o{ BRANCH : "address" ``` --- ## 5. 💡 JAVASLATOK a "KözössĂ©gi KeresƑ" funkciĂłkhoz ### 5.1. Jelenlegi hiĂĄnyossĂĄgok 1. **Nincs dedikĂĄlt "Partner" entitĂĄs** - A `fleet.organizations`-ban az `is_affiliate_partner` egy egyszerƱ boolean, nincs hozzĂĄ partner-specifikus adat (pl. jutalĂ©k rĂĄta, partner kategĂłria, szerzƑdĂ©s ĂĄllapota). 2. **`ServiceProvider` (rĂ©gi) Ă©s `ServiceProfile` (Ășj) kettƑssĂ©g** - A rĂ©gi `marketplace.service_providers` tĂĄbla hasznĂĄlaton kĂ­vĂŒlinek tƱnik, de mĂ©g lĂ©tezik. 3. **Nincs "aliases" (ĂĄlnĂ©v) tĂĄmogatĂĄs** - Egyik tĂĄblĂĄban sincs JSONB aliases mezƑ. 4. **KategĂłria rendszer hiĂĄnyos** - A `marketplace.expertise_tags` Ă©s `marketplace.service_specialties` pĂĄrhuzamos cĂ­mke rendszert alkot. ### 5.2. Javasolt bƑvĂ­tĂ©s: `Organization` kiegĂ©szĂ­tĂ©se (AJÁNLOTT) Ahelyett, hogy Ășj `Partner` tĂĄblĂĄt hoznĂĄnk lĂ©tre, bƑvĂ­tsĂŒk a meglĂ©vƑ `fleet.organizations` tĂĄblĂĄt az alĂĄbbi JSONB oszlopokkal: ```python # Javasolt Ășj mezƑk az Organization modellben class Organization(Base): # ... meglĂ©vƑ mezƑk ... # ÚJ: Partnerek / KözössĂ©gi keresƑ aliases: Mapped[dict] = mapped_column( JSONB, server_default=text("'[]'::jsonb"), comment="Álnevek / alternatĂ­v nevek (pl. 'AutoShop Kft.', 'AutĂłshop')" ) is_verified: Mapped[bool] = mapped_column( Boolean, server_default=text("false"), comment="Hivatalosan verifikĂĄlt szervezet" ) verification_level: Mapped[str] = mapped_column( String(20), server_default=text("'basic'"), comment="VerifikĂĄciĂłs szint: basic, email, phone, kyc, premium" ) partner_category: Mapped[str] = mapped_column( String(50), server_default=text("'none'"), comment="Partner kategĂłria: none, basic, silver, gold, platinum" ) commission_rate: Mapped[Optional[float]] = mapped_column( Numeric(5, 2), nullable=True, comment="JutalĂ©k rĂĄta (%-ban)" ) service_radius_km: Mapped[Optional[int]] = mapped_column( Integer, nullable=True, comment="SzolgĂĄltatĂĄsi körzet (km)" ) tags: Mapped[dict] = mapped_column( JSONB, server_default=text("'[]'::jsonb"), comment="CĂ­mkĂ©k a közössĂ©gi keresĂ©shez" ) search_keywords: Mapped[dict] = mapped_column( JSONB, server_default=text("'{}'::jsonb"), comment="KeresƑ kulcsszavak több nyelven" ) social_profiles: Mapped[dict] = mapped_column( JSONB, server_default=text("'{}'::jsonb"), comment="KözössĂ©gi mĂ©dia profilok (Facebook, Instagram, Google Business)" ) contact_persons: Mapped[dict] = mapped_column( JSONB, server_default=text("'[]'::jsonb"), comment="KapcsolattartĂł szemĂ©lyek adatai" ) ``` ### 5.3. AlternatĂ­va: Új `partner_profiles` tĂĄbla Ha a `fleet.organizations` tĂșl nagyra nƑne, hozzunk lĂ©tre egy Ășj tĂĄblĂĄt: ```python class PartnerProfile(Base): """BƑvĂ­tett partner profil a KözössĂ©gi KeresƑhöz.""" __tablename__ = "partner_profiles" __table_args__ = {"schema": "marketplace"} id: Mapped[int] = mapped_column(Integer, primary_key=True) organization_id: Mapped[int] = mapped_column( Integer, ForeignKey("fleet.organizations.id"), unique=True, nullable=False ) # --- ALAPADATOK --- aliases: Mapped[dict] = mapped_column(JSONB, server_default=text("'[]'::jsonb")) partner_category: Mapped[str] = mapped_column(String(50), default="none") # --- VERIFIKÁCIÓ --- verification_level: Mapped[str] = mapped_column(String(20), default="basic") verified_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True)) verified_by_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("identity.users.id")) # --- KERESÉS --- search_keywords: Mapped[dict] = mapped_column(JSONB, server_default=text("'{}'::jsonb")) tags: Mapped[dict] = mapped_column(JSONB, server_default=text("'[]'::jsonb")) service_radius_km: Mapped[Optional[int]] = mapped_column(Integer) # --- GAZDASÁGI ADATOK --- commission_rate: Mapped[Optional[float]] = mapped_column(Numeric(5, 2)) contract_start: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True)) contract_end: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True)) # --- KAPCSOLATOK --- social_profiles: Mapped[dict] = mapped_column(JSONB, server_default=text("'{}'::jsonb")) contact_persons: Mapped[dict] = mapped_column(JSONB, server_default=text("'[]'::jsonb")) # --- AUDIT --- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) updated_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True), onupdate=func.now()) ``` ### 5.4. AjĂĄnlott stratĂ©gia 1. **Rövid tĂĄv**: Az `Organization` modell bƑvĂ­tĂ©se JSONB mezƑkkel (`aliases`, `tags`, `search_keywords`, `social_profiles`). Ez azonnal hasznĂĄlhatĂł, nincs szĂŒksĂ©g Ășj tĂĄblĂĄra. 2. **KözĂ©p tĂĄv**: Ha a partnerek szĂĄma elĂ©ri a 10.000+ rekordot, hozzuk lĂ©tre a dedikĂĄlt `partner_profiles` tĂĄblĂĄt az `marketplace` sĂ©mĂĄban. 3. **HosszĂș tĂĄv**: A rĂ©gi `marketplace.service_providers` tĂĄbla archivĂĄlĂĄsa/eltĂĄvolĂ­tĂĄsa, mivel a `ServiceProfile` Ă©s a bƑvĂ­tett `Organization` lefedi a funkciĂłit. ### 5.5. MegjegyzĂ©sek a "CĂ©ges nyilvĂĄntartĂĄs" funkciĂłrĂłl A rendelkezĂ©sre ĂĄllĂł kĂłd Ă©s adatbĂĄzis alapjĂĄn: - ✅ **Van "CĂ©ges nyilvĂĄntartĂĄs"** → `fleet.organizations` tĂĄbla - ✅ **Van tagsĂĄgkezelĂ©s** → `fleet.organization_members` tĂĄbla (User/Person + role) - ✅ **Van telephelykezelĂ©s** → `fleet.branches` tĂĄbla (PostGIS tĂĄmogatĂĄssal) - ✅ **Van szolgĂĄltatĂłi profil** → `marketplace.service_profiles` tĂĄbla - ✅ **Van Ă©rtĂ©kelĂ©si rendszer** → `marketplace.service_reviews` (verifikĂĄlt) + `marketplace.ratings` (ĂĄltalĂĄnos) - ❌ **NINCS dedikĂĄlt partner modell** - Az `is_affiliate_partner` boolean nem elegendƑ - ❌ **NINCS keresƑoptimalizĂĄlt adat** (aliases, tags, keywords) --- ## 6. ⚠ FIGYELMEZTETÉSEK ### 6.1. DuplikĂĄlt tĂĄblĂĄk - `marketplace.service_staging` Ă©s `system.service_staging` - ValĂłszĂ­nƱleg csak egy kellene. - `marketplace.costs` Ă©s `vehicle.costs` - KĂ©t kĂŒlön költsĂ©g tĂĄbla, kĂŒlönbözƑ sĂ©mĂĄkban. - `system.competitions_deprecated` → `gamification.competitions` - `system.user_scores_deprecated` → `gamification.user_scores` ### 6.2. KettƑs modell architektĂșra - `marketplace.service_providers` (rĂ©gi, egyszerƱ) vs `marketplace.service_profiles` (Ășj, komplex) - A rĂ©gi tĂĄbla hasznĂĄlata nem javasolt Ășj fejlesztĂ©sekhez. ### 6.3. Soft delete következetlensĂ©g - `fleet.organizations`: `is_deleted` + `is_active` boolean mezƑk - `marketplace.service_profiles`: stĂĄtusz alapĂș (`ghost`, `active`, `flagged`, `suspended`) - `identity.persons`: `deleted_at` datetime mezƑ - `identity.users`: `is_active` boolean - **HiĂĄnyzik egy egysĂ©ges soft-delete stratĂ©gia az egĂ©sz rendszerben.** --- **JelentĂ©s vĂ©ge.** A javasolt bƑvĂ­tĂ©sek implementĂĄlĂĄsa elƑtt egyeztetĂ©s szĂŒksĂ©ges a VezetƑ TervezƑvel.