feat: implement pivot-currency model, rbac smart tokens & fix circular imports

This commit is contained in:
2026-02-10 10:20:45 +00:00
parent 24d35fe0c1
commit e255fea3a5
117 changed files with 2247 additions and 3542 deletions

View File

@@ -87,4 +87,18 @@ Minden hónap végén az első 3 helyezett extra Kreditet vagy "Voucher"-t kap,
- **Célcsoport**: Kizárólag természetes személyek (`role: user`, `driver`).
- **Kizárások**: Szervezetek (Organizations) és Adminisztrátorok nem gyűjtenek XP-t.
- **Logika**: Minden `PointsLedger` bejegyzés kötelezően hivatkozik egy `user_id`-ra.
- **Mezőnevek**: Adatbázis szinten a pontok az `id`, `user_id`, `points`, `reason` mezőkben tárolódnak.
- **Mezőnevek**: Adatbázis szinten a pontok az `id`, `user_id`, `points`, `reason` mezőkben tárolódnak.
## 2026.02.10 FRISSÍTÉS - GAMIFICATION ÖKOSZISZTÉMA
### 1. Pontrendszer Logika
A rendszer különválasztja a tekintélyt és a jutalmat:
- **XP (Tapasztalat):** Végleges szintlépéshez. Képlet: $BaseXP \times Level^{1.5}$. (Nehezedő görbe).
- **Social Points (Szezonális):** Időszakos versenyekhez (pl. Hónap Vadásza).
- **Kredit:** Fizetőeszköz, amit Social Pontokból lehet váltani (pl. 1000 pont = 100 Kredit).
### 2. Konfiguráció
Minden érték (szorzók, határok) a \`GAMIFICATION_MASTER_CONFIG\` JSON paraméterben állítható Admin felületről, kódmódosítás nélkül.
### 3. Audit
Minden pontmozgás a \`PointsLedger\` táblába kerül rögzítésre a visszakövethetőség érdekében.

View File

@@ -209,4 +209,44 @@ A fejlesztések rendben tartásához javaslom a **`17_DEVELOPER_NOTES_AND_PITFAL
- **SQLAlchemy hiba**: Javítva az `IndexError` a katalógus lekérdezésnél és az import hiba a `PG_UUID` kapcsán.
### Megjegyzés
A rendszer most már képes egyetlen KYC folyamat alatt aktiválni a felhasználót, létrehozni az egyéni flottáját, inicializálni a pénztárcáját (Kredit/Coin) és rögzíteni az első járművét kezdő km-óra állással.
A rendszer most már képes egyetlen KYC folyamat alatt aktiválni a felhasználót, létrehozni az egyéni flottáját, inicializálni a pénztárcáját (Kredit/Coin) és rögzíteni az első járművét kezdő km-óra állással.
## [Unreleased] - 2026-02-10
### 🚀 Added (Új funkciók)
- **RBAC System:**
- \`User\` tábla bővítése: \`scope_level\`, \`scope_id\`, \`custom_permissions\`.
- \`system_parameters\` tábla létrehozása a globális JSON konfigurációkhoz.
- Master RBAC JSON konfiguráció seedelése.
- **Gamification:**
- \`GamificationService\` létrehozása (XP, Level, Credit logika).
- Automata pontszámítás és nehezedő szintek logikája.
- **API Modularitás:**
- \`assets.py\` szétbontása 3 végpontra (Identity, Costs, Telemetry).
### 🛠 Changed (Módosítások)
- **Asset Model:** Az \`Asset\` entitás mostantól lazy loading helyett \`selectinload\` stratégiát használ a teljesítmény érdekében.
- **Error Handling:** Javítottuk az \`asyncpg\` többszörös parancs-futtatási hibáját a setup scriptekben.
- **Configuration:** A rendszerbeállítások mostantól adatbázis-alapúak (JSONB) a hardcoded konstansok helyett.
### 🐛 Fixed (Javítások)
- **Schema Mismatch:** SQLAlchemy modellek és Pydantic sémák szétválasztása (`models/asset.py` vs `schemas/asset.py`).
- **Data Integrity:** \`updated_at\` és \`is_active\` oszlopok pótlása a \`system_parameters\` táblában.
- **API Stability:** \`getattr\` használata a hiányzó opcionális mezőknél (pl. \`net_amount\`), hogy ne szálljon el az API 500-as hibával.
## [1.2.0] - 2026-02-10
### Added
- **Asset Financials 2.0**: Pivot-Currency modell implementálva (helyi deviza + EUR párhuzamos tárolás).
- **Smart Auth Token**: JWT token mostantól tartalmazza a `rank`, `scope_level` és `scope_id` mezőket a gyors jogosultságkezeléshez.
- **CostService**: Automatikus árfolyam-kalkuláció, telemetria-szinkron és XP jóváírás költségrögzítéskor.
- **ExchangeRate**: Új árfolyamtábla és modell az EUR alapú váltásokhoz.
### Fixed
- **Circular Import Resolution**: Megszüntetve a `db.base` és a `models` közötti körkörös függőség az import lánc modularizálásával.
- **Alembic Identity Sync**: Visszaállítva a `User` modell hiányzó `scope_level` és `custom_permissions` mezői, megakadályozva az adatvesztést migrációkor.
- **NotNullViolationError**: Fixálva az `asset_costs` tábla migrációja (amount_local NOT NULL kényszer).
### Changed
- `AssetCost` modell mezőnevek szinkronizálva a pénzügyi standardokhoz (`amount_local`, `amount_eur`).
- `SystemParameter` modell elnevezés igazítva a meglévő adatbázis sémához.

View File

@@ -186,4 +186,19 @@ A járműadatok kezelése hibrid módon történik.
### 5.2 Költségkövetés (TCO)
- Minden Asset-hez rögzíthető költség (`asset_costs`).
- Kötelező adatok: Kategória, Összeg, Dátum.
- Opcionális: Km óra állása (az amortizáció és szervizintervallum számításához).
- Opcionális: Km óra állása (az amortizáció és szervizintervallum számításához).
## 2026.02.10 FRISSÍTÉS - ATOMIZÁLT ADATMODELL ÉS MODULÁRIS API
### 1. Adatbázis Szerkezet (A 4 Pillér)
A járművek kezelése "Single Responsibility" elv alapján 4 modulra bomlott:
1. **Identity (Asset):** Alapadatok (VIN, Rendszám, Tulajdonos).
2. **Catalog (AssetCatalog):** Gyári statikus adatok (Típus, Motor, Akku). Ezt a Robotok töltik.
3. **Telemetry (AssetTelemetry):** Változó állapot (KM óra, VQI minőség index, DBS vezetési stílus).
4. **Financials (AssetCost):** Pénzügyi tranzakciók 9 kategóriába sorolva (Fuel, Service, Tax, stb.).
### 2. Moduláris API Végpontok
A teljesítmény optimalizálása érdekében a \`Full Profile\` helyett 3 dedikált végpontot használunk:
- \`GET /api/v1/assets/{id}\`: Csak identitás és katalógus (Gyors nézet).
- \`GET /api/v1/assets/{id}/costs\`: Csak pénzügyi történet és grafikonok.
- \`GET /api/v1/assets/{id}/telemetry\`: Csak élő adatok (Dashboard).

View File

@@ -86,4 +86,20 @@ A rendszer minden fontos paramétere a `data.system_settings` táblában tárolt
### 6.2 Paraméterezhető modulok
* **Service Hunt:** Távolságok, XP/Kredit szorzók.
* **Fraud Protection:** Strike limitek, kitiltási idők.
* **Billing:** EUR/HUF/USD váltószámok, csomagárak, jármű-slot árak.
* **Billing:** EUR/HUF/USD váltószámok, csomagárak, jármű-slot árak.
## 2026.02.10 FRISSÍTÉS - HIERARCHIKUS RBAC RENDSZER
### 1. Rang-alapú Jogosultság (Rank System)
A rendszer a \`system_parameters\` táblában tárolt \`RBAC_MASTER_CONFIG\` JSON alapján működik.
- **SUPERADMIN (Rank 100):** Globális hatókör, mindent lát.
- **COUNTRY_ADMIN (Rank 80):** Országos felelős.
- **REGION_ADMIN (Rank 60):** Területi vezető (Manage Moderators).
- **MODERATOR (Rank 40):** Adatvalidátor.
- **SALES (Rank 20):** Üzletkötő (Csak saját partnerek).
- **USER (Rank 10):** Végfelhasználó.
### 2. Scope (Hatókör) Védelem
Minden műveletnél ellenőrizzük a \`scope_id\` egyezését:
- Ha a felhasználó \`scope_level = 'region'\`, akkor csak olyan adatot szerkeszthet, ami ugyanahhoz a régióhoz tartozik.
- Kivétel: Impersonation (Megszemélyesítés) - Audit loggal védve.

View File

@@ -1,3 +1,135 @@
🧬 SERVICE FINDER - UNIVERSAL SYSTEM PROMPT (v1.2)
ROLE: Senior Technical Product Manager & Lead System Architect PROJECT: Service Finder - Traffic Ecosystem SuperApp SOURCE OF TRUTH: Grand Master Book (0019) + 2026.02.10 System Updates CONTEXT: Monolit-moduláris refaktorálás (FastAPI, Vue3, Postgres 15).
1. VÍZIÓ ÉS KONTEXTUS (00, 01)
Nem egy egyszerű nyilvántartó rendszert építünk, hanem egy Digital Twin (Digitális Iker) alapú ökoszisztémát.
Core Philosophy: "A jármű örök, a tulajdonos vándor." (Vehicle-Centric Architecture).
Pillére:
Core Fleet: Életút és TCO követés.
Marketplace: Szervizkereső és időpontfoglalás.
Trust Engine: Bizonyíték alapú előélet (OCR, Fotó).
Economy: Kredit és Gamification.
2. TECHNOLÓGIAI STACK ÉS INFRA (02, 03, 04, 08)
Frontend: Vue 3 (Composition API) + Vite + Tailwind CSS + Pinia. Dumb Frontend elv.
Backend: Python 3.12 + FastAPI. Szigorú Pydantic validáció.
Adatbázis: PostgreSQL 15. Két séma: data (üzleti), public (rendszer).
Storage: MinIO (S3 kompatibilis) titkosított dokumentumokhoz.
Hálózat: Internal Net (shared_db_net) zárt. Public Net: csak 80/443 (NPM Proxy).
Config: Minden konfiguráció .env fájlból vagy data.system_parameters táblából jön. Hardkódolás TILOS.
3. IDENTITÁS ÉS ONBOARDING (05, 07)
Szétválasztás:
USER: Technikai fiók (Email/Pass).
PERSON: Valós jogi személy (Okmányok, KYC). Nem törölhető.
Folyamat: Kétlépcsős (2-Step) Onboarding.
Lite: Csak User létrehozása (is_active=False).
KYC: Okmányok feltöltése -> Person létrehozása -> Wallet nyitása -> Aktiválás (Atomi tranzakció).
4. ATOMIZÁLT ASSET MODELL (18) [FRISSÍTVE 2026.02.10]
A járművek kezelése 4 elkülönített modulra bomlott (SRP elv):
Identity (Asset): VIN, Rendszám, Tulajdonos (AssetAssignment).
Catalog (AssetCatalog): Gyári statikus adatok. Robot Scout tölti.
Telemetry (AssetTelemetry): Változó állapot (KM, VQI, DBS).
Financials (AssetCost): Pénzügyi tranzakciók 9 kategóriában.
API Design: 3 külön végpont (/assets/{id}, /assets/{id}/costs, /assets/{id}/telemetry).
5. HIERARCHIKUS JOGOSULTSÁG (RBAC & SCOPE) (09, 19) [FRISSÍTVE 2026.02.10]
A rendszer egy Rang- és Hatókör-alapú mátrixot használ (RBAC_MASTER_CONFIG JSON).
Szintek (Rank):
SUPERADMIN (100): Globális (L0).
COUNTRY_ADMIN (80): Országos (L1).
REGION_ADMIN (60): Területi (L1/B).
MODERATOR (40): Adatvalidátor (L2).
SALES (20): Üzletkötő (L3).
USER (10): Végfelhasználó.
Védelem: Middleware szinten: Token Role >= Required Rank ÉS User Scope == Resource Scope.
Adattábla: User tábla új mezői: scope_level, scope_id, custom_permissions.
6. GAMIFICATION ÉS ECONOMY (10, 11) [FRISSÍTVE 2026.02.10]
XP (Tapasztalat): Végleges szintlépés (BaseXP×Level1.5). Nem csökken.
Social Points: Szezonális, resetelhető pontok.
Kredit: Valuta, Social pontokból váltható.
Service: GamificationService és PointsLedger (auditált naplózás).
Billing: Többvalutás rendszer (HUF/EUR tárolás).
7. ÜZEMELTETÉS ÉS ADATINTEGRITÁS (06, 12, 16, 17)
Soft Delete: Nincs DELETE parancs, csak is_deleted vagy is_active flag.
Audit: Kritikus műveletek (pl. Impersonation) előtt/után állapotmentés az audit_logs táblába.
Enum: Postgres Enum típusok mindig kisbetűsek (pl. role='user').
Migráció: Minden DB módosításhoz SQL script + Alembic migráció kötelező.
🚀 KÖVETKEZŐ LÉPÉSEK (ACTION PLAN - 2026.02.11)
A rendszer magja (Asset, RBAC, Gamification) stabil. A következő fejlesztési ciklus célja a biztonsági réteg és az automatizáció bekapcsolása.
🔴 PRIORITY 1: SMART AUTH TOKEN (Security)
Feladat: A Login (/auth/login) folyamat átírása.
Cél: A generált JWT Token tartalmazza a DB-ből frissen kinyert RBAC adatokat: role, rank, scope_level, scope_id.
Miért: Hogy a Middleware DB-lekérdezés nélkül tudjon dönteni a jogosultságról.
File: backend/app/core/security.py, backend/app/api/v1/endpoints/auth.py.
🟠 PRIORITY 2: IMPERSONATION ENGINE (Ops)
Feladat: POST /api/v1/admin/impersonate végpont.
Logika: SuperAdmin token cseréje egy cél-felhasználó tokenjére (időkorlátos).
Biztonság: Szigorú naplózás az audit_logs táblába (reason kötelező).
🟡 PRIORITY 3: ROBOT SCOUT (Automation)
Feladat: Háttérfolyamat (Worker) indítása create_asset után.
Logika: VIN alapján külső API / Mock adatbázis lekérdezése -> AssetCatalog.factory_data feltöltése.
# 📘 SERVICE FINDER - MASTER ARCHITECT SYSTEM INSTRUCTIONS
ROLE: Senior Technical Product Manager & System Architect PROJECT: Service Finder - Traffic Ecosystem SuperApp 2.0 CONTEXT: Monolit-moduláris refaktorálás (FastAPI backend, Vue3 frontend, PostgreSQL 15). SSoT: Grand Master Book (v1.4).