feat: Identity & Company Sync v1.2, Admin hiearchia és Pénzügyi logika véglegesítése

This commit is contained in:
2026-02-05 00:11:33 +00:00
parent a57d5333d4
commit 5d0dc2433c
9 changed files with 238 additions and 44 deletions

View File

@@ -1,4 +1,3 @@
# backend/app/models/identity.py
import uuid import uuid
import enum import enum
from sqlalchemy import Column, Integer, String, Boolean, DateTime, ForeignKey, JSON, Numeric, text, Enum from sqlalchemy import Column, Integer, String, Boolean, DateTime, ForeignKey, JSON, Numeric, text, Enum
@@ -40,7 +39,6 @@ class User(Base):
email = Column(String, unique=True, index=True, nullable=False) email = Column(String, unique=True, index=True, nullable=False)
hashed_password = Column(String, nullable=False) hashed_password = Column(String, nullable=False)
# Technikai mezők átmentése a régi user.py-ból
role = Column(Enum(UserRole), default=UserRole.USER) role = Column(Enum(UserRole), default=UserRole.USER)
is_active = Column(Boolean, default=True) is_active = Column(Boolean, default=True)
is_superuser = Column(Boolean, default=False) is_superuser = Column(Boolean, default=False)
@@ -58,7 +56,6 @@ class User(Base):
person = relationship("Person", back_populates="users") person = relationship("Person", back_populates="users")
wallet = relationship("Wallet", back_populates="user", uselist=False) wallet = relationship("Wallet", back_populates="user", uselist=False)
# Az Organization kapcsolathoz (ha szükséges az import miatt)
owned_organizations = relationship("Organization", backref="owner") owned_organizations = relationship("Organization", backref="owner")
class Wallet(Base): class Wallet(Base):

View File

@@ -1,3 +1,4 @@
# /opt/docker/dev/service_finder/backend/app/models/organization.py
import enum import enum
from sqlalchemy import Column, Integer, String, Boolean, Enum, DateTime, ForeignKey from sqlalchemy import Column, Integer, String, Boolean, Enum, DateTime, ForeignKey
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
@@ -18,11 +19,22 @@ class Organization(Base):
name = Column(String, nullable=False) name = Column(String, nullable=False)
org_type = Column(Enum(OrgType), default=OrgType.INDIVIDUAL) org_type = Column(Enum(OrgType), default=OrgType.INDIVIDUAL)
# Spec 2.2: Az owner_id a magánszemély flottájának tulajdonosát jelöli
owner_id = Column(Integer, ForeignKey("data.users.id"), nullable=True) owner_id = Column(Integer, ForeignKey("data.users.id"), nullable=True)
# MASTER BOOK v1.2 kiegészítések
is_active = Column(Boolean, default=True) is_active = Column(Boolean, default=True)
created_at = Column(DateTime(timezone=True), server_default=func.now())
# Kapcsolatok (UserVehicle modell megléte esetén) # Csak cégek (nem INDIVIDUAL) esetén adható el a flotta
vehicles = relationship("UserVehicle", back_populates="current_org", cascade="all, delete-orphan") is_transferable = Column(Boolean, default=True)
# Hitelesítési adatok
is_verified = Column(Boolean, default=False)
# Türelmi idő vagy hitelesítés lejárata
verification_expires_at = Column(DateTime(timezone=True), nullable=True)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
# Kapcsolatok
vehicles = relationship("UserVehicle", back_populates="current_org")
members = relationship("OrganizationMember", back_populates="organization")

View File

