# Kapsama matrisi — `52 Egitim Belgesi`

*21.10.2026 · EGT-225 · Tasarım: `design/52 Egitim Belgesi.dc.html` (bu oturumda baştan sona açıldı) · Plan: `docs/plans/egitim-belgesi-plan.md` v1.2 · Uygulama: backoffice formu `TrainingDefinitionForm`, organizma `TrainingCertificate.vue`, ofis kartı `TrainingCertificates.vue`, doğrulama `CertificateVerification.vue`*

İşaret **kodun** durumunu söyler: ✓ var · ⚠ kısmen · ❌ yok. Sets kararıyla uygulanmayan öğeler ayrıca işaretli.

## Ekran 1 — Eğitim tanımı · «Belge» bölümü (backoffice)

| # | Tasarım öğesi | ✓/⚠/❌ | Kanıt |
|---|---|---|---|
| 1 | Başlık «Belge» + alt satır «IMDG Farkındalık — mevzuat dışı eğitim» | ✓ | `TrainingDefinitionForm.php:336` `certificateSubtitle()`; `lang/tr/training.php` `sections.certificate` = «Belge» |
| 2 | «Bu eğitimde belge *» — üç kart (Belge yok / Dışarıda hazırlanır / Şablondan üretilir), alt satırlarıyla, seçili kart vurgulu | ✓ | `TrainingDefinitionForm.php:338` Radio + `descriptions()` + `columns(3)`; kart görünümü `resources/css/certificate-form.css` (`.fi-certificate-modes`) |
| 3 | 2 kolon ızgara: «Belgeyi düzenleyen *» \| «Geçerlilik» | ✓ | `:367` ve `:382`, ikisi de `columnSpan(2)` (4'lük ızgarada yarım) |
| 4 | Düzenleyen değeri marka **adıyla** («WeNexus») | ✓ | `issuerKinds()` marka seçeneğini adıyla yazar; şablondan üretilirse yalnız 3E + marka |
| 5 | Altında «Seri öneki: WNX · son no WNX2026000000117» | ✓ | `:648` `seriesLine()`; önek yoksa kırmızı uyarı; 3E seçiliyse her aktif şirketin öneki ayrı satır |
| 6 | «Geçerlilik» listesi («2 yıl») + gri ipucu «Süresiz seçilirse…» | ✓ | `:382`; `renewal_months` Saatler bölümünden buraya taşındı; «Süresiz» = boş |
| 7 | «Belge şablonu *» etiketi | ✓ | `:722` `templateFields()` → `Text` |
| 8 | Sol: 212 × 150 küçük resim; şablon yokken çerçeve + başlık çubukları + kesik «BASIM ALANI» | ✓ | `resources/views/backoffice/certificate-template-thumbnail.blade.php`, `.fi-certificate-thumb*` |
| 9 | Sağ: dosya kartı — ad, «v2 · KULLANIMDA» rozeti, «3508 × 2480 px · yatay · 14.10.2026 · S. Er», «Örnekle önizle» | ✓ | `certificate-template-current.blade.php`; yükleyen adı backoffice hesabından |
| 10 | «＋ Şablonu değiştir» kesik kutusu + «yükleme yeni sürüm açar · eski belgeler eski şablonla kalır» | ⚠ | `:752` Filament `FileUpload` — metin yer tutucuda, ipucu altında; kutu Filament'in sürükle-bırak alanı (FilePond) olarak çizilir, tasarımdaki düz kesik kutu değil |
| 11 | Kural metni (A4, en az 300 dpi — 3508 × 2480, PNG/tek sayfa PDF, basım alanı boş) | ✓ | `templateFields()` Text; dpi iş ayarından (`company.certificate_template_min_dpi`, kırmızı çizgi 9) |
| 12 | Yükleme hataları: ÇÖZÜNÜRLÜK DÜŞÜK / ORAN A4 DEĞİL / DOSYA OKUNAMADI — üç kart | ⚠ | Metinler `lang/tr/training.php` `certificate_template.errors.*`; Filament alan hatası olarak **kırmızı metin** çıkar, başlık cümlenin başında («Çözünürlük düşük: …») — ayrı bordürlü kart değil |
| 13 | ŞABLON YOK — form kaydedilir, uyarır (amber) | ✓ | `:792` `Callout::warning()`; form kaydedilir (`CertificateTemplateTest` «saves without a template») |
| 14 | «Künye konumu: üst» tek ayarı (kurallar kartında) | ✓ | `:803` Radio Alt/Üst |

## Ekran 2 — Üretilen belge · A4

| # | Tasarım öğesi | ✓/⚠/❌ | Kanıt |
|---|---|---|---|
| 15 | A4 yatay (1123 × 794), şablon arka planda | ✓ | `TrainingCertificate.vue` + `certificate.css`; dikey şablon için 794 × 1123 |
| 16 | Basım alanı: SAYIN · ad (38/800) · TCKN (mono) · 72px çizgi · eğitim adı (21/800) · tarih · süre · yer | ✓ | `TrainingCertificate.vue:69` |
| 17 | Künye üçlüsü (İçerik · Belgeyi düzenleyen · Eğitimi veren) ayraçlarla | ✓ | `:85` |
| 18 | Uzun ad 32 → 32px, 44 → 26px, tek satır; eğitim adı en çok 2 satır | ✓ | `:34` `nameSize`; `.certificate-training` line-clamp 2; ölçüm `training-certificate-sheet.spec.js` |
| 19 | Marka yoksa «İçerik» düşer; düzenleyen = veren tek hücre «Düzenleyen ve veren» | ✓ | `:85`; ölçüm (nobrand) + `PrintedCertificateTest` (issuer_is_provider) |
| 20 | Künye şeridi sol-alt (Belge no · Düzenleme · Geçerlilik) + doğrulama adresi + QR sağ-alt; süresizde satır yok | ✓ | `:105`; ölçüm (unlimited → 2 satır) |
| 21 | Doğrulama adresi `dogrula.3egrp.com/…` | **Sets kararı** | Uygulanmadı: panel adresi `…/dogrula/{no}`, giriş zorunlu (Sets, 20.10.2026 — harita) |
| 22 | Renk: yalnız mürekkep ve gri | ✓ | `certificate.css` yalnız token (ink); damga `critical-fg` saydam |
| 23 | «BASIM ALANI (tasarım kılavuzu — basılmaz)» | — | Kılavuz; basılmaz, uygulanacak öğe değil |

## İptal / düzeltilmiş belge

| # | Tasarım öğesi | ✓/⚠/❌ | Kanıt |
|---|---|---|---|
| 24 | Taramalı üst kutu: «DÜZELTİLDİ» / «İPTAL EDİLDİ» + tarih + gerekçe + (düzeltmede) geçerli belge no | ✓ | `:53`; ölçüm (corrected) |
| 25 | Saydam «GEÇERSİZ» damgası, ad ve eğitim okunur | ✓ | `:102` |
| 26 | Künyede «Belge no … · GEÇERSİZ», QR yine çalışır | ✓ | `:105`; doğrulama «geçersiz» der (`PrintedCertificateTest`) |
| 27 | Düzeltmede yeni numara, seri boşluksuz | ✓ | `CorrectCertificate` + `CertificatePrinter`; test «corrects under a new number» |

## Ekran 3a — Ofis · eğitim sayfası

| # | Tasarım öğesi | ✓/⚠/❌ | Kanıt |
|---|---|---|---|
| 28 | Kart başlığı «Katılımcılar ve belgeler» + «şablondan · düzenleyen WeNexus» + «Tümünü PDF olarak aç (11)» | ✓ | `TrainingCertificates.vue:112`, `:117` |
| 29 | Tablo: KATILIMCI (ad + maskeli TCKN) · SONUÇ (rozet) · BELGE · aksiyon | ✓ | `:134` DetailTable; maske `TrainingCertificates::for` (`Masker::nationalId`) |
| 30 | Sonuç rozetleri: Tamamladı (yeşil) / Tamamlamadı (kırmızı) / Sonuç bekleniyor (gri) | ✓ | `:141` |
| 31 | Belge hücresi: no + tarih · «düzeltildi · eski: …118 geçersiz» (amber) · «sınav notu girilince üretilir» | ✓ | `:149`, `stateOf()` `:32` |
| 32 | «belge yok — 2. oturuma katılmadı» | ⚠ | Neden genel yazılır: «belge yok — eğitimi tamamlamadı». Hangi oturumun kaçırıldığı bu karta taşınmadı (yoklama tablosu gösteriyor) |
| 33 | Düzeltilmiş satırın açık zemini | ✓ | `:134` `row-class` |
| 34 | «Belgeyi aç / PDF» | ✓ | `office.trainings.certificates.show`; her açılış erişim kaydı (test «writes the access row every time») |
| 35 | Alt not (otomatik üretim, numara o an, erişim günlüğü) | ✓ | `:204` |
| 36 | Düzelt / İptal et düğmeleri | ✓ (plan) | Tasarımda çizili değil; plan B-13 + Sets kararı 4 — `certificate.void` izniyle görünür |

## Şablon yok — ofis şeridi

| # | Tasarım öğesi | ✓/⚠/❌ | Kanıt |
|---|---|---|---|
| 37 | Amber sol çizgili kart, başlık, sayılı metin, «Eğitim tanımına git» + «yükleme yetkisi: yönetici» | ✓ | `TrainingCertificates.vue:94`; bağlantı backoffice tanım düzenleme adresi |

## Ekran 3b — Portal · personel sertifikaları

| # | Tasarım öğesi | ✓/⚠/❌ | Kanıt |
|---|---|---|---|
| 38 | Satır: eğitim · kişi · marka · no + «Belgeyi aç / PDF» | ⚠ | Ekran tasarım 16'nın **kartlarıdır** (satır değil); kartta marka · no ve bağlantı var (`CertificateRow.vue`), düzenleyen cümlesi Bakanlık cümlesinin yerini alır |
| 39 | «Belge hazırlanıyor» / «Belge düzenlenmedi», düğmesiz, neden yok | ✓ | `MyCertificates::pending` + `Certificates.vue` bekleyen kartları |
| 40 | Katılımcının kendi ekranı (brief §2.3) | ✓ | `Participant/Panel.vue` bağlantı; yalnız kendi belgesi (test) |

## Ekran 4 — Doğrulama

| # | Tasarım öğesi | ✓/⚠/❌ | Kanıt |
|---|---|---|---|
| 41 | «herkese açık, giriş yok», logo başlığı | **Sets kararı** | Panelde, giriş zorunlu; başlık panel kabuğu + `PageHeader` |
| 42 | Geçerli: yeşil ✓ «Bu belge geçerlidir» + «…'e kadar geçerli»; 7 satırlık tablo | ✓ | `CertificateVerification.vue:35`; ek: `TurkishNumberSuffix` («2028'e», «2026'da») |
| 43 | Kimlik no yok + uyuşmazlık cümlesi + e-posta | ✓ | `:110`; adres iş ayarından (`company.certificate_contact_email`), sabit adres yok |
| 44 | Geçersiz: kırmızı ✕, «…'da düzeltildi», «Belge X yerine… Güncel belge: Y» (bağlantı); iptalde tarih, gerekçe yok | ✓ | `:67`; test «without the identity number … no reason» |
| 45 | Bulunamadı: gri ?, numara, metin, «Belge no» + «Sorgula» | ✓ | `:35` ikinci bölüm |
| 46 | Mobil: tek kolon, etiket/değer alt alta; belge 375'te yatay kayar | ✓ | `:75` `sm:flex-row`; tarayıcı `training-certificate.spec.js` (375, sayfa taşmıyor), fixture ölçümü (sayfa değil sahne kayar) |

## Kapanmamış satırlar

Hepsi kapandı — **Sets, 21.10.2026 (heyet 841 F-2 sonrası): «böyle kalsın»**, bilinçli kapsam dışı:

| # | Karar |
|---|---|
| 10 | Yükleme kutusu Filament'in kendi alanı kalır (backoffice'in teması yok, kendi atomu) |
| 12 | Yükleme hatası alan altı metin kalır; başlık cümlenin başında |
| 32 | Genel «belge yok — eğitimi tamamlamadı»; kaçırılan oturum yoklama tablosunda |
| 38 | Portalda tasarım 16'nın kartı esas; bağlantı, marka ve numara kartta |
