> ## Documentation Index
> Fetch the complete documentation index at: https://docs.payven.com.tr/llms.txt
> Use this file to discover all available pages before exploring further.

# Akıllı Yönlendirme — Genel Bakış

> Bileşik skor tabanlı dinamik banka yönlendirme motoru.

Akıllı Yönlendirme, her ödeme isteğini **gerçek zamanlı koşullara** göre en uygun konnektöre (bankaya) yönlendiren motordur. Hangi bankaya gideceği:

* BIN aralığı
* Tutar
* Taksit sayısı
* Kart birliği (Visa/MC/Troy)
* Kart tipi (kredi/banka)
* 3DS durumu
* Banka sağlık durumu (latency, hata oranı)
* Komisyon oranları
* Trafik dağıtım hedefi

gibi parametrelerin **bileşik skoruna** göre belirlenir.

## Neden akıllı yönlendirme?

| Sorun                                                                        | Çözüm                 |
| ---------------------------------------------------------------------------- | --------------------- |
| "Bonus kartlarını Garanti'ye yönlendirmek daha düşük komisyonlu"             | BIN bazlı kural       |
| "Akbank tarafında 5xx oranı yükseldi, geçici olarak başka bankaya yönlendir" | Circuit breaker       |
| "Yüksek tutar işlemleri büyük bankaya gitsin"                                | Tutar bazlı kural     |
| "9-12 taksitte sadece anlaşmamızın olduğu banka çalışsın"                    | Taksit bazlı filtre   |
| "Trafiği iki banka arasında %70-%30 dağıt"                                   | Ağırlık bazlı dağıtım |

## Yapı

```mermaid theme={null}
flowchart TB
    Request[Ödeme İsteği]
    Engine[Routing Engine]
    Rule1[Kural: 9+ taksit → Yapı Kredi]
    Rule2[Kural: Bonus kart → Garanti]
    Rule3[Varsayılan: Akbank %70, İş Bankası %30]
    Connector[Seçilen Konnektör]

    Request --> Engine
    Engine --> Rule1
    Engine --> Rule2
    Engine --> Rule3
    Rule1 --> Connector
    Rule2 --> Connector
    Rule3 --> Connector
```

Engine kuralları **sırayla** değerlendirir. Bir kural eşleşirse o konnektör seçilir; eşleşmeyen kural bir sonraki kurala düşer. Hiçbir kural eşleşmezse varsayılan kural devreye girer.

## Yönlendirme adımları

1. **Kuralları sırayla değerlendir** — istek koşullara karşı kontrol edilir.
2. **Skor hesapla** — eşleşen her kural için bir bileşik skor üretilir (banka sağlığı, komisyon, ağırlık).
3. **En yüksek skorlu konnektörü seç**.
4. **Smart Retry hazır olsun** — birinci konnektör başarısız olursa fallback için sıralanmış alternatifler.

## Kural yapısı

Bir kural şu bileşenlerden oluşur:

| Alan           | Açıklama                                        |
| -------------- | ----------------------------------------------- |
| `name`         | Açıklayıcı isim                                 |
| `priority`     | Değerlendirme sırası (düşük sayı = önce)        |
| `conditions[]` | Koşullar (AND/OR)                               |
| `connectors[]` | Eşleşince hedeflenecek konnektörler (ağırlıklı) |
| `enabled`      | Aktif mi?                                       |

Detay: [Yönlendirme Kuralları](/sanal-pos/routing/rules).

## Banka sağlığı

Engine, gerçek zamanlı banka sağlığını izler:

* Son 5 dakikadaki başarı oranı
* Ortalama yanıt süresi
* 5xx hata yoğunluğu

Bir bankanın hata oranı eşiği (örn. %10) aşarsa **circuit breaker** devreye girer ve o banka geçici olarak yönlendirme havuzundan çıkarılır. Detay: [Circuit Breaker](/sanal-pos/routing/circuit-breaker).

## Smart Retry

Yönlendirilen banka geçici hata verirse istek **otomatik olarak** alternatif konnektöre yönlendirilir — kullanıcı yeniden ödeme yapmaz. Detay: [Smart Retry](/sanal-pos/routing/smart-retry).

## Kuralları yönetme

Kurallar konsoldan veya API üzerinden yönetilir. **İki kural seti** vardır:

* **`/routing-rules`** — gelişmiş bileşik skor motoru (BIN + tutar + taksit + sağlık + ağırlık)
* **`/simple-routing-rules`** — basit "şu koşulda şu konnektör" kuralları (yeni başlayanlar için)

```http theme={null}
GET    /api/v1/routing-rules                       # Liste (sayfalı)
GET    /api/v1/routing-rules/{id}                  # Tek kural detayı
POST   /api/v1/routing-rules                       # Yeni kural
PUT    /api/v1/routing-rules/{id}                  # Güncelleme
DELETE /api/v1/routing-rules/{id}                  # Silme
POST   /api/v1/routing-rules/bulk-delete           # Toplu silme
POST   /api/v1/routing-rules/{id}/activate
POST   /api/v1/routing-rules/{id}/deactivate
PATCH  /api/v1/routing-rules/{id}/score            # Skor güncelleme
```

`simple-routing-rules` aynı CRUD pattern'i + `bulk-delete`, `activate`, `deactivate` aksiyonları ile kullanılır.

## Simülasyon

Bir işlemin hangi kurala düşeceğini önceden görmek için iki yol:

* **Konsoldaki Routing Simulator** ekranı (görsel arayüz)
* **Public `/resolve` endpoint'i** — bir koşul setine göre eşleşen kuralları döndürür:

```bash theme={null}
curl -X POST https://vpos.payven.com.tr/api/v1/routing-rules/resolve \
  -H "Authorization: Bearer $PAYVEN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "card_bin":     "454671",
    "amount":       15000,
    "installment":  3,
    "card_brand":   "bonus",
    "card_type":    "credit",
    "currency":     "TRY"
  }'
```

Yanıt: skor sırasına göre eşleşen kuralların listesi. Production trafiğine etki etmez — yalnız okur.

## Settings (varsayılan davranış)

```http theme={null}
GET /api/v1/routing-rules/settings
PUT /api/v1/routing-rules/settings
```

Hiçbir kural eşleşmediğinde devreye giren default davranışı (varsayılan konnektör, fallback davranışı) yapılandırır.