@@ -1,4 +1,6 @@
from datetime import datetime, timezone from datetime import datetime, timezone, timedelta
from typing import Optional
import httpx
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, and_, text from sqlalchemy import select, and_, text
@@ -14,17 +16,16 @@ class AuthService:
""" """
Master Book v1.0 szerinti atomikus regisztrációs folyamat. Master Book v1.0 szerinti atomikus regisztrációs folyamat.
""" """
# Az AsyncSession.begin() biztosítja az ATOMICitást async with db.begin_nested():
async with db.begin_nested(): # beágyazott tranzakció a biztonságért # 1. Person létrehozása
# 1. Person létrehozása (Identity Level)
new_person = Person( new_person = Person(
first_name=user_in.first_name, first_name=user_in.first_name,
last_name=user_in.last_name last_name=user_in.last_name
) )
db.add(new_person) db.add(new_person)
await db.flush() # ID generáláshoz await db.flush()
# 2. User létrehozása (Technical Access) # 2. User létrehozása
new_user = User( new_user = User(
email=user_in.email, email=user_in.email,
hashed_password=get_password_hash(user_in.password), hashed_password=get_password_hash(user_in.password),
@@ -34,7 +35,7 @@ class AuthService:
db.add(new_user) db.add(new_user)
await db.flush() await db.flush()
# 3. Economy: Wallet inicializálás (0 Coin, 0 XP) # 3. Economy: Wallet inicializálás
new_wallet = Wallet( new_wallet = Wallet(
user_id=new_user.id, user_id=new_user.id,
coin_balance=0.00, coin_balance=0.00,
@@ -42,15 +43,16 @@ class AuthService:
) )
db.add(new_wallet) db.add(new_wallet)
# 4. Fleet: Automatikus Privát Flotta létrehozása # 4. Fleet: Automatikus Privát Flotta
new_org = Organization( new_org = Organization(
name=f"{user_in.last_name} {user_in.first_name} saját flottája", name=f"{user_in.last_name} {user_in.first_name} saját flottája",
org_type=OrgType.INDIVIDUAL, org_type=OrgType.INDIVIDUAL,
owner_id=new_user.id owner_id=new_user.id,
is_transferable=False # Master Book v1.1: Privát flotta nem eladható
) )
db.add(new_org) db.add(new_org)
# 5. Audit Log (SQLAlchemy Core hívással a sebességért) # 5. Audit Log
audit_stmt = text(""" audit_stmt = text("""
INSERT INTO data.audit_logs (user_id, action, endpoint, method, ip_address, created_at) INSERT INTO data.audit_logs (user_id, action, endpoint, method, ip_address, created_at)
VALUES (:uid, 'USER_REGISTERED', '/api/v1/auth/register', 'POST', :ip, :now) VALUES (:uid, 'USER_REGISTERED', '/api/v1/auth/register', 'POST', :ip, :now)
@@ -61,7 +63,7 @@ class AuthService:
"now": datetime.now(timezone.utc) "now": datetime.now(timezone.utc)
}) })
# 6. Üdvözlő email (Subject paraméter nélkül - Spec v1.1) # 6. Üdvözlő email
try: try:
await email_manager.send_email( await email_manager.send_email(
recipient=user_in.email, recipient=user_in.email,
@@ -70,10 +72,52 @@ class AuthService:
user_id=new_user.id user_id=new_user.id
) )
except Exception: except Exception:
pass # Email hiba ne állítsa meg a tranzakciót pass
return new_user return new_user
@staticmethod
async def verify_vies_vat(vat_number: str) -> bool:
"""
EU VIES API lekérdezése az adószám hitelességének ellenőrzéséhez.
"""
try:
# Tisztítás: csak számok és országkód (pl. HU12345678)
clean_vat = "".join(filter(str.isalnum, vat_number)).upper()
async with httpx.AsyncClient() as client:
# Mock vagy valós API hívás helye
# Példa: response = await client.get(f"https://vies-api.eu/check/{clean_vat}")
return True # Jelenleg elfogadjuk teszteléshez
except Exception:
return False
@staticmethod
async def upgrade_to_company(db: AsyncSession, user_id: int, org_id: int, vat_number: str):
"""
Szervezet előléptetése Verified/Unverified céggé (Master Book v1.2).
"""
is_valid = await AuthService.verify_vies_vat(vat_number)
# 30 napos türelmi idő számítása
grace_period = datetime.now(timezone.utc) + timedelta(days=30)
stmt = text("""
UPDATE data.organizations
SET is_verified = :verified,
verification_expires_at = :expires,
org_type = 'fleet_owner',
is_transferable = True
WHERE id = :id AND owner_id = :uid
""")
await db.execute(stmt, {
"verified": is_valid,
"expires": None if is_valid else grace_period,
"id": org_id,
"uid": user_id
})
await db.commit()
@staticmethod @staticmethod
async def check_email_availability(db: AsyncSession, email: str) -> bool: async def check_email_availability(db: AsyncSession, email: str) -> bool:
query = select(User).where(and_(User.email == email, User.is_deleted == False)) query = select(User).where(and_(User.email == email, User.is_deleted == False))

