frontend 2026-06-10 bontva a 2 felület

This commit is contained in:
Roo
2026-06-10 08:06:07 +00:00
parent b84b1bab41
commit 90e3173fbc
59 changed files with 8616 additions and 1412 deletions

View File

@@ -0,0 +1,138 @@
# 🏗️ 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`](backend/app/api/v1/endpoints/users.py:371) (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`](backend/app/schemas/user.py:69) 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`](frontend/src/stores/auth.ts:53) 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`](backend/app/schemas/user.py:107) 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`](backend/app/services/auth_service.py:249) metódus automatikusan létrehoz egy privát szervezetet:
```python
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`](backend/app/models/marketplace/organization.py:19) 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