# Review — Planlama, kontenjan ve bakanlık bildirimi spec v1.1 — 2026-07-29 (re-review)

> **Review type:** spec-review (re-review)
> **Previous review:** `docs/reviews/review-planlama-spec-2026-07-29.md` — ❌ REJECTED, 8 bulgu (F-1…F-8) + 4 açık soru + 2 blocker olmayan düzeltme
> **Upstream document(s) read:** önceki turda okunan set güncel hâliyle yeniden açıldı — `docs/specs/planlama-spec.md` v1.1 (tamamı), `docs/specs/egitmen-spec.md` (düzeltilen satırlar :393, :606 bağlamıyla), `docs/arch/mimari-kararlar.md:354` (AD-23 onay omurgası), `docs/mevzuat-kurallari.md` §7.1/§9
> **Other cross-referenced documents:** kod tarafı teyitleri — `database/migrations/2026_08_02_000100_create_training_definitions.php:133` (`record_retention_years`), `:77/:145` (`regulation_id`), `2026_08_03_000100_regulation_parents_and_instructor_requirements.php:62-67` (`regulations.parent_id` tekil zincir), `2026_07_28_000100_create_office_customer_assignments.php` (varlık), `grep planning.approve` (kod + docs: sıfır kalan kullanım)
> **Stage locks in effect:** egitmen-spec APPROVED (heyet 158) — bu turda yapılan tek dokunuş izin adı eşitlemesidir, davranış değişikliği yoktur (aşağıda F-7).

---

## Bulgu kapanış matrisi

Her satır v1.1 dosyasından ve gerektiğinde migration'lardan doğrulandı; hiçbir satır kapatma beyanından alınmadı.

