# Teklife içerik paketi eklemek — brief

*(01.08.2026 · `31 Satisci Teklif` üzerinde değişiklik · tasarım `35`'teki "Teklife Ekle" modalının yerine)*

## 0. Neden bu brief

Tasarım `35 Icerik Paketleri` paket kataloğundan **"Teklife Ekle"** deyip **hangi teklife ekleneceğini soran
bir modal** öneriyor.

⛔ **Bu iş akışına aykırı ve uygulanmayacak** *(Sets, 01.08.2026)*. Satışçı katalogdan başlayıp teklif aramaz.
Gerçek akış tersidir: **elinde bir teklif vardır, onu yazarken kalem ekler.** Katalogdan teklife atlamak,
satışçıyı "hangi teklifti bu?" diye bir listeye bakmaya zorlar — teklif zaten açık olduğu hâlde.

**Doğru yer:** `31`'in kalem ekleme yolu, ve orada **iki seçenek** olmalı — **Eğitim Ekle** / **Paket Ekle**.

⚠ Katalog ekranı (`/satis/paketler`) yine dursun; orası **ürünü incelediğin** yerdir — ne içerdiği, kaç
doküman, hangi baskı, liste fiyatı. Oradan teklife atlanmaz.

---

## 1. İçerik paketi nedir (üç şeyi karıştırmamak için)

⛔ Birbirine benzeyen ama **tablo bile paylaşmayan** üç şey var:

| | Nedir | Kim görür |
|---|---|---|
| **Eğitim dokümanları** | Eğitmenin sahada kullandığı sunum, sınav seti, yoklama şablonu | Eğitmen (`41`) |
| **Sertifika** | Bakanlığın düzenlediği belge | Katılımcı + firma |
| **İçerik paketi** | **3E'nin ayrıca sattığı** lisanslı doküman seti | Satın alan firma (`16`) |

Bu brief yalnız üçüncüsüyle ilgili. İçerik paketi **eğitimden bağımsız bir üründür**: hiç eğitim almamış bir
firma da satın alabilir, ve teklife eğitim gibi bir **kalem** olarak girer.

---

## 2. Veri — ekranın üzerine oturduğu gerçekler

Hepsi bugün veritabanında var; ekran bunları uyduramaz, göstermek zorundadır.

### 2.1 Teklif kalemi ya eğitim taşır ya paket — **tam olarak biri**

`quote_items` satırı ya `training_id` ya `content_package_id` taşır. İkisi birden ya da ikisi de boş
**veritabanı tarafından reddedilir** (`quote_items_sells_exactly_one_thing`). Yani ekranda "kalem" tek bir
şey değil, **iki türü olan** bir şeydir; form da ona göre ikiye ayrılır.

### 2.2 Paketin ürün alanları

| Alan | Anlamı | Ekranda |
|---|---|---|
| `kind` | el kitabı / doküman seti / şablon seti / abonelik / kayıt / soru bankası | Etiket — **davranış değil** |
| `licence_unit` | `company` (firmanın tamamı) veya `seat` (kişi başı) | ⛔ Adet alanının **anlamını değiştirir** |
| `seats` | koltuk lisansında kaç kişi | Yalnız `seat` ise dolu |
| `access_months` | erişim kaç ay sürer | Teklifte gösterilir, **satışçı değiştiremez** |
| `edition` | baskı ("2026.1") | Müşteri hangi baskıyı aldığını bilmeli |
| `list_price` | liste fiyatı | Formun **başlangıç** değeri |
| `is_watermarked` | indirilen kopya damgalanır mı | Vitrinde/karta not |

⛔ **Erişim süresi ürüne aittir, teklife değil.** Yıllık el kitabı ile tek seferlik kontrol seti aynı saatte
satılmaz; satışçının "12 ay yerine 24 ay verelim" diye bir alanı **yok**.

### 2.3 Fiyat, adet, iskonto — eğitim kalemiyle aynı iskelet

- `unit_price` **kopyalanır**, fiyat listesine bağlanmaz: liste yarın değişir, teklif edilen fiyat değişmez.
- Elle yazılan fiyat **elle yazıldığı kaydedilir** (`unit_price_overridden` + gerekçe). Pazarlıkla verilen
  fiyat ile liste fiyatı ayırt edilemezse, ince marjın sebebi hiç bilinemez.
- `quantity` ondalıklı olabilir (eğitimde "1,5 gün" için); pakette pratikte tamsayıdır.
- İskonto **hem satırda hem teklifin tamamında** olabilir; ikisi de `yüzde` veya `tutar`.

### 2.4 Onaylanan teklif kütüphaneyi **açar**

Müşteri teklifi onayladığı anda paket kalemi bir **lisansa** dönüşür (`content_package_grants`): başlangıç
tarihi, `access_months` kadar sonrası bitiş tarihi, ve hangi kalemden geldiği. ⛔ Ayrı bir "lisansı aç" adımı
**yok** — olsaydı unutulacak bir adım olurdu ve müşteri boş kütüphaneye bakardı.

⚠ Bunun tasarıma etkisi: paket kalemi eklerken satışçı **birine bir hak veriyor**. Ekran bunu hissettirmeli —
"onaylanırsa X ay erişim açılır" gibi tek satır.

---

## 3. Ekrandan beklenenler

### 3.1 Kalem ekleme girişi — iki seçenek

Bugün `31`'de tek bir "＋ Kalem" yolu var ve **eğitim varsayıyor**. İki seçenek olmalı. Nasıl sunulacağı sende:
iki ayrı düğme mi, tek düğme + seçim mi. ⚠ Yalnız şu kural: **hangi tür olduğu formu açmadan belli olmalı**;
formu açıp içinde tür değiştirmek, yarısı doldurulmuş alanları çöpe atar.

⚠ Teklifte kalemler **eğitim bazında gruplanıyor**, paketler **ayrı bir grupta ve en sonda** duruyor. Bu bugün
böyle çalışıyor; "＋ bu eğitime kalem" düğmeleri grup başlıklarında. **Paket grubunun kendi ekleme düğmesi**
olmalı mı, yoksa paket yalnız üstteki genel yoldan mı eklensin — bunu çizerken karar ver, ikisi de olur.

### 3.2 "Paket Ekle" formu

| Alan | Not |
|---|---|
| **Paket** | Aranabilir liste. Satırda: ad, tür etiketi, baskı, lisans birimi, liste fiyatı |
| **Adet** | ⛔ Etiketi lisans birimine göre değişir: `company` → "adet", `seat` → "kaç kişi" |
| **Birim fiyat** | Liste fiyatıyla dolu gelir; değiştirilirse **gerekçe** ister |
| **İskonto** | Yüzde / tutar — eğitim kalemiyle aynı kontrol |
| **Bilgi satırı** | "Onaylanırsa 12 ay erişim açılır · 2026.1 baskısı · indirilen kopya filigranlanır" |

⚠ Paket seçilmeden diğer alanların anlamı yok; formun bu hâli (paket seçilmemiş) çizilmeli.

### 3.3 "Eğitim Ekle" formu

Bugünkü form; değişiklik istemiyoruz. Yalnız iki seçenekli girişin altına oturması gerekiyor.
(Alanlar: planlanmış eğitim, fiyat tipi `günlük`/`kişi başı`, adet, birim fiyat + gerekçe, iskonto.)

### 3.4 Katalog ekranındaki düğme

`35`'teki "Teklife Ekle" kalkıyor. Yerine ne konacağı sende — hiç düğme olmaması da geçerli bir cevap.
⚠ Konursa **teklife atlamayan** bir şey olmalı; katalog inceleme yeridir.

---

## 4. Bağlayıcı kurallar

1. ⛔ **Bir kalem ya eğitim ya paket.** Veritabanı ikisini birden reddeder.
2. ⛔ **Erişim süresi üründe.** Teklif formunda süre alanı olmayacak.
3. ⛔ **İskonto tavanı aşılırsa teklif onaya düşer** — satışçı gönderemez. Bu bugün eğitim kalemlerinde
   çalışıyor ve paket kalemi de aynı toplama giriyor; ekranın "onay bekliyor" hâli zaten çizili.
4. ⛔ **Gönderilmiş teklif dondurulur.** Kalem eklemek yeni bir sürüm demektir; müşterinin baktığı sürüm
   değişmez.
5. ⚠ **Elle fiyat gerekçe ister.** Gerekçesiz elle fiyat kaydedilmiyor.
6. ⚠ **Paket satırı teklifin en sonunda**, kendi grubunda.

---

## 5. Terminoloji

| Kullan | Kullanma |
|---|---|
| İçerik paketi | Doküman paketi, eğitim dokümanı |
| Lisans / erişim | Abonelik (bir `kind` değeri olarak hariç) |
| Baskı | Versiyon, sürüm |
| Kişi başı lisans | Koltuk (arayüzde), `seat` yalnız veride |

---

## 6. Bizden bir şey gerekirse

Ekranın bugünkü hâli: paket kalemi **çiziliyor** (teklifte ayrı grup, `35`'in vitrini müşteri tarafında `16`
içinde çalışıyor) ama **oluşturulamıyor** — arka uçta `AddPackageToQuote` yazılı, çağıracak ekran yok.
Bu brief o boşluğu kapatmak için.