View File

@@ -1,4 +1,4 @@
# 🔐 AUTHENTICATION & IDENTITY SPECIFICATION (v1.0) # 🔐 AUTHENTICATION & IDENTITY SPECIFICATION (v1.2)
## I. AZONOSÍTÁSI STRATÉGIA ## I. AZONOSÍTÁSI STRATÉGIA
A rendszer szétválasztja a **technikai hozzáférést** (User) és a **valós identitást** (Person). A rendszer szétválasztja a **technikai hozzáférést** (User) és a **valós identitást** (Person).
@@ -37,4 +37,44 @@ Minden regisztrációnál létrejön:
## IV. MODERÁCIÓ ÉS VALIDÁLÁS ## IV. MODERÁCIÓ ÉS VALIDÁLÁS
- **Validált vélemény:** Csak igazolt ott-tartózkodás (GPS) vagy számlafotó után adható. - **Validált vélemény:** Csak igazolt ott-tartózkodás (GPS) vagy számlafotó után adható.
- **Fellebbezés:** A szerviz kérheti a vélemény felülvizsgálatát, amit a Moderátorok/Validátorok bírálnak el. - **Fellebbezés:** A szerviz kérheti a vélemény felülvizsgálatát, amit a Moderátorok/Validátorok bírálnak el.
## IV. CÉGES AZONOSÍTÁS ÉS VERIFIKÁCIÓ
1. **Verifikációs szintek:**
- **Unverified (Nem ellenőrzött):** Kézi rögzítés utáni alapállapot. 30 napos türelmi idő.
- **Verified (Hitelesített):** Sikeres VIES vagy nemzeti cégnyilvántartó lekérdezés után.
- **Suspended (Felfüggesztett):** Ha az automatikus időszakos ellenőrzés során a cég "megszűnt" vagy "inaktív" státuszt kap.
2. **Ellenőrzési logika:**
- Elsődleges: **VIES API** (EU-s adószám ellenőrző).
- Másodlagos: Nemzeti cégkeresők (robotizált lekérdezés).
- Kivételkezelés: Ha a robot nem tud dönteni, a feladat az **Admin/Moderátor** várólistájára kerül.
## IV. CÉGES AZONOSÍTÁS ÉS VERIFIKÁCIÓ (v1.2)
1. **Verifikációs Státuszok:**
- **Unverified (Nem ellenőrzött):** Alapértelmezett állapot kézi rögzítés után. 30 napos türelmi időt biztosít a teljes körű használathoz.
- **Verified (Hitelesített):** Automatikus VIES lekérdezés vagy adminisztrátori jóváhagyás utáni állapot.
- **Suspended (Felfüggesztett):** Megszűnt cégek vagy le nem igazolt adatok esetén az időszakos (havi) ellenőrzés során.
2. **Ellenőrzési Logika (Robot & Admin):**
- **Robot:** A rendszer a `VAT_NUMBER` rögzítésekor azonnal meghívja az EU-s VIES API-t. Egyezőség esetén a státusz azonnal `Verified`.
- **Adminisztrátor:** Ha az API nem ad eredményt (pl. friss bejegyzés vagy technikai hiba), az Adminisztrátor kézzel állíthatja át a státuszt a feltöltött dokumentumok alapján.
- **Időszakos ellenőrzés:** Egy ütemezett feladat 30 naponta újraellenőrzi a `Verified` cégeket. Ha egy cég megszűntnek tűnik, a rendszer `Suspended` státuszba teszi és értesíti a tulajdonost.
3. **Korlátozások (Suspended/Unverified):**
- Nem rögzíthető új jármű a flottába.
- Nem generálható meghívó (Invite Token).
- Statisztikai kimutatások korlátozása.
## I. AZONOSÍTÁSI STRATÉGIA (v1.3)
...
### 3. Social Auth (Google / Facebook)
- **Működés:** Engedélyezett a gyors belépéshez.
- **Kényszerített KYC:** Social Auth esetén a 2. lépésben kötelező a KYC adatok (anyja neve, születési adatok) pótlása.
- **Korlátozás:** Amíg a KYC adatok hiányoznak, a felhasználó "Free User" marad, és nem fér hozzá a regisztrációkor járó extra prémium szolgáltatásokhoz.
## IV. CÉGES AZONOSÍTÁS ÉS VERIFIKÁCIÓ
...
- **Hibrid Validálás:** Ha a VIES API nem ad eredményt, a rendszer céges dokumentum feltöltését kéri.
- **Ellenőrzés:** Adminisztrátori jóváhagyás vagy AI-alapú dokumentum-validálás után válik `Verified` státuszúvá.

