# Kapsama matrisi — `32 Satisci Musteri Karti`

*02.08.2026 · Tasarım: `design/32 Satisci Musteri Karti.dc.html` · Uygulama: `Office/Customers/Show.vue` + `CustomerDetail` + `CustomerCard`*

İşaret **kodun** durumunu söyler: ✓ var · ⚠ kısmen · ❌ yok.

| # | Tasarım öğesi | ✓/⚠/❌ | Kanıt |
|---|---|---|---|
| 1 | Firma başlığı, segment, özel fiyat tablosu | ✓ | `customer_segments` (backoffice tanımlı: ad + ton + not) + `Show.vue` — **renk kodu nokta, ad yazıyla**; rozet değil (Sets, 02.08.2026) |
| 2 | Künye satırı (personel · lokasyon · sorumlu satışçı) | ✓ | `CustomerCard::sizeOf()` + `Show.vue` künye satırı |
| 3 | "＋ Görüşme Notu · ＋ Görev · Teklif Hazırla" | ✓ | `AddCustomerNote` + `OpenCustomerTask` (aynı not/görev makinesi, bir özne yukarıda) + teklif ekranına firma dolu geçiş |
| 4 | **İLİŞKİ ÖZETİ**: toplam ciro | ✓ | `CustomerCard::summaryOf()` — onaylı tekliflerin toplamı |
| 5 | İlişki özeti: eğitim geçmişi (N eğitim · N katılım) | ✓ | `trainingCounts()` — firmanın kendi bağlamında sayılır |
| 6 | İlişki özeti: teklif dönüşümü (%71 · 10/14) | ✓ | Sonuçlanan (onay + ret) üzerinden; hiç sonuçlanmamışsa **null**, %0 değil |
| 7 | İlişki özeti: son görüşme | ✓ | Aktivite akışının ilk satırı |
| 8 | **UYUM SİNYALİ** — "satış fırsatı" rozeti | ✓ | `signal()` — `StaffCompliance`'ın aynı okuyucusu, firmaya daraltılmış |
| 9 | Sinyal satırları (dolan · işe giriş kuralı · 90 günde dolacak) | ✓ | `signal_lapsed` · `signal_awaiting` · `signal_due` |
| 10 | Sinyalden teklife geçiş | ✓ | İki çıkış: sorgulama (kimler) ve **"Müşteri istediyse teklif hazırla"** — teklif ekranını firma ve ihtiyaç başlığıyla doldurur, teklifi yazan yine satışçıdır (Sets senaryosu: müşteri telefonla istedi) |
| 11 | ⛔ Sinyalde isim yok | ✓ | Kart yalnız sayı taşır; kimler olduğu sorgulama ekranının cevabı ve orada erişim logu yazılır (AD-21) |
| 12 | **KİŞİLER** + rol + e-posta + telefon, "＋ Kişi" | ✓ | `CustomerPeople` + mevcut kişi drawer'ı |
| 13 | **Aktivite** — not · e-posta · teklif tek akışta | ✓ | `activity()` — `RecordNote` + `CorrespondenceMessage` + onaylanan teklifler |
| 14 | "46 kayıttan son 4'ü · Tüm aktivite →" | ✓ | Kartta sayı + son dört; `/musteriler/{id}/aktivite` tüm akışı taşır |
| 15 | Aktivite süzgeci (Tümü / Not / E-posta / Teklif) | ✓ | Aktivite sayfasında; sekmeler **süzmeden önce** sayar |
| 16 | **Açık teklifler** + tutar + kalan geçerlilik | ✓ | `openQuotes()` — gün sayısı işaretli, süresi dolan ayrı yazılır |
| 17 | **Geçmiş eğitimler** + katılım sayısı | ✓ | `trainings()` — **firmanın kendi katılımcı sayısı**, eğitimin toplamı değil |
| 18 | "9 eğitimin tamamı →" | ✓ | *(21.10.2026, 32-f)* `Show.vue` «Geçmiş eğitimler» altında `customers.card.all_trainings`, sayı `card.trainings_total`; sayfa `Office/Customers/Trainings.vue` (`/musteriler/{id}/egitimler`), firmanın kendi katılımcı sayısıyla — Sets kararı: firmaya özel sayfa |
| 19 | **Bu müşteriye bağlı görevler** | ✓ | `tasks()` — açık görevler, terminine göre |
| 20 | 375px | ✓ | Izgara `lg:` kırılımında tek kolona düşer |

## Kapanmamış satırlar

| Kod | Satır | Durum |
|---|---|---|
| ~~**32-f**~~ | #18 "tüm eğitimler" bağlantısı | **Kapandı 21.10.2026** — firmaya özel sayfa (Sets kararı). |

---

## EGT-221 güncellemesi — dört eksik öğe ve ızgara (20.10.2026)