| Bulgu | Durum | Kanıt (v1.1) |
|---|---|---|
| **F-1** — Y-2016 md.7/2 alıntısı resmî metinle çelişiyordu ("asgari birinci zabit") | ✓ kapandı | §9.2: lisans ön şartı + üç alternatif (md.7/2-a/b/c) tablo hâlinde, resmî metinle birebir (önceki turda PDF s.1'den doğrulanmıştı); ⛔ *"'Uzakyol' nitelemesi düşürülemez"* satırı ve `mevzuat-kurallari.md` §7.1'e yönlendirme eklendi. "N belge türünden biri" modeli korunmuş — doğru, çünkü maddenin kendisi üç alternatif sunuyor |
| **F-2** — Saklama tabanı tek mevzuata (3 yıl) bağlıydı | ✓ kapandı | §9.5: taban `training_definitions.record_retention_years` alanından okunur — kolon gerçekten var (migration :133); Y-2016 md.13/f 3 yıl ve DG-2020 md.14/4 5 yıl ikisi de anılıyor, kodda sabit yıl yok (P-42) |
| **F-3** — Kapalı eğitimin satışçı görünürlüğü tanımsızdı | ✓ kapandı | §2.3 ofis tablosu: listelenen firmalara atanmış satışçılar (`office_customer_assignments` — tablo mevcut, migration teyitli) + AD-23 kapsamı yeten yöneticiler + planlamacı; P-35. §2.1'in gerekçesiyle bağ açıkça kurulmuş |
| **F-4** — Yedek liste / talep kuyruğu / çoklu kurumsal firma listesi görünürlüğü tanımsızdı | ✓ kapandı | §2.3: yedek listede satışçı sıra+toplam görür, firma adı görmez (çatı §148 rejiminin aynısı); talep kuyruğu `training_request.view` + atandığı firmalar; çoklu kurumsalda her firma yalnız kendini görür — gerekçe müşteriden müşteriye ifşa (kırmızı çizgi 1); katılımcı satırlarının paylaşılmadığı ayrıca yazılmış; P-36, P-37 |
| **F-5** — Statü makinesinde iptal geçişleri eksikti | ✓ kapandı | §4 tablosu üç sütunlu (nereden/nereye) ve dört boşluğun dördü kapalı: `abandoned` (§4.4 — taslak onaysız sonlanır, silinmez, PL kodu ölü kalır), `planned → cancellation_requested` hem şemada hem tabloda, ⛔ `completed` iptal edilemez, ret dönüşü "geldiği statüye" + gerekçe audit'te; P-38, P-39. Tanımsız geçiş kalmadı |
| **F-6** — İlk bildirim son tarihi için davranış tanımsızdı | ✓ kapandı | §10.3: son tarih hesaplanabilir (başlangıç − `notification_days`); yaklaşırken **görev** (`training.notify_ministry`, AD-23 kapsamında), geçince yükselme + Eğitim/Operasyon Direktörüne alert; görev-değil-uyarı gerekçesi §11.2'yle tutarlı; kaç gün önceden açılacağı ayar (AD-08), iş günü hesabı EGT-43'e bağlı; P-40 |
| **F-7** — İzin adı iki onaylı belge arasında çelişikti | ✓ kapandı | Üç yerde de `training.approve`: `egitmen-spec.md:393`, `:606`, `mimari-kararlar.md:354` — grep ile doğrulandı; `planning.approve` hiçbir doküman ve kod dosyasında kalmadı. Kodda kullanım yoktu, davranış değişmedi; onaylı kararın kendisine (onay mekanizması) dokunulmadı — stage lock ihlali yok |
| **F-8** — Donmuş kanıt setine erişim tanımsızdı | ✓ kapandı | §9.6: kopya orijinalle aynı rejimde (egitmen-spec §2.1, AD-05, AD-21 — maskeli gösterim, açık görüntüleme ayrı eylem, erişim logu); ⛔ eğitim görme yetkisi kanıt setine yetmez, ayrı izin; "kopya orijinalden gevşek olamaz" ilkesi kayıtlı; P-41 |

### Açık soruların durumu

| # (önceki review) | Durum |
|---|---|
| 1 — Çoklu mevzuat bağında sürüm | ✓ Cevaplandı: §1.2 ⚠ — bugünkü model tek `regulation_id` + `regulations.parent_id` zinciri (ikisi de migration'da teyitli: 2026_08_02:77, 2026_08_03:62); saklanan sürüm tek, üst halkaların ayrı sürümlenmesi gerekirse mevzuat kaydının kararı (AD-27). Veri modeliyle tutarlı |
| 2 — `max_participants` boş tanımda kapasite | ✓ Cevaplandı: §5.1 alt bölüm — 3E'nin backoffice tanımlı genel tavanı; sınıflandırma doğru: bu tavan mevzuat sınırı değil iş parametresidir, dolayısıyla §8.1/AD-09 rejimine tabidir (aşılabilir → uyarı + onay), sert kural yalnız mevzuattan gelen sayıda kalır; P-43 |
| 3 — F-7 kapanış yolu | ✓ Bu turda kapandı (yukarıda) |
| 4 — KVKK üst sınırı | ✓ Doğru şekilde daraltıldı: taban çözüldü (§9.5), §17/2 artık yalnız üst sınırı açık bırakıyor — bu bir 3E politika kararıdır, plan aşamasını bloklamaz |

### Blocker olmayan düzeltmeler

- §17/3 çapraz referans: `(§1.4)` ✓
- §18: v1.0 satırı "34 kabul kriteri" olarak düzeltilmiş, v1.1 satırı eklenmiş ✓

## ✅ What works (v1.1'e eklenenler üzerine)

- **F-1 kapanışı bulgunun özünü doğru ayrıştırmış:** yanlış olan örnekti, model değil — md.7/2'nin üç alternatifli kurgusu "N belge türünden biri" kararının mevzuattaki en güçlü dayanağıdır ve artık tablo hâlinde, madde referanslı duruyor.
- **§2.3 yalnız boşluğu doldurmuyor, ilkeyi yazıyor:** "paylaşılan kaydın altındaki satırların paylaşılmadığı açıkça söylenmelidir" cümlesi, EGT-26/27'de aynı sorunun tekrar açılmasını önleyecek türden bir sözleşme.
- **`abandoned` kararının gerekçesi iptal onayının varlık sebebiyle simetrik:** onayın koruduğu şey verilmiş söz; taslakta söz yok. AD-11 korunmuş (silinmez), ölü PL kodu AD-19'un `(yıl, son ek)` benzersizliğiyle tutarlı.
- **§5.1 alt bölümü sert/yumuşak tavan ayrımını tek cümleyle sabitliyor** — mevzuat tavanı aşılamaz, 3E tavanı onaya gider. Kırmızı çizgi 14 ve AD-09 revizyonu aynı anda, çelişkisiz.
- Dokuz yeni kabul kriteri (P-35…P-43) gözlemlenebilir ve her biri bir bulgu kapanışına bağlanıyor.

## ⚠️ Findings & Risks (in-scope for this review type)

Yok. Sekiz bulgunun sekizi de dosya ve migration kanıtıyla kapalı; yeni bulgu açılmadı.

### Not — blocker olmayan tek kalem

- Başlıktaki künye satırı (dosya satır 3) v1.1'de kullanılmaya başlanan üç maddeyi henüz saymıyor: Y-2016 **md.7/2** (§9.2), DG-2020 **md.14/4** (§9.5), YÖN-2019 **md.14/2** (§8.1 TMGD uyarısı). İçerik doğru, künye eksik — bir sonraki dokunuşta eklenmesi yeterli.

## ❓ Open Questions (to be answered before next stage)

Plan aşamasını bloklayan soru yok. Spec'in kendi §17'sindeki beş kalem (il listesi bu turda, KVKK üst sınırı, çevrimiçi mevzuat taraması, EGT-43, serbest metin alanının temizliği) açıkça adresli ve hiçbiri plan yazımını durdurmaz.

## ⚠️ Upstream Findings

Yok. Upstream'e yapılan tek değişiklik (izin adı eşitlemesi, egitmen-spec + AD-23) davranış değiştirmeyen terminoloji senkronudur ve bu review'da doğrulanmıştır.

## Verdict: ✅ APPROVED

Review 164'ün sekiz bulgusu da gerçek dosya değişikliğiyle kapatıldı ve her kapanış bu turda bağımsız olarak doğrulandı — mevzuat alıntıları resmî metinle, yapısal iddialar (`record_retention_years`, `regulation_id` + `parent_id` zinciri, `office_customer_assignments`) migration'larla, izin adı senkronu grep'le. Yeni bulgu yok; kalan tek kalem künye satırındaki eksik madde referanslarıdır ve blocker değildir. Spec plan aşamasına girecek olgunluktadır. Son karar Sets'indir.