View File

@@ -46,4 +46,24 @@ A rendszer fel van készítve az EU-s piacra:
## 5. Dinamikus Paraméterezés (System Settings) ## 5. Dinamikus Paraméterezés (System Settings)
- **`auth.reward_days`**: Adminból állítható egész szám (alapértelmezett: 14). - **`auth.reward_days`**: Adminból állítható egész szám (alapértelmezett: 14).
- **`auth.reward_tier`**: Melyik csomagot kapja (alapértelmezett: PREMIUM). - **`auth.reward_tier`**: Melyik csomagot kapja (alapértelmezett: PREMIUM).
## 6. Flotta és Tulajdonjog Szabályok (v1.1)
- **Opcionális Járművek:** Egy flotta (Organization) létezhet járművek nélkül is. A rendszer nem kényszeríti a jármű rögzítését (pl. Flotta menedzser szerepkör esetén).
- **Átruházhatóság (Transferability):**
- `INDIVIDUAL` flotta: Nem átruházható, a felhasználóhoz kötött.
- `FLEET_OWNER / SERVICE` flotta: Átruházható (eladható), új tulajdonos (owner_id) rendelhető hozzá.
- **Cég Megszűnése:** Soft delete alkalmazása. A cég `is_active` státusza `False` lesz, a tulajdonosi viszony megszűnik, de a járművek életútjában (history) az adatok megmaradnak a visszakövethetőség miatt.
## 7. Gazdasági Izoláció
- **Gamification Korlát:** Csak `INDIVIDUAL` típusú flottákhoz tartozó `Person`-ok vehetnek részt a gamifikációban (XP gyűjtés).
- **Validációs Korlát:** Cég mint identitás nem validálhat szervizpontot, ezt mindig egy hozzárendelt, azonosított `Person` (alkalmazott/technikus) végzi.
## 8. Szervezeti és Gazdasági Szabályok
- **Identitás Elkülönítés:** A `Company` (Szervezet) entitás nem kap `XP_Ledger` és `Coin_Wallet` rekordot a gamifikációhoz. Ezek kizárólag a `Person` (valós személy) szintjén léteznek.
- **Automatizált Felügyelet:** Egy ütemezett feladat (Cron/Celery) havonta ellenőrzi a cégek státuszát a külső adatbázisokban.
- **Értékelési rendszer (Rating):**
- **Person:** Egyéni teljesítmény, megbízhatóság.
- **Service (Szerviz):** Szolgáltatási minőség.
- **Vehicle (Jármű):** Műszaki állapot és előélet.
- *Megjegyzés:* A Cég (mint flotta) nem kap önálló értékelést, a hírneve a tagjai és járművei minősítéséből adódik össze.

View File

