▶️ Hisse Sattım — Ne Olur?

Pozisyondaki hisseyi sattığımda K/Z hesap + cüzdana gelir + stopaj

  1. UI: Portföy detayda "İşlem Ekle" → Sat seçeneği
  2. Form: Sembol (mevcut pozisyondan), adet, fiyat, tarih, komisyon
  3. POST:
    POST /api/portfolio/trade
    {
      "portfolioId": 23919,
      "sembol": "SVGYO",
      "tip": "sat",
      "adet": 500000,
      "fiyat": 22.50,
      "tarih": "2026-05-25"
    }
  4. Backend validasyon:
    • Adet ≤ mevcut adet (overdraft önle)
    • Gerçekleşen K/Z hesapla: (satış_fiyat - ort_maliyet) × adet
    • Pozisyon güncelle (kalan adet)
    • Eğer adet = 0 → kapalı pozisyon olur
  5. Hesaplama:
    Gerçekleşen K/Z = (Satış Fiyatı - Ort. Maliyet) × Satılan Adet = (22.50 - 21.22) × 500,000 = ₺640,000 kâr
  6. Stopaj: Hisse satışı için %0 (HSYF/borsa farklı). Net K/Z = ₺640,000
  7. DB Transaction (atomic):
    BEGIN;
      INSERT trades (tip='sat', adet=500000, fiyat=22.50);
      UPDATE positions SET adet = adet - 500000 WHERE portfolio_id=23919 AND sembol='SVGYO';
      INSERT wallet_transactions (tip='gelir', tutar=11250000, aciklama='Portföy satış: SVGYO');
      UPDATE wallet_balance SET tutar = tutar + 11250000;
      IF kalan_adet = 0:
        INSERT closed_positions;
    COMMIT;
  8. Domain Events:
    trade:changed
    portfolio:changed
    wallet:transaction
    balance:changed
    (varsa) position:closed
  9. UI Refresh: Pozisyon adet düşer, K/Z güncel, cüzdan +₺11,250,000, "Kapalı Pozisyonlar" sekmesi (varsa)
  10. Bildirim: "SVGYO satışı: 500,000 lot @ ₺22.50 — Gerçekleşen kâr: ₺640,000"

📊 Etkilenen Modüller

ModülEtki
PortföyPozisyon adet düş, gerçekleşen K/Z güncelle
Cüzdan+Gelir kaydı, bakiye artar
Kapalı PozisyonlarEğer tamamen satıldıysa → yeni kapalı pozisyon
Genel VarlıkToplam değer recalc

🔌 Endpoint'ler

POST/api/portfolio/trade
GET/api/portfolio/{id}/realized-pnl
GET/api/portfolio/{id}/closed-positions
GET/api/wallet/transactions

🗄️ DB Tabloları

Tabloİşlem
tradesINSERT (islem_tipi='SAT', adet, fiyat, komisyon)
positionsUPDATE adet (=0 ise DELETE)
closed_positionsINSERT (giriş/çıkış fiyatları, realize_pnl)
wallet_transactionsINSERT (tip='gelir', kategori='hisse_satim')
portfolio_snapshotsINSERT (yeni durum)

📖 Portföy şema →