# Aşamalar ve kapılar

> Satış aşamaları kuruluma göre tanımlanır; aşama kapıları açıksa fırsat ancak koşulları sağladığında ilerler.

Her kurulumun satış hattı **Ayarlar → Aşamalar** sayfasında tanımlanır: açık aşamaların anahtarı, adı ve rengi, kazanıldı / kaybedildi / iptal adları, İptal aşamasının açık olup olmadığı ve **aşama kuralları**.

## Aşama anahtarları

API her zaman **anahtarı** kullanır; ad kullanıcıya gösterilir. Kapanış anahtarları sabittir:

| Anahtar | Anlamı |
|---|---|
| `Win` | Kazanıldı |
| `Lost` | Kaybedildi |
| `Cancel` | İptal (kurulumda kapalı olabilir) |
| `Account` | Müşteri takibi kabı (satış hunisinde sayılmaz) |

Açık aşama anahtarları kuruluma özeldir. Örneğin Makro hattı `Qualify`, `Viable`, `Present Solution`, `Negotiation`, `Expect to Close`; yeni bir kurulumun varsayılanı `Lead`, `In Progress` kullanır. Anahtarları sabit kodlamayın — [`GET /api/v1/me`](/rest-api/auth/me) yanıtından okuyun:

```json
"constants": {
  "stages": ["Qualify", "Viable", "Present Solution", "Negotiation", "Expect to Close", "Win", "Lost", "Cancel"],
  "open_stages": ["Qualify", "Viable", "Present Solution", "Negotiation", "Expect to Close"],
  "stage_labels": { "Qualify": "Qualify", "Win": "Win", "Lost": "Lost", "…": "…" },
  "stage_sla": { "Qualify": 30, "Viable": 60, "Present Solution": 60, "Negotiation": 30, "Expect to Close": 15 },
  "stage_rules": true
}
```

## Aşama kuralları (kapılar)

`stage_rules: true` olan kurulumlarda:

- Açık aşamalar **sırayla** geçilir; bir aşama atlanamaz.
- Bir sonraki aşamaya geçmek için bulunulan aşamanın kapısı sağlanmalıdır.
- `Win` yalnız son iki açık aşamadan (Makro'da `Negotiation`, `Expect to Close`) verilir.
- Kapanmış bir fırsat yeniden açılmaz; [Fırsatı canlandır](/rest-api/deals/revive) yeni bir kayıt açar.

Makro hattının kapıları:

| Aşama | Sonrakine geçmek için |
|---|---|
| `Qualify` | BANT 4/4 (bütçe, yetki, ihtiyaç, zamanlama) |
| `Viable` | Proje başladıktan sonra en az bir yüz yüze (F2F) ziyaret ve fırsata ürün seçilmiş olmalı |
| `Present Solution` | Son denemenin sonucu Başarılı ya da Kısmen Olumlu |
| `Negotiation` | Teklif fiyatı (ya da tahmini değer) ve vade girilmiş |

Kapı sağlanmazsa [aşama ucu](/rest-api/deals/stage) `409 gate` döner:

```json
{
  "ok": false,
  "error": "gate",
  "message": "Viable'a geçmek için: BANT kriterleri 4/4 sağlanmalı (Budget · Authority · Need · Time)",
  "gate_problems": ["BANT kriterleri 4/4 sağlanmalı (Budget · Authority · Need · Time)"]
}
```

Fırsatın tekil ucu her zaman `gate_ok`, `gate_problems` ve `next_stage` alanlarını taşır; aşama değiştirmeden önce bunlara bakarak kullanıcıya eksikleri gösterebilirsiniz.

`stage_rules: false` olan kurulumlarda kapı yoktur: fırsat herhangi bir açık aşamaya, kazanıldı ya da kaybedildiye taşınabilir.

## Süreler (SLA)

Her açık aşamanın gün hedefi (`stage_sla`) ve fırsatın toplam yaşam süresi (`opp_lifetime_days`, varsayılan 180 gün) vardır. Aşmalar fırsatın `sla_left` ve `lifetime_left` alanlarında eksi değer olarak görünür ve sağlık puanını düşürür. Değerler **Ayarlar → Aşama kurulumu** kartından kuruluma göre değişir.

## Kazanma ve kaybetme

- `Win`: firma `AC` (aktif müşteri) olur, kabul edilen teklifin kalemleri firmaya anlaşmalı fiyat olarak yazılır, Sözleşmeler modülü açıksa taslak sözleşme açılır ve uygulamalara `opp_won` olayı gider.
- `Lost` / `Cancel`: `reason` alanı kayıp nedeni olarak saklanır (`constants.loss_reasons`; listede yoksa `Diğer`). `Lost`'ta uygulamalara `opp_lost` olayı gider.
- Her aşama değişikliğinde ayrıca `opp_stage` olayı (eski ve yeni aşamayla) gönderilir.