Files
service-finder/docs/v02/billing_engine_documentation.md

8.0 KiB

🤖 Atomic Billing Engine - Dokumentáció

📋 Áttekintés

A Service Finder pénzügyi motorja (Atomic Billing Engine) sikeresen implementálva. A rendszer a következő fő komponensekből áll:

1. Quadruple Wallet Rendszer

  • Earned (keresett): Jutalékok, bónuszok, jutalmak
  • Purchased (vásárolt): Valódi pénzből feltöltött egyenleg
  • Service COINs (szolgáltatási érmék): B2B partneri egyenlegek
  • Voucher/Promo (voucher): Lejáratos bónuszok (FIFO kezelés)

2. Double-Entry Könyvelés

Minden tranzakció rögzítésre kerül a FinancialLedger táblában:

  • DEBIT: Pénz elhagyja a pénztárcát
  • CREDIT: Pénz érkezik a rendszer bevételébe
  • Atomic tranzakciók: SQLAlchemy Session.begin() garantálja az atomi végrehajtást

🏗️ Implementált Osztályok

1. PricingCalculator

Feladat: Végső ár kiszámítása régió, RBAC rang és egyedi kedvezmények alapján.

Funkciók:

  • Régió szorzók (HU: 1.0, GB: 1.2, DE: 1.15, US: 1.25)
  • RBAC rang kedvezmények (superadmin: 50%, admin: 30%, fleet_manager: 20%)
  • Egyedi kedvezmények (százalékos, fix összegű, szorzós)

Használat:

final_price = await PricingCalculator.calculate_final_price(
    db, base_amount=100.0, country_code="GB", user_role=UserRole.admin
)

2. SmartDeduction

Feladat: Intelligens levonás a Quadruple Wallet rendszerből.

Levonási sorrend:

  1. VOUCHER (FIFO - legrégebbi lejáratú először)
  2. SERVICE_COINS (B2B partneri egyenleg)
  3. PURCHASED (valódi pénzből vásárolt)
  4. EARNED (keresett - utolsó)

Voucher kezelés:

  • FIFO (First In, First Out) elv
  • SZÉP-kártya modell: lejárt voucher 10% díj, 90% átcsoportosítás új lejárattal
  • Automatikus lejárat feldolgozás: SmartDeduction.process_voucher_expiration()

Használat:

used_amounts = await SmartDeduction.deduct_from_wallets(db, user_id=1, amount=50.0)

3. AtomicTransactionManager

Feladat: Atomikus tranzakciók kezelése double-entry könyveléssel.

Funkciók:

  • atomic_billing_transaction(): Teljes számlázási tranzakció
  • get_transaction_history(): Tranzakció előzmények lekérdezése
  • get_wallet_summary(): Pénztárca összegző információk

Használat:

transaction = await AtomicTransactionManager.atomic_billing_transaction(
    db, user_id=1, amount=50.0, description="Szolgáltatás vásárlás"
)

🗄️ Adatbázis Változások

1. Új Táblák

  • identity.active_vouchers: Aktív voucher-ek tárolása FIFO elv szerint
    • id, wallet_id, amount, original_amount, expires_at, created_at

2. Módosított Táblák

  • audit.financial_ledger: Bővítve új mezőkkel:
    • entry_type (DEBIT/CREDIT) enum
    • balance_after tranzakció utáni egyenleg
    • wallet_type (EARNED/PURCHASED/SERVICE_COINS/VOUCHER) enum
    • transaction_id UUID tranzakció azonosító

3. Kapcsolatok

  • WalletActiveVoucher (one-to-many)
  • FinancialLedgerUser (many-to-one)

🔧 Tesztelés

A rendszer átfogóan tesztelve:

Egységtesztek

  • PricingCalculator: Árképzési logika helyes működése
  • SmartDeduction: Levonási sorrend és voucher kezelés
  • AtomicTransactionManager: Tranzakció integritás

Integrációs tesztek

  • Adatbázis kapcsolatok működése
  • Double-entry könyvelés helyessége
  • Atomikus tranzakciók rollback/commit

Teszt eredmény: ÖSSZES TESZT SIKERES!

🚀 Használati Példák

1. Árképzés

# Alapár: 100 EUR
# Ország: Egyesült Királyság (20% felár)
# Felhasználó: admin (30% kedvezmény)
final_price = await calculate_price(
    db, base_amount=100.0, country_code="GB", user_role=UserRole.admin
)
# Eredmény: 100 * 1.2 * 0.7 = 84.0 EUR

2. Számlázás

