All checks were successful
Deploy / deploy (push) Successful in 17s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
242 lines
21 KiB
Markdown
242 lines
21 KiB
Markdown
# 05 · URAP Türkiye Sıralaması — keşif, eşleştirme ve en küçük işe yarar adım
|
||
|
||
**Rol:** veri-muhendisi · **Tarih:** 22 Eylül 2026 · **Kapsam:** BACKLOG #8 (üniversite sayfası zenginleştirme) ön koşulu + BACKLOG #9 teşhisi
|
||
|
||
## Özet (5 madde)
|
||
|
||
1. **Eşleştirme sorunu YOK.** URAP 2025-2026 genel sıralamasındaki **198 üniversitenin 198'i** (%100) bizim slug'ımızla eşleşti; dahası 198'inin **adı harfi harfine bizim DB'deki yazımla aynı**. Takma ad tablosu, normalleştirme kuralı, elle kontrol gerekmiyor. (OpenAlex'te 201/229 idi; URAP bundan çok daha temiz çünkü URAP da YÖK yazımını kullanıyor.)
|
||
2. **Veri, PDF ayrıştırmadan alınabiliyor.** Site bir Meteor SPA; tüm tablo tek bir Mongo dokümanının `data` dizisinde (198 satır × 8 gösterge puanı + toplam puan + şehir + web adresi) ve `rankings.byurlandgroup` yayınıyla geliyor. Geçen geceki rapordaki "basın PDF'i ayrıştırılmalı, ~4 saat" tahmini artık geçersiz.
|
||
3. **E-postadaki "güncelleme olursa sizde de direkt uygulanmış olur" beklentisi bu URL için gerçekleşmez.** URAP'ın adresleri yıla çivili (`/Rankings/2025-2026/GENEL-SIRALAMASI-2025`); son 7 yılın her biri ayrı grup + ayrı URL. Yeni yıl çıkınca **hem veriyi hem linki** biz güncelleyeceğiz. Yılda bir, ~30 dakika.
|
||
4. **En küçük işe yarar adım ~3 saat** (22 değil): üniversite sayfasına tek sayı — "URAP Türkiye sıralaması: 18 / 198" + tek cümlelik kaynak satırı. Yeni DB dosyası, yeni tablo, göç, ayrıştırıcı, cron **gerekmiyor**; `src/lib/uni-koordinatlar.ts` deseninde 198 satırlık sabit yeterli.
|
||
5. **BACKLOG #9'un kök nedeni bulundu ve URAP'la çapraz doğrulandı:** hata `unitur-onar.ts`'te ya da 2026 tazelemesinde değil, **ilk CSV ingest'inde** doğmuş; tazeleme onu sadakatle kopyalamış. Etki **100 satır** `unitur` + **26 satır** `il`. URAP'ın kendi devlet/vakıf ayrımıyla 198 üniversitenin **198'inde bizim etiketimiz doğru** — yani hata yalnız URAP listesi dışındaki KKTC/yurt dışı kurumlarda.
|
||
|
||
---
|
||
|
||
## 1. URAP verisinde ne var
|
||
|
||
**Kaynak:** `https://newtr.urapcenter.org/Rankings/2025-2026/GENEL-SIRALAMASI-2025` (22 Eyl 2026, tarayıcı paneliyle okundu; sayfa JS ile çiziliyor, `curl` boş HTML döndürür).
|
||
|
||
| Ne | Değer |
|
||
|---|---|
|
||
| Üniversite sayısı | **198** (devlet 125 + vakıf 73; URAP'ın kendi iki alt tablosu tam olarak 198'e tamamlanıyor) |
|
||
| Kolonlar | `rank`, `name`, `sehir`, `url` (üniversite web adresi), `lat`/`lng`, 8 puan kolonu + `total` |
|
||
| 8 puan kolonu | Makale, Atıf, Bilimsel Doküman, Doktora, Öğretim Üyesi/Öğrenci, Uluslararası İşbirliği, Yurtiçi İşbirliği, TÜBİTAK Proje |
|
||
| Toplam puan aralığı | 1.152,91 (Koç) → 70,82 (Antalya Belek) |
|
||
| Devlet/vakıf ayrımı | **Var** — ayrı sıralama tabloları: `DEVLET ÜNİVERSİTELERİ-2025` (125), `VAKIF ÜNİVERSİTELERİ-2025` (73) |
|
||
| Diğer kesitler | Tıp fakültesi olan/olmayan, 2000 öncesi/sonrası kurulan, 6.000'den az öğrencisi olan — yılda 8 tablo |
|
||
| Yıl arşivi | 2019-2020 → 2025-2026, **7 yıl**, her biri ayrı URL |
|
||
| Alan (bölüm) bazlı sıralama | **2025-2026 için YOK.** `/Rankings/2025-2026/fields` sayfası yalnız yukarıdaki 7 kesiti listeliyor; sitenin altbilgisindeki "ALANLARA GÖRE TÜRKİYE SIRALAMALARI" bağlantısı **2019-2020** yılına ait. Yani "bu bölümde bu üniversite kaçıncı" sorusuna URAP'la cevap veremeyiz. |
|
||
|
||
**Veri dönemi (URAP Yöntem sayfası, 22 Eyl 2026'da okundu):** 15 gösterge; makale sayımı **2024**, atıf/doküman/işbirliği **2020-2024**, doktora mezunu **2023-2024**, öğrenci ve öğretim üyesi **2024-2025**, TÜBİTAK projeleri **2019-2023**. Kaynaklar: InCites (Web of Science), YÖK, TÜBİTAK ARDEB. Sıralamanın adı "2025-2026" ama **ölçtüğü dönem 2020-2024** — dipnotta bunu gizlememek gerekir.
|
||
|
||
**Veri ucu (tazeleme betiği için).** Sayfa Meteor/DDP kullanıyor; REST yok. Tablonun tamamı `Rankings` koleksiyonundaki tek dokümanın `data` alanında:
|
||
|
||
```
|
||
Meteor.subscribe('rankings.byurlandgroup', 'GENEL-SIRALAMASI-2025', '2025-2026')
|
||
Rankings.findOne({url:'GENEL-SIRALAMASI-2025'}).data // 198 nesne
|
||
```
|
||
|
||
Toplam yük ~40 KB. Büyük dosya indirme yok; protokolün "büyük veri indirme" sınırına takılmıyor.
|
||
|
||
## 2. Eşleştirme testi — yöntem ve sonuç
|
||
|
||
**Yöntem.** URAP adı → `uniAdiNormalize` (sondaki parantezi at, `src/lib/harita.ts:32`) → `turkishSlugify` (`src/lib/slug.ts:6`) → bizim `programs.universite` üzerinden aynı kuralla üretilen slug kümesiyle karşılaştır. Yani **yeni bir normalleştirme kuralı yazılmadı**, sitenin hâlihazırda `/universite/[slug]` üretirken kullandığı kural uygulandı.
|
||
|
||
| Aşama | Yöntem | Eşleşen |
|
||
|---|---|---|
|
||
| 1 | Birebir slug | **198 / 198** |
|
||
| 2 | Gevşek anahtar (yedek) | gerek kalmadı |
|
||
| | **Toplam** | **198 / 198 (%100 URAP tarafı; 198/229 = %86,5 bizim tarafımız)** |
|
||
|
||
**Ek kontrol:** eşleşen 198 kaydın kaçında URAP yazımı bizim yazımımızdan farklı? **0.** `BEZM-İ ÂLEM VAKIF ÜNİVERSİTESİ`, `MANİSA CELÂL BAYAR ÜNİVERSİTESİ`, `İSTANBUL ÜNİVERSİTESİ-CERRAHPAŞA` gibi tuzaklı adlar dahil hepsi birebir aynı. Ad değişikliği sorunu da yok (URAP "AYDIN ADNAN MENDERES", "DEMİROĞLU BİLİM", "İSTANBUL ATLAS" gibi güncel adları kullanıyor — OpenAlex'in takıldığı 10 ad burada takılmıyor).
|
||
|
||
**Kural önerisi:** ek kural yok. Tek gereken, yıllık tazelemede eşleşmeyen satırın **sessizce düşmemesi**: betik/kontrol eşleşmeyen her URAP adını adıyla listelemeli, tahminle yakın slug'a bağlamamalı.
|
||
|
||
**Üretilen dosyalar (scratchpad, repoya konmadı):**
|
||
`/private/tmp/claude-501/-Users-bilalgursen-Desktop-kolaytercih/0a5eb19a-af4b-4ddc-83ed-e78660f30fd8/scratchpad/urap-2025.txt` (198 satır: sıra|ad|şehir|toplam puan) · `.../eslestir.mjs` (eşleştirme) · `.../fark.mjs` (yazım farkı) · `.../tur-capraz.mjs` (devlet/vakıf çapraz kontrolü) · `.../db-uni.txt` (DB'den çıkarılan 328 ham ad).
|
||
|
||
## 3. Kapsama boşluğu — bizde olup URAP'ta olmayan 31 üniversite
|
||
|
||
229 slug'ımızın 31'i URAP listesinde yok. Bu 31 kurumun toplam **1.660 program satırı** var: 21.493'ün **%7,7'si**.
|
||
|
||
| Neden | Kaç kurum | Örnek |
|
||
|---|---|---|
|
||
| KKTC ve yurt dışı kurumlar (URAP yalnız Türkiye'deki üniversiteleri sıralıyor) | 22 | Doğu Akdeniz (276 program), Yakın Doğu (205), Girne Amerikan (158), Uluslararası Balkan, Manas, Tiran New York |
|
||
| Yalnız meslek yüksekokulu olan vakıf kurumları | 4 | İstanbul Şişli MYO, Ataşehir Adıgüzel MYO, İzmir Konak MYO |
|
||
| Yeni / araştırma çıktısı henüz oluşmamış Türkiye üniversiteleri | 4 | Mudanya (78 program), Sivas Bilim ve Teknoloji, Türk-Japon BTÜ, Ankara Müzik ve Güzel Sanatlar |
|
||
| ÖSYM'de ayrı kurum gibi görünen özel kontenjan satırı | 1 | "İçişleri Bakanlığı ve Milli Savunma Bakanlığı adına… Sağlık Bilimleri Üniversitesinde eğitim alacaklar" |
|
||
|
||
**Öğrenci o sayfaya girince ne görmeli? Öneri: kutu her zaman görünsün, değeri ya sayı ya "Listede yok" olsun.**
|
||
|
||
- `—` **yazma.** "—" okuyucuya "puanı yok / kötü" gibi geliyor; oysa Doğu Akdeniz Üniversitesi kötü olduğu için değil, URAP Türkiye listesi KKTC'yi kapsamadığı için yok.
|
||
- Kutuyu **tümden gizlemek** de yanlış: 229 sayfanın 198'inde olan bir kutunun 31'inde hiç olmaması, öğrencinin "bende mi açılmadı" diye düşünmesine yol açar ve eksikliği görünmez kılar (protokol: eksik, eksik görünmeli).
|
||
- Önerilen metin, üç varyant — hangi nedene düştüğü zaten `unitur`'dan bilinir:
|
||
- KKTC/yurt dışı: **"URAP Türkiye sıralaması: listede yok — URAP yalnız Türkiye'deki üniversiteleri sıralıyor."**
|
||
- MYO / yeni üniversite: **"URAP Türkiye sıralaması: listede yok — 2025-2026 listesinde yer almıyor."**
|
||
- Sıralama/filtreleme: `/universiteler` hub'ında ilk sürümde URAP'a göre **sıralama ve rozet olmasın**. 31 kurumu listenin dibine iten bir sıralama, kapsama boşluğunu sessizce "kalitesizlik" gibi gösterir.
|
||
|
||
Nihai görünüm kararı tasarımcının; buradaki şart veri tarafının: değer yoksa sayı uydurulmaz, komşu yıldan/kurumdan kopyalanmaz, "0" ya da "199" yazılmaz.
|
||
|
||
## 4. Veri nerede dursun, nasıl tazelensin
|
||
|
||
### 4.1 Karar: veriyi kopyalayalım mı (a), yalnız link mi verelim (b)?
|
||
|
||
| | (a) Veriyi bizim tarafta tutmak + tarihli atıf | (b) Yalnız URAP'a link vermek |
|
||
|---|---|---|
|
||
| İzin | E-posta bunu **açıkça** veriyor: "…aktif bağlantı/atıf vermek kaydıyla **verilerimizi web uygulamanızda yayımlayabilirsiniz**" | Zaten herkesin hakkı; izin gerekmezdi |
|
||
| Öğrenciye faydası | Sayı sayfada görünür, 1 saniyede okunur; 24'lük listede/karşılaştırmada kullanılabilir | Öğrenci siteden çıkar, SPA'da 198 satırlık tabloda kendi üniversitesini arar — Bilal'in "kolayca görsün" hedefinin tersi |
|
||
| Güncellik riski | Bizde donmuş kalır → **dipnotta yıl yazmak zorunlu** | Her zaman güncel |
|
||
| İş | ~3 saat + yılda ~30 dk | ~15 dk |
|
||
| Bağımlılık | URAP sitesi çökse bile sayfa çalışır | URAP sitesi/URL'si değişirse ölü link |
|
||
|
||
**Öneri: (a).** İzin tam da bunun için istendi ve verildi; (b) hem izni ziyan eder hem "kolaylık" ölçütüne aykırıdır. (b)'yi (a)'nın içinde zaten uyguluyoruz: kutunun altındaki cümle URAP'ın kendi sayfasına aktif link verir.
|
||
|
||
**Ama e-postadaki beklenti düzeltilmeli.** "Bu şekilde verirseniz güncelleme olursa sizde de direkt uygulanmış olur" cümlesi, o URL'nin güncellendiği varsayımına dayanıyor. Sitenin yapısı bunu desteklemiyor: 7 yılın her biri ayrı grup ve ayrı adres (`GENEL-SIRALAMASI` 2021-2022, `-2022`, `-2023`, `-2024`, `-2025`). Yeni yıl **yeni bir adreste** yayımlanır; verdiğimiz link 2025-2026 tablosunda kalır. *(Bu, 7 yıllık URL desenine dayanan çıkarımdır — URAP'a tek cümleyle teyit ettirmek 5 dakikalık iş.)* Pratik sonucu: yılda bir kez veri + link birlikte güncellenir, bu zaten (a) yolunun takvimi.
|
||
|
||
### 4.2 Şema: yeni DB dosyası **gerekmiyor**
|
||
|
||
Geçen geceki `data/universiteler.db` + `uni_kimlik` + `uni_gosterge` tasarımı 8 kaynaklı, uzun biçimli bir gösterge deposu içindi. Tek kaynak ve tek sayı için fazla:
|
||
|
||
- Veri hacmi: 198 satır × 3 alan (~8 KB). SQLite'a koymanın hiçbir faydası yok — sorgu yok, birleştirme yok, filtre yok.
|
||
- `data/yokatlas.db`'ye **yazılamaz**: `ingest.ts` DB'yi baştan siliyor (`rmSync`, satır 26) ve dosya git'te izleniyor; her tazeleme binary diff üretir.
|
||
- Repoda **aynısının örneği var**: `src/lib/uni-koordinatlar.ts` (249 satır, slug→koordinat sabiti). Aynı desen.
|
||
|
||
**Önerilen ilk sürüm:**
|
||
|
||
```ts
|
||
// src/lib/urap-siralama.ts (tek seferlik üretilen sabit; elle düzenlenmez)
|
||
export const URAP_DONEM = "2025-2026";
|
||
export const URAP_TOPLAM = 198;
|
||
export const URAP_KAYNAK_URL =
|
||
"https://newtr.urapcenter.org/Rankings/2025-2026/GENEL-SIRALAMASI-2025";
|
||
/** URAP'ın sıralamayı yayımladığı tarih (dipnot bu tarihi gösterir). */
|
||
export const URAP_YAYIN = "2025-10"; // [doğrulanmalı — URAP basın bülteni tarihi]
|
||
|
||
export const URAP_SIRA: Record<string, { sira: number; puan: number }> = {
|
||
"koc-universitesi": { sira: 1, puan: 1152.91 },
|
||
"hacettepe-universitesi": { sira: 2, puan: 1096.48 },
|
||
// … 198 satır
|
||
};
|
||
```
|
||
|
||
Okuma tarafı: `getUniversiteBySlug` (`src/lib/katalog.ts:363`) dönüşüne `urap: URAP_SIRA[slug] ?? null` eklenir. `UniDetay` tipine bir alan. Başka hiçbir yere dokunulmaz.
|
||
|
||
**Geri alma:** dosyayı sil + tek alanı kaldır. Göç yok, `app.db`'ye dokunulmaz, `yokatlas.db` şeması değişmez. `app.db` göçü gerektiren hiçbir şey bu işte yok.
|
||
|
||
**Ne zaman DB'ye taşınmalı:** ikinci bir kaynak (YÖK İstatistik öğrenci sayısı, TÜBİTAK) eklendiğinde ya da "URAP'a göre sırala" gibi bir sorgu gerektiğinde. O gün geçen geceki `uni_gosterge` tasarımı doğru tasarımdır; bugün değil.
|
||
|
||
### 4.3 Tazeleme
|
||
|
||
**Sıklık: yılda bir, Ekim.** URAP Türkiye sıralamasını her Ekim yayımlıyor (7 yıllık grup deseni). Daha sık çekmenin anlamı yok — veri yıl içinde değişmiyor.
|
||
|
||
**İlk sürümde betik yazma.** Yılda bir koşacak bir DDP istemcisi (yeni bağımlılık: `simple-ddp` ya da elle SockJS) ~3 saat ve yeni bir bakım yükü. Aynı işi tarayıcı konsolunda tek satır yapıyor (yukarıdaki `Rankings.findOne(...).data`). Ekim'de 20 dakika:
|
||
|
||
1. `https://newtr.urapcenter.org/Rankings/<yeni-grup>/<yeni-url>` açılır (adres o yılın menüsünden alınır).
|
||
2. Konsolda tek satırla 198 (ya da yeni sayıda) satır dışa alınır.
|
||
3. `pnpm urap:uret <dosya>` — 30 satırlık dönüştürücü `src/lib/urap-siralama.ts`'i yeniden yazar ve **eşleşmeyenleri ekrana basar**.
|
||
4. `URAP_KAYNAK_URL`, `URAP_DONEM`, `URAP_TOPLAM` aynı commit'te güncellenir.
|
||
|
||
**Güncelleme sonrası doğrulama** (`scripts/veri-kalite.ts` içine, salt okunur):
|
||
|
||
| Kontrol | Beklenen |
|
||
|---|---|
|
||
| `URAP_SIRA` anahtarlarının tamamı `getAllUniversiteSlugs()` içinde mi | eşleşmeyen = 0; biri bile varsa **KALDI** (üniversite adı değişmiş demektir) |
|
||
| Sıra değerleri 1..`URAP_TOPLAM`, tekrarsız, boşluksuz | evet |
|
||
| Puanlar azalan sırada (sıra 1 en yüksek puan) | evet |
|
||
| `URAP_TOPLAM` = kayıt sayısı | evet |
|
||
| Bir önceki döneme göre listeden düşen üniversite | 0 olmalı; varsa **UYARI** + adlarıyla listelenir |
|
||
|
||
### 4.4 İş tahmini — "en küçük işe yarar adım"
|
||
|
||
| İş | Saat |
|
||
|---|---|
|
||
| `src/lib/urap-siralama.ts` (198 satır sabit; veri bu gece zaten çıkarıldı, scratchpad'de) | 0,5 |
|
||
| `katalog.ts` okuma katmanı + `UniDetay` tipi | 1 |
|
||
| `universite-icerik.tsx`'te tek kutu + atıf satırı (tasarımcı deseniyle) | 1 |
|
||
| `veri-kalite.ts`'e 5 kontrol + tsc/lint | 0,5 |
|
||
| **Toplam** | **~3 saat** |
|
||
|
||
Yıllık tazeleme: ~30 dk/yıl. Otomatik çekme betiği istenirse +3 saat — **ilk sürümde önerilmiyor.**
|
||
|
||
*(BACKLOG #8'in ~22 saatlik tahmini 8 alan ve 4 kaynak içindi; bu 3 saat onun yerine değil, en karlı ilk diliminin fiyatıdır.)*
|
||
|
||
## 5. Atıf şartı — sitede nasıl karşılanacak
|
||
|
||
İzin **şartlı**: "urapcenter.org adresine aktif bağlantı/atıf vermek kaydıyla". Veri tarafının koyduğu şart (görünüm tasarımcının):
|
||
|
||
**Kural: URAP'tan gelen bir sayının göründüğü HER yüzeyde, aynı ekranda, tek cümle + tıklanabilir bağlantı bulunur.**
|
||
|
||
Kanonik cümle:
|
||
|
||
> Kaynak: [URAP Türkiye Sıralaması 2025-2026](https://newtr.urapcenter.org/Rankings/2025-2026/GENEL-SIRALAMASI-2025), URAP Araştırma Laboratuvarı — 198 üniversite arasında.
|
||
|
||
Uygulama şartları:
|
||
|
||
1. Bağlantı **aktif** olacak: gerçek `<a href>`, yeni sekme + `rel="noopener"`. **`nofollow` konulmayacak** — "aktif bağlantı" şartının ruhu budur.
|
||
2. Bağlantı **o yılın URL'si** olacak (`URAP_KAYNAK_URL` sabitinden). Yıl güncellenirken link de güncellenir; ikisi aynı dosyada durduğu için ayrılamazlar.
|
||
3. Cümlede **dönem yazacak** ("2025-2026") ve toplam ("198 üniversite arasında") — "kaçıncı" sayısı payda olmadan yanıltıcıdır.
|
||
4. Geçtiği yerler bugün için: `/universite/[slug]` kutusu. İleride URAP sayısı bir rehber yazısında, karşılaştırma tablosunda, 24'lük listede, `/universiteler` hub'ında ya da OG görselinde görünürse **aynı cümle oraya da gider**; link konulamayan bir yüzeyde (ör. OG görseli) URAP sayısı **gösterilmez**.
|
||
5. `VeriKaynagi` bileşeni (`src/features/katalog/components/veri-kaynagi.tsx`) **kullanılmaz/kopyalanmaz**: o satır "YÖK Atlas 2026 · son güncelleme 21 Eylül 2026" yazar ve `KATALOG_VERI_TARIHI`'ne bağlıdır. URAP'ın dönemi başka, tarihi başka. Ayrı, ikinci bir kaynak satırı gerekir — yoksa öğrenciye URAP verisi YÖK Atlas tarihiyle sunulmuş olur.
|
||
6. `/gizlilik`-`/kosullar` benzeri bir hukuk metni değişikliği gerekmiyor; izin e-postası `docs/` altında saklanmalı (kanıt).
|
||
|
||
## 6. BACKLOG #9 — kök neden teşhisi (düzeltme UYGULANMADI)
|
||
|
||
### 6.1 Ne oluyor
|
||
|
||
| Üniversite | Bugünkü `unitur` | Olması gereken | Satır | Havuza girebilen (efektif sırası olan) |
|
||
|---|---|---|---|---|
|
||
| KIBRIS AMERİKAN ÜNİVERSİTESİ (+ `(KKTC-LEFKOŞA)` yazımı) | `DEVLET` | `KKTC` | 42 | 12 |
|
||
| ULUSLARARASI BALKAN ÜNİVERSİTESİ (parantezsiz yazım) | `DEVLET` | `YURTDISI KAMU` | 34 | 4 |
|
||
| ULUSLARARASI SARAYBOSNA ÜNİVERSİTESİ (parantezsiz yazım) | `DEVLET` | `YURTDISI KAMU` | 24 | 11 |
|
||
| **Toplam** | | | **100** | **27** |
|
||
|
||
Ayrıca **26 satırda** `ULUSLARARASI BALKAN ÜNİVERSİTESİ`nin ili `SARAYBOSNA - BOSNA - HERSEK` (üniversite Üsküp'te; aynı kurumun `(ÜSKÜP-MAKEDONYA)` yazımı bunu doğruluyor).
|
||
|
||
### 6.2 Kök neden
|
||
|
||
Hata **`unitur-onar.ts`'te değil**. O betik yalnız `unitur IS NULL` satırlara dokunuyor (dosya başlığı ve A/B/C aşamaları); bu satırlar NULL değil, dolu ve yanlış.
|
||
|
||
Hata **2026 tazelemesinde de doğmadı**. `scripts/refresh.ts:519` `uniturSec`, tahmin etmemek için DB'de o ad altında **tek** bir `unitur` varsa onu yeniden kullanıyor — yani var olan değeri sadakatle kopyalıyor.
|
||
|
||
Kanıt, yıl kapsamında: parantezsiz (yanlış `DEVLET`) satırların **2021-2024 verisi var**, parantezli (doğru `YURTDISI KAMU`) satırların yok.
|
||
|
||
```sql
|
||
sqlite3 -readonly data/yokatlas.db "
|
||
SELECT universite, unitur, COUNT(*) n,
|
||
SUM(sira2021 IS NOT NULL) y21, SUM(sira2025 IS NOT NULL) y25
|
||
FROM programs WHERE universite LIKE '%BALKAN%' GROUP BY 1,2;"
|
||
-- ULUSLARARASI BALKAN ÜNİVERSİTESİ | DEVLET | 34 | 2 | 4
|
||
-- ULUSLARARASI BALKAN ÜNİVERSİTESİ (ÜSKÜP-MAKEDONYA) | YURTDISI KAMU | 14 | 0 | 2
|
||
```
|
||
|
||
`refresh.ts` yalnız 2025/2026 kolonlarını yazar; 2021-2024 değerleri **yalnızca ilk CSV ingest'inden** gelebilir. Dolayısıyla `DEVLET` etiketi **`scripts/ingest.ts:159`'un CSV'den okuduğu `unitur` kolonundan** geliyor; kaynak CSV (`data/ham/`, `.gitignore`'da, repoda yok) bu üç kurumu `DEVLET` yazmış. *(CSV elde olmadığı için bu, yıl kapsamına dayanan çıkarımdır; doğrulaması Bilal'in elindeki ham CSV'de tek `grep`.)*
|
||
|
||
**Neden hiçbir kontrol yakalamadı:** `unitur-onar.ts`'in çelişki koruması `GROUP BY universite`, yani **tam ad** üzerinden çalışıyor. Aynı kurumun iki yazımı iki ayrı satır sayıldığı için `DEVLET` ile `YURTDISI KAMU` çelişkisi hiç görünmüyor. Baz ad (sondaki parantez atılmış hâl) üzerinden bakınca çelişki anında çıkıyor — bugün **4 kurum**: Uluslararası Balkan, Uluslararası Saraybosna (DEVLET↔YURTDISI KAMU) ve Manas, Hoca Ahmet Yesevi (YURTDISI KAMU↔YURTDISI VAKIF — bu ikisi kozmetik, kurum gerçekten ortak).
|
||
|
||
### 6.3 URAP'la çapraz doğrulama (bonus)
|
||
|
||
URAP'ın 125 devlet + 73 vakıf ayrımı bizim `unitur`'umuzla karşılaştırıldı: **198 üniversitenin 198'inde uyumlu, 0 çelişki.** Yani devlet/vakıf etiketimiz Türkiye üniversiteleri için sağlam; sorun yalnızca URAP'ın kapsamadığı KKTC/yurt dışı kurumlarda. Bu çapraz kontrol her yıl URAP tazelemesiyle birlikte bedavaya koşturulabilir.
|
||
|
||
### 6.4 Kullanıcıya yansıyan etki
|
||
|
||
| Yüzey | Ne yanlış görünüyor |
|
||
|---|---|
|
||
| `/universiteler` hub'ı (`src/features/katalog/components/universite-listesi.tsx:45`) | Üç KKTC/yurt dışı kurum **"Devlet üniversiteleri"** listesinde |
|
||
| `/universite/<slug>` | "Tür: Devlet" · Uluslararası Balkan için ülke/şehir Saraybosna (Bosna), üniversite Üsküp'te |
|
||
| Sihirbaz → "Devlet üniversitesi istiyorum" (`src/lib/db.ts:79`, `AND unitur = 'DEVLET'`) | Aday havuzuna **27 program** sızıyor; öğrenci "devlet" dediği hâlde KKTC/Bosna vakıf-benzeri kurum önerilebiliyor |
|
||
| Sihirbaz → "Vakıf" (`src/lib/db.ts:81`, `unitur <> 'DEVLET'`) | Aynı 27 program **eksik** kalıyor |
|
||
| Tadımlık satırı (`src/features/rapor/components/tadimlik-satiri.tsx:37`) | Aynı semantik, aynı sızıntı |
|
||
|
||
### 6.5 Düzeltmenin büyüklüğü
|
||
|
||
- **Veri:** 100 satır `unitur` + 26 satır `il` = **126 satır** `data/yokatlas.db` içinde. (Ayrıca `il` boş olan 19 satır isteğe bağlı doldurulabilir — kapsam dışı bırakılması önerilir.)
|
||
- **Kod:** `scripts/unitur-onar.ts`'e, NULL koşulu olmadan çalışan küçük bir `KURUM_DUZELT` haritası (~20 satır) + `scripts/veri-kalite.ts`'e "baz ad başına tek `unitur`" kontrolü (~8 satır). Toplam **~30 satır.**
|
||
- Düzeltme bu yolla kalıcıdır: `refresh.ts:519` bundan sonra DB'deki doğru değeri kopyalar.
|
||
- Düzeltme `data/yokatlas.db`'yi (git'te izlenen binary) değiştirir → betiğin koşulması ve commit'i **[BİLAL]**. Süre: betik ~1 sn, doğrulama `pnpm veri-kalite` ~10 sn.
|
||
|
||
## Bilal'den istenen
|
||
|
||
1. **Karar:** URAP'ın tek sayısını üniversite sayfasına koyalım mı — veriyi bizde tutup her yüzeyde aktif link + "2025-2026 · 198 üniversite arasında" cümlesiyle? (~3 saatlik iş; kararın kendisi ~2 dk)
|
||
2. **URAP'a tek cümle:** "Verdiğiniz adres 2025-2026 yılına ait görünüyor; yeni sıralama yayımlandığında linki ve veriyi biz güncelleyeceğiz, uygun mudur?" — beklentiyi baştan hizalar (~5 dk). Ayrıca izin e-postasını `docs/` altına koy (kanıt).
|
||
3. **Onay:** BACKLOG #9 düzeltmesi hazırlansın mı — 3 kurumda 126 satır (`unitur` + `il`), ~30 satır kod, sonra `data/yokatlas.db` commit'i? (~2 dk karar, uygulaması ayrı dalda ~1 saat)
|