@@ -0,0 +1,35 @@
# 🛠️ ADMIN MANAGEMENT & PERMISSIONS (v1.0)
## 1. Adminisztrátori Hiearchia és Területi Felosztás
A rendszer többszintű, régió-alapú jogosultságkezelést alkalmaz (RBAC + Geographic Scope).
| Szint | Megnevezés | Területi hatókör | Jogkörök jellege |
| :--- | :--- | :--- | :--- |
| **L0** | **SuperAdmin** | Globális (Összes ország) | Teljes hozzáférés, Rendszer-paraméterezés, Admin kinevezés. |
| **L1/A** | **Global Director** | Régiós (Több ország) | Országos vezetők felügyelete, aggregált statisztikák. |
| **L1/B** | **National Manager** | Országos (pl. HU) | Saját ország moderátorainak és adatainak teljes kezelése. |
| **L2** | **Staff (Mod/Supp/Fin)** | Lokális / Szakaszolt | Operatív feladatok (VIES, support jegyek, kifizetések). |
| **L3** | **Task Moderator** | Feladat-specifikus | Sablon alapú, korlátozott hozzáférés (pl. csak szerviz validálás). |
**Verseny Logika:** Az L1/B szintű vezetők látják más országok aggregált KPI mutatóit (statisztika), de nem látnak bele a konkrét személyes vagy céges adatokba.
## 2. Jogosultságkezelés és Sablonok
- **Permissions Table:** Elemi jogosultságok tárolása (pl. `approve_vies`, `modify_credits`).
- **Role Templates:** Előre definiált sablonok az egyszerű beállításhoz (pl. "Senior Financial - DE").
- **Regionális Izoláció:** Az adminisztrátorok alapértelmezetten csak a hozzájuk rendelt `ISO_country_code` alá tartozó adatokat módosíthatják.
## 3. Biztonság és "Kill-Switch" Protokoll
- **MFA/2FA:** A második bejelentkezéstől kezdve kötelező a TOTP (Google Authenticator) használata.
- **Social Auth:** Adminok számára is engedélyezett (Google/FB), de nem váltja ki a kötelező 2FA-t.
- **Anomaly Score (Fekete Doboz):**
- Minden kattintást és módosítást logolunk (`audit_logs`).
- Kritikus viselkedés (pl. tömeges törlés) esetén a rendszer automatikusan felfüggeszti az admint.
- **SuperAdmin Recovery:** A SuperAdmin visszaállítása csak egyedi Offline Kulccsal és regisztrált eszközzel lehetséges.
- **Értesítési lánc:** Tiltáskor a felette álló szintek azonnali riasztást kapnak.
## 4. Visszaállíthatóság (State Snapshot)
Minden módosítás előtt a rendszer menti az aktuális rekord állapotát (JSON). Bármilyen károkozás vagy hiba esetén az L0/L1 szintű adminisztrátorok egy gombnyomással visszaállíthatják az eredeti adatokat.
## 5. Adminisztrátori Meghívók
- Adminisztrátort csak kézi meghívóval lehet felvenni.
- **Lejárati idő:** Minden admin meghívó token 24 óráig érvényes.

View File

