# Review — docs/plans/egitim-belgesi-plan.md v1.2 — 2026-10-20

> **Review type:** plan-re-review
> **Previous review:** `docs/reviews/review-egitim-belgesi-plan-re-review-2026-10-20.md` (heyet 837, REJECTED, 2 bulgu)
> **Upstream document(s) read:** `design/52 Egitim Belgesi.dc.html` (tamamı), `docs/design/katilim-belgesi-brief.md`, `proje-haritasi.md` «EGT-218 kararları» madde 5, «EGT-225 belge içeriği», «EGT-225 tasarım 52 kararları» 1–5
> **Other cross-referenced documents:** `CLAUDE.md` (17 kırmızı çizgi); kod: `app/Domain/Invoicing/InvoiceNumber.php` (`PREFIX`), `app/Actions/Trainings/CompleteTraining.php`, `app/Actions/Trainings/RecordExamResult.php`, `app/Actions/Trainings/RecordCertificate.php`, `database/migrations/2026_09_17_000100_create_document_templates.php`, `database/migrations/2026_11_01_000400_3e_companies_issue_the_invoices.php`, `database/migrations/2026_10_02_000100_a_person_may_hold_more_than_one_certificate.php`
> **Stage locks in effect:** Tasarım 52 + Sets kararları (harita) locked

---

## Upstream Coverage Matrix (sıfırdan üretildi)

| Upstream § / madde | Reviewed doc'ta durumu | Kanıt |
|---|---|---|
| Harita k.5 (EGT-218): düzenleyen 3E/marka + şablon yüklenirse sistem üretir | ✓ | B-1, B-5 |
| EGT-225 belge içeriği: kimlik no açık, numara sistem verir/düzenleyen başına sıralı/boşluksuz | ✓ | B-2, B-9, B-6 |
| Tasarım 52 k.1: ayrı seri öneki, fatura serisinden bağımsız (ör. WNX, 3EA) | ✓ | B-2 ve Veri modeli (satır 43) artık aynı CHECK'i (`^[A-Z0-9]{3}$`) taşıyor — çelişki giderildi (eski heyet 837 F-7) |
| Tasarım 52 k.2: doğrulama panel adresinde, giriş zorunlu | ✓ | B-8 |
| Tasarım 52 k.3: PNG/tek sayfa PDF, canlıya poppler-utils | ✓ | B-4 |
| Tasarım 52 k.4: yeni izin, düzeltmede yeni numara/eski geçersiz | ✓ | B-13, B-6 |
| Tasarım Ekran 1: şablon sürümleme, «yeni sürüm eskisini değiştirmez» | ✓ | B-3, gerçek `document_templates` indeksleriyle (`2026_11_01_000400:152-155`) uyumlu |
| Brief §2.3: üç yüzey (ofis, portal firma, katılımcının kendi ekranı) | ✓ | B-11 |
| Tasarım 3a dipnotu: «sınav notu girilince üretilir» = yeniden sınav dahil | ✓ | B-5 üç tetikleyici; `RecordExamResult.php`'ın attempt/retake mantığıyla uyumlu |
| AD-06/kırmızı çizgi 13: üretimin audit kaydı | ✓ | B-12b |
| **Görevler §3 — GenerateCertificate'ın üç çağıranı** | ✓ | satır 56 artık «B-5'in üç tetikleyicisinden çağrılır: `CompleteTraining`, tamamlanmış katılımcı için `RecordExamResult`, şablon yüklemesi» diyor — karar ve görev listesi hizalı (eski heyet 837 F-8) |
| Diğer tüm B-maddeleri, veri modeli satırları 44-50, testler, rollout/rollback, kapsam dışı | ✓ | v1.1'den değişmedi, regresyon yok |

Matrix'te ⚠/❌ satır yok.

---

## ✅ What works

- **F-7 ve F-8'in ikisi de gerçek ve dokümanın tamamında tutarlı.** `grep` ile doğrulandı: eski `^[A-Z]{2,4}$` ifadesi dokümanın hiçbir yerinde kalmamış; «yalnız ikisinden çağrılır» ifadesi de kalmamış. Kozmetik değil, tek kaynaktan (B-2, B-5) türeyen tüm tekrarlar güncellenmiş.
- Önceki turda doğrulanan sekiz bulgunun (834'ün 6'sı + 837'nin 2'si) hepsi artık gerçek mekanizmalarla (kod, migration) tutarlı ve dokümanın her tekrarında hizalı.
- Üç turluk düzeltme döngüsünde dokümanın geri kalanında (B-1, B-4, B-7–B-14, testler, rollout/rollback, kapsam dışı) regresyon yok — hiçbiri sapmamış.

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

Yok.

## ❓ Open Questions (carried over, henüz cevaplanmadı — blocker değil)

1. Katılımcı/`/katilimci` oturumu `/dogrula`ya erişir mi — B-8 hâlâ yalnız «müşteri oturumu» diyor.
2. «Bulunamadı» sorgusunun erişim kaydı hangi kiracıya yazılır.
3. Marka × şirket arasında önek çakışması hâlâ yalnız form doğrulamasıyla engelleniyor (çapraz-tablo DB garantisi yok) — test eklenmiş, mekanizma aynı; bilinçli kabul mü doğrulanmalı.

Bu üçü implementasyon sırasında netleşebilecek küçük ayrıntılar; plan'ın «nasıl yapacağız» sorusuna cevap verme yeterliliğini bozmuyor.

## Previous Findings Status

- F-7: ✅ Resolved
- F-8: ✅ Resolved

## Verdict: ✅ APPROVED

Upstream Coverage Matrix'te ⚠/❌ satır yok. Sekiz bulgunun (834 + 837) hepsi kod üzerinden doğrulanmış gerçek çözümlerle kapatıldı, dokümanın tamamında tutarlı. Migration güvenliği (kısmi indeksler, CHECK'ler), tenant izolasyonu (RLS, kiracısız doğrulama tablosu + AD-16 muafiyeti), authorization (`certificate.void`), audit (B-12b, B-13), rollback (AD-11) plan'da net. Developer implementasyona başlayabilir.
