Files
service-finder/docs/company_garage_onboarding_plan.md
2026-06-10 08:06:07 +00:00

5.7 KiB

🏗️ Logic Spec: Cég Garázsa (Company Onboarding & Garage UI)

1. Cél

Lehetővé tenni a felhasználó számára, hogy:

  1. Létrehozzon egy céget/szervezetet (Company Onboarding) 3 egyszerű lépésben
  2. A jobb felső sarokban lévő "Cég Garázsa" gombbal gyorsan elérje a cég flottáját
  3. Válthasson a személyes garázsa és a cég garázsa között

2. Meglévő Backend API

Már létező végpontok:

  • POST /api/v1/organizations/onboard - Szervezet létrehozása (CorpOnboardIn séma)
  • GET /api/v1/organizations/my - Felhasználó szervezeteinek listája

CorpOnboardIn séma mezői:

full_name, name, display_name, tax_number, reg_number, country_code, language, default_currency, address_zip, address_city, address_street_name, address_street_type, address_house_number, address_stairwell, address_floor, address_door, address_hrsz, contacts

Modell: Organization (fleet.organizations) + OrganizationMember + Branch

3. 3 Kártyára Bontva

#217 - Backend API bővítés

Végpontok:

  1. GET /api/v1/organizations/{org_id} - Részletes adatok
  2. PUT /api/v1/organizations/{org_id} - Frissítés
  3. PATCH /api/v1/users/me/active-organization - Aktív szervezet váltás
  4. DELETE /api/v1/organizations/{org_id} - Soft-delete

#218 - Frontend 3-lépéses Onboarding UI

Komponensek:

  1. CompanyOnboardingView.vue - 3-lépéses wizard (/company/onboard)
  2. CompanyGarageView.vue - Cég garázs (/company/garage)
  3. i18n kulcsok bővítése
  4. Router bővítés

#219 - Cég Garázsa gomb + szervezetváltás

Header gomb 3 állapota:

  1. Nincs cég -> "Cég létrehozása" -> /company/onboard
  2. Van cég, személyes mód -> "Cég Garázsa" -> PATCH + /company/garage
  3. Cég mód -> "Személyes mód" -> PATCH null + /dashboard

4. Header Layout

LOGO    [≡ Funkciók]        [🏢 Cég Garázsa] [🌐 EN] 👤

5. Végrehajtási Sorrend

  1. #217 Backend API (előfeltétel)
  2. #218 Frontend Onboarding UI
  3. #219 Cég Garázsa gomb integráció

6. Vizsgálati Eredmények (2026-06-07) - users.py audit

6.1 PATCH /users/me/active-organization - MÁR IMPLEMENTÁLVA!

A users.py (371-434. sor) tartalmazza az aktív szervezet váltás végpontot:

  • Validálja, hogy a user tagja-e a szervezetnek (OrganizationMember lekérdezés)
  • Frissíti a scope_id-t az adatbázisban
  • Új JWT tokent generál a frissített scope_id-val
  • Visszaadja UserWithTokenResponse-t (user + új token)

6.2 PersonUpdate schema - NEM alkalmas cégadatokra

A PersonUpdate séma (69-91. sor) CSAK személyes adatokat tartalmaz:

  • first_name, last_name, phone
  • mothers_last_name, mothers_first_name
  • birth_place, birth_date
  • identity_docs (személyi, útlevél, jogsi)
  • address_* mezők
  • NINCSENEK benne cég/business mezők

6.3 Aktív szervezet váltás frontend integráció

A frontend auth store már tartalmazza:

  • active_organization_id: number | null a UserProfile interfészben
  • scope_level, scope_id mezők

6.4 Következtetés

A #217 kártya eredeti tervéből a PATCH /users/me/active-organization végpont MÁR KÉSZ. Amit még kell a #217-ben:

  • GET /api/v1/organizations/{org_id} - cég részletes adatainak lekérése
  • PUT /api/v1/organizations/{org_id} - cég adatainak frissítése
  • DELETE /api/v1/organizations/{org_id} - soft-delete

6.5 Típus inkonzisztencia

Az ActiveOrganizationUpdate séma organization_id mezője Optional[str] típusú, de az adatbázisban integer-ként használódik. Javítandó: Optional[int].

7. Végrehajtási Sorrend (Frissítve)

  1. #217 Backend API (már csak GET/PUT/DELETE kell - PATCH kész)
  2. #218 Frontend Onboarding UI
  3. #219 Cég Garázsa gomb integráció

8. KYC Privát Cég Vizsgálat (2026-06-07)

8.1 Hogyan jön létre a privát cég?

A KYC lezárásakor az AuthService.complete_kyc metódus automatikusan létrehoz egy privát szervezetet:

new_org = Organization(
    full_name=org_full_name,        # "{last_name} Flotta"
    name=f"{p.last_name} Széfe",    # pl. "Nagy Széfe"
    org_type=OrgType.individual,    # <-- PRIVÁT CÉG FLAG!
    owner_id=user.id,
    status="verified",              # Azonnal verified
    ...
)

8.2 Van flag a privát cég azonosítására?

IGEN. Az OrgType enum individual értéke szolgál privátcég-jelzőként.

org_type érték Jelentés Hol jön létre?
individual Privát személyes "széf" KYC lezárás (auth_service.py:255)
business Valódi cég /organizations/onboard végpont (organizations.py:70)
service Szerviz Későbbi regisztráció
service_provider Szolgáltató partner Későbbi regisztráció
fleet_owner Flottatulajdonos Későbbi regisztráció
club Klub Későbbi regisztráció

8.3 Különbségek: Privát vs Valódi cég

Tulajdonság Privát (KYC) Valódi (/onboard)
org_type individual business
status verified pending_verification
tax_number NULL Kötelező
Név "{last_name} Flotta" Valós cégnév
Branch "Home Base" "Központi Telephely"

8.4 Hatás a #219-es kártyára

A "Cég Garázsa" gomb logikája:

  1. GET /organizations/my → visszaadja a user összes szervezetét
  2. org_type == "individual" → privát garázs gomb
  3. org_type == "business" → cég garázs gomb
  4. PATCH /users/me/active-organization → váltás a kettő között