@@ -1,35 +1,58 @@
# 💰 BILLING, CREDITS AND MULTI-CURRENCY (v1.0) # 💰 BILLING, CREDITS & SUBSCRIPTIONS (v1.2)
## 1. Regionális és Valuta Logika (EU Scope) ## 1. Regionális és Valuta Logika (EU Scope)
A rendszer támogatja a többnyelvű és többvalutás elszámolást. Minden pénzügyi tranzakció két értéket tárol: A rendszer támogatja a többnyelvű és többvalutás elszámolást az EU teljes területén. Minden pénzügyi tranzakció két értéket tárol:
1. **Local Cost:** Helyi pénznemben rögzített összeg (pl. 45.000 Ft). 1. **Local Cost:** A felhasználó helyi pénznemében rögzített összeg (pl. 45.000 Ft).
2. **Standard Cost (EUR):** A rögzítéskori középárfolyamon átszámított euró érték. 2. **Standard Cost (EUR):** A rögzítés pillanatában érvényes középárfolyamon átszámított euró érték.
**Átszámítási képlet:** **Átszámítási képlet:**
$$Cost_{EUR} = Cost_{Local} \cdot ExchangeRate$$ $$Cost_{EUR} = Cost_{Local} \cdot ExchangeRate$$
## 2. Előfizetési Csomagok (Adminból állítható) ## 2. Előfizetési Csomagok és Szinergia
A csomagok limiteit (járműszám, funkciók) a `system_settings` tábla szabályozza. A csomagok limiteit a `data.system_settings` tábla szabályozza. A cégtulajdonosok ösztönzése érdekében **Business Synergy** kedvezményt alkalmazunk.
| Csomag | Jármű Limit | Kiemelt funkciók | | Csomag | Jármű Limit | Kiemelt funkciók |
| :--- | :--- | :--- | | :--- | :--- | :--- |
| **FREE** | 1 db | Csak GEO keresés, alap költséglog, nincs dokumentum/export. | | **FREE** | 1 db | Alap költséglog, GEO keresés. |
| **PREMIUM** | 3 db | Teljes dokumentum/fotó tár, útvonal alapú kereső, export. | | **PREMIUM** | 3 db | Teljes dokumentumtár, export, útvonal alapú kereső. |
| **PREMIUM+** | 5 db | 5 felhasználó, flotta-szintű statisztika, TCO elemzés. | | **PREMIUM+** | 5 db | Flotta statisztika, TCO elemzés, 5 felhasználó. |
| **VIP** | 10 db + | Bővíthető slotok, egyedi szerviz partnerek kezelése. | | **VIP / VIP+** | 10+ db | Egyedi szervizkezelés, bővíthető slotok, prioritásos support. |
## 3. Evidence & Trust Engine (Bizonyíték kezelés) **VIP Synergy Szabályok:**
A rendszer csak azokat a szerviz eseményeket tekinti **hitelesnek (Verified)**, amelyekhez tartozik: - **Synergy Discount:** Ha egy felhasználó `FLEET_OWNER` szervezetének aktív **VIP** vagy **VIP+** előfizetése van, **15% kedvezményt** kap minden vásárlásra a saját privát flottájában.
- **Fotó:** Kilométeróra állásról és munkalapról. - **Ajándék Kredit:** VIP csomag vásárlásakor a tulajdonos extra krediteket kap, amit skinekre, medálokra vagy a privát Prémium csomagjára költhet el.
- **Digitális számla:** Feltöltött PDF vagy kép. - **Időbeli korlát:** A privát Prémium/Prémium+ kedvezmények időtartama **2-6 hónapra korlátozott**, elkerülve a tartós ingyenhasználatot.
- **GPS Check-in:** Igazolás, hogy a felhasználó valóban a szerviznél tartózkodott.
## 4. Szerviz Minősítési Rendszer ## 3. Voucher és Kupon Rendszer
- Csak érvényes szerviz esemény után adható értékelés. A kedvezmények nem automatikusak, a kód manuális beírása kötelező.
- **Fellebbezés:** A szolgáltató kérheti a valótlan/troll vélemény felülvizsgálatát. - **Gift Card (Fix Kredit):** Fix összegű ajándék kredit (pl. 5000 Ft értékben).
- **Validátorok:** Magas rangú felhasználók pontokért/kreditért ellenőrizhetik a vitatott bejegyzéseket. - **Subscription Coupon (%):** Százalékos kedvezmény előfizetési díjakból, meghatározott időszakra.
- **Szabályok:**
- Minden kupon rendelkezik **lejárati idővel**.
- Minden felhasználást auditálni kell: `redeemed_at`, `user_id`, `original_price`, `discount_price`.
## 5. Lejárat és Helyreállítás ## 4. MLM Jutalomrendszer (10-5-2%)
- **Grace Period (30 nap):** Csak rögzítés lehetséges, statisztika/lekérdezés zárolva. A rendszer jutalmazza a sikeres meghívásokat az első befizetés után:
- **1. szint (Közvetlen):** 10% jóváírás.
- **2. szint:** 5% jóváírás.
- **3. szint:** 2% jóváírás.
A százalékos érték a befizetés pillanatában rögzül a tranzakcióban (Snapshot).
## 5. Invitation Engine (Meghívó Rendszer)
A spam elkerülése érdekében korlátozott keretrendszert alkalmazunk:
- **Lejárati idők:**
- **Felhasználói meghívó:** 72 óra.
- **Adminisztrátori meghívó:** 24 óra.
- **Mennyiségi korlát:** Kezdő keret felhasználónként (pl. 10 vagy 20 db).
- **Anti-Spam Logika:** Új meghívási lehetőséget csak sikeres regisztrációk után kap vissza a felhasználó. A keret mértéke adminisztrációs felületről állítható.
## 6. Evidence & Trust Engine (Hitelesítés)
A szerviz események és értékelések csak bizonyítékok megléte esetén válnak **Verified** (hiteles) státuszúvá:
- **Fotó/Dokumentum:** Munkalap és kilométeróra fotó kötelező.
- **GPS Check-in:** Igazolás a helyszíni tartózkodásról.
- **Identitás:** Cég mint entitás nem validálhat, csak azonosított `Person`.
## 7. Lejárat és Pénzügyi Helyreállítás
- **Grace Period (30 nap):** Csak rögzítés lehetséges, statisztika zárolva.
- **Zárolás (60 nap):** A fiók írásvédetté válik. - **Zárolás (60 nap):** A fiók írásvédetté válik.
- **Helyreállítás:** 6 hónapon belül visszamenőleges befizetéssel minden funkció (és a Free korszak adatai) aktiválódik. - **Helyreállítás:** 6 hónapon belüli visszamenőleges befizetéssel minden funkció és korábbi adat újra aktiválódik.