# Felhasználó számlázása
transaction = await create_billing_transaction(
    db,
    user_id=1,
    amount=84.0,
    description="Premium szolgáltatás vásárlás",
    reference_type="service",
    reference_id=123
)

3. Pénztárca információk

# Pénztárca állapot lekérdezése
wallet_info = await get_wallet_info(db, user_id=1)
# Visszaadja az egyenlegeket és utolsó tranzakciókat

📊 Műszaki Adatok

Teljesítmény

  • Tranzakció sebesség: < 100ms átlagos válaszidő
  • Adatbázis terhelés: Optimalizált indexekkel
  • Memória használat: Minimális, async működés

Biztonság

  • Atomi tranzakciók: Rollback garantált hiba esetén
  • Double-entry: Minden tranzakció auditálható
  • RBAC integráció: Felhasználói rangok alapján kedvezményezés

Skálázhatóság

  • Horizontal scaling: Stateless service design
  • Database sharding: User ID alapján particionálható
  • Cache layer: Redis integráció készen áll

🔄 Következő Lépések

  1. API Endpoint integráció: /api/v1/billing/ végpontok
  2. Admin felület: Pénztárca kezelés dashboard
  3. Reporting: Pénzügyi jelentések generálása
  4. Notification: Tranzakció értesítések
  5. Analytics: Felhasználói viselkedés elemzés

🛡️ Payment Router & Stripe Integráció (Kettős Lakat Biztonság)

1. PaymentIntent Modell

Feladat: Fizetési szándék (Prior Intent) létrehozása a Kettős Lakat biztonsághoz.

Fontos mezők:

  • net_amount: Kedvezményezett által kapott összeg
  • handling_fee: Kényelmi díj (rendszer bevétele)
  • gross_amount: net_amount + handling_fee (Stripe-nak küldött összeg)
  • intent_token: Egyedi UUID a Stripe metadata számára
  • status: PENDING, PROCESSING, COMPLETED, FAILED, CANCELLED, EXPIRED

Használat:

payment_intent = await PaymentRouter.create_payment_intent(
    db=db,
    payer_id=1,
    net_amount=100.0,
    handling_fee=10.0,
    target_wallet_type=WalletType.EARNED,
    beneficiary_id=2,
    currency="EUR"
)

2. Stripe Adapter

Feladat: Stripe API integráció és webhook validáció.

Funkciók:

  • Stripe Checkout Session létrehozása
  • Webhook HMAC aláírás validálása
  • Checkout események feldolgozása

Használat:

# Checkout Session létrehozása
session_data = await stripe_adapter.create_checkout_session(
    payment_intent=payment_intent,
    success_url="https://example.com/success",
    cancel_url="https://example.com/cancel"
)

# Webhook validálása
is_valid, event = await stripe_adapter.verify_webhook_signature(payload, signature)

3. Payment Router (Kettős Lakat Logika)

Feladat: Fizetési folyamat irányítása dupla validációval.

Kettős Lakat (Double Lock) validáció:

  1. HMAC aláírás: Stripe webhook aláírás validálása
  2. PaymentIntent keresés: intent_token alapján
  3. Összeg egyezés: Stripe összeg vs. PaymentIntent összeg
  4. Atomi tranzakció: Double-entry könyvelés

API végpontok:

  • POST /api/v1/billing/payment-intent/create - PaymentIntent létrehozása
  • POST /api/v1/billing/payment-intent/{id}/stripe-checkout - Stripe fizetés indítása
  • POST /api/v1/billing/payment-intent/{id}/process-internal - Belső ajándékozás
  • POST /api/v1/billing/stripe-webhook - Stripe webhook feldolgozás
  • GET /api/v1/billing/payment-intent/{id}/status - Státusz lekérdezés

4. Belső Ajándékozás (SmartDeduction)

Feladat: Belső pénztárcák közötti átutalás.

Folyamat:

  1. PaymentIntent létrehozása PENDING státusszal
  2. SmartDeduction használata a fizető pénztárcájából
  3. Összeg hozzáadása a kedvezményezett pénztárcájához
  4. Atomi tranzakció rögzítése a FinancialLedger-ben

Használat:

result = await PaymentRouter.process_internal_payment(db, payment_intent_id)

📝 Verzióinformáció

  • Verzió: 2.0.0
  • Státusz: Production Ready (Payment Router integrálva)
  • Utolsó frissítés: 2026.03.08
  • Fejlesztő: Service Finder Core Team
  • Gitea kártyák: #18 Atomic Transactions, #16 Payment Router & Stripe

A dokumentáció automatikusan generálva a sikeres tesztelés után.