*20.10.2026 · `design/32 Satisci Musteri Karti.dc.html` bu turda baştan sona açılıp okundu; satır numaraları ondan. Sayfalar: müşteri kartı `resources/js/pages/Office/Customers/Show.vue` (M), potansiyel müşteri `resources/js/pages/Office/PotentialCustomers/Show.vue` (P).*

Kapsam: ticket'ın dört öğesi + Sets kararıyla müşteri kartının ızgarası (20.10.2026). Kararlar: `proje-haritasi.md` «EGT-221 kararı» ve «EGT-221 ek kararları».

| Tasarım öğesi (satır) | Durum | Kanıt |
|---|---|---|
| Üst bant ızgarası `1fr 1fr 1.2fr` (49) | ✓ | M `Show.vue:471`, P `Show.vue:205` — `lg:grid-cols-card-band` |
| İlişki özeti: etiket solda sabit kolon, değer yanında (52-57) | ✓ | M `:476`, P `:212` — `DescriptionList` (120px etiket kolonu) |
| Uyum sinyali kartı (59-67) | ✓ | M: sinyal varsa mevcut kart, yoksa «Şu an uyum sinyali yok» (`:486`) — bant üç kolonunu korur. P: kararla (K-16) yerinde firma bilgisi |
| Kişiler kartı + «＋ Kişi» (68-69) | ✓ | M `:533` (birincil + panel yetkilileri, «＋ Kişi» kişi ekleme çekmecesini açar), P `:237` |
| İki harfli baş harf kutusu, birincil koyu / diğerleri gri (72, 76) | ✓ | `molecules/ContactLine.vue` → `Avatar size="xs"` (`atoms/Avatar.vue` `xs` = 26px), `lib/names.js` |
| «birincil» rozeti (73) | ✓ | `ContactLine.vue`; veri: `is_primary` (migration `2026_11_03_000100`, firma başına tekil indeks); seçim P kişi formu, M kişi listesinde «Birincil yap» (`:805`) |
| Kişi alt satırı: unvan · e-posta · telefon (73, 77) | ✓ | P `[title, email, phone]`; M `[email, phone]` — müşteri kişisinde unvan alanı yok |
| Gövde ızgarası `1fr 480px` (82) | ✓ | M `:547`, P `:254` — `lg:grid-cols-card-body` |
| Aktivite başlığı «Aktivite — müşteri geneli» (85) | ✓ | M `customers.card.activity_heading`; P «Aktivite» (müşteri değil) |
| Arama kutusu 150px (87) | ✓ | `ToolbarSearch compact` (`md:w-37.5`) — M `:554`, P `:260` |
| Tür seçici Tümü / Not / E-posta / Teklif, koyu seçili (88) | ✓ | yeni atom `atoms/OptionToggle.vue`; M dört seçenek; P kararla Tümü / Not / Görüşme |
| Arama ve tür bütün aktivitede çalışır | ✓ | `lib/activity.js` (katlama `lib/search.js`); M sorgu tüm satırları gönderir (`CustomerCard::activity` `preview` 4) |
| «46 kayıttan son 4'ü · Tüm aktivite →» (115) | ✓ | M `:586` + mevcut tüm-aktivite sayfası; P `:291`, kararla listeyi yerinde açar |
| Aktivite satır görünümü (91-114: avatar, GELEN/TEKLİF rozetleri) | — | Ticket kapsamında değil (dört öğe + ızgara). Yan düzeltme: not türü ve e-posta yönü ham kod basılıyordu («visit», «outbound»), artık çevrili (`CustomerCard::activity`) |
| Görevler başlığı + «bu müşteriye bağlı» rozeti + «＋ Görev» (139) | ✓ | `organisms/CardTasks.vue`; P'de «bu firmaya bağlı» |
| Görev satırında daire işaretleyici (141, 146) | ✓ | `CardTasks.vue` — yalnız atanan kapatır; başkasınınki pasif ve kime atandığı yazar (Sets) |
| Tarih rozeti: yakın tarih turuncu, uzak gri (142, 147) | ✓ | `CardTasks.vue` `pressing()` — 7 gün içinde ya da geçmişse uyarı tonu |
| «Düzenle» (143, 148) | ✓ | `CardTasks.vue` → `TaskForm` düzenleme kipi → `PUT /gorevlerim/{task}` (`UpdateTask`, açan ya da atanan, yalnız elle yazılmış görev) |
| Görev satırındaki bağlam («· TKF-0812», «· ziyaret notundan») (142, 147) | — | Görevde bu bağlam verisi yok; yerine başkasına atanmışsa kişi adı yazar. Ticket kapsamında değil |
| «＋ Görev» düğmesinin boyu (139: 5px 10px) | ⚠ | `BaseButton secondary` — dokunma hedefi kuralı (HANDOFF §11, ≥44px) düğmeyi büyütüyor; sayfadaki diğer düğmelerle aynı davranış |