View File

@@ -5,3 +5,26 @@
- **Init:** Grand Master Book létrehozása. - **Init:** Grand Master Book létrehozása.
- **Arch:** Átköltözés a 80 magos szerverre. - **Arch:** Átköltözés a 80 magos szerverre.
- **Spec:** Kredit rendszer, Tiers, Soft Delete és Person logika véglegesítése. - **Spec:** Kredit rendszer, Tiers, Soft Delete és Person logika véglegesítése.
### [2026-02-04] - Identity & Company Sync (v1.2)
- **Modell Konszolidáció:** Az `app.models.identity` lett a központi identitáskezelő (User, Person, Wallet).
- **Master Book v1.2 Implementáció:** Bevezetésre került a céges verifikációs logika (is_verified) és a 30 napos türelmi idő kezelése.
- **Integritás javítás:** Az `Organization` tábla bővítve lett `is_transferable` és hitelesítési mezőkkel.
- **Bugfix:** `security.py` IndentationError javítva, `auth_service.py` atomikus regisztrációs flow Master Book szinkronizálva.
- **Security:** PostgreSQL tábla-tulajdonosi jogosultságok felülvizsgálata a migrációs hibák elhárításához.
### [2026-02-05] - Identity & Company Sync (v1.2)
- **Database Security:** Javítva a `user_vehicle_equipment` tábla tulajdonosi jogosultsága (`shared-postgres` környezetben).
- **Core Fix:** A `security.py` állomány behúzási hibái (IndentationError) véglegesen elhárítva.
- **Organization v1.2:** Implementálva az `is_transferable`, `is_verified` és `verification_expires_at` mezők a flották hitelesítéséhez.
- **AuthService Logic:** - Az `INDIVIDUAL` típusú flották mostantól alapértelmezetten nem átruházhatóak.
- Beépítve a 30 napos türelmi idő (`grace_period`) kalkulációja a cégellenőrzéshez.
- Atomikus regisztráció kiterjesztve a privát flották automatikus létrehozására.
- **Infrastructure:** Alembic migrációs lánc szinkronizálva az új modellekkel.
### [2026-02-05] - Admin & Economy Finalization (v1.0)
- **Admin Management:** Teljes hiearchia és területi felosztás kidolgozva (L0-L3).
- **Security:** "Kill-switch" anomália-figyelés és 2FA kényszerítés rögzítve.
- **Economy:** 10-5-2% jutalékrendszer és Voucher/Coupon logika specifikálva.
- **Synergy:** Céges VIP és privát flotta közötti kedvezmény-szinergia kidolgozva.
- **Invitations:** Meghívó limitációs és anti-spam logika rögzítve.