From 68cb69e458163685ed57b0fd03d909df2c085d33 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Wed, 23 Sep 2026 00:21:20 +0300 Subject: [PATCH 1/5] =?UTF-8?q?feat(universite):=20URAP=20T=C3=BCrkiye=202?= =?UTF-8?q?025-2026=20s=C4=B1ralamas=C4=B1=20veri=20sabiti?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 198 üniversitenin genel sıralaması, /universite/[slug] sayfa slug'ına anahtarlanmış tek seferlik sabit (uni-koordinatlar.ts deseni). Yeni DB dosyası, tablo, göç, cron ya da çekme betiği yok: 198 satır × 2 alan için SQLite'ın hiçbir faydası olmazdı. Eşleşme 198/198; URAP'ın yazımı bizim DB yazımımızla birebir aynı, takma ad tablosu gerekmedi. Sıralar 1..198 kesintisiz ve tekrarsız, puanlar sıraya göre azalan (veri-kalite kontrolleriyle doğrulanıyor). URAP'ın yayımlama izni "urapcenter.org adresine aktif bağlantı/atıf vermek" şartına bağlıdır: URAP sayısının göründüğü her yüzeyde, aynı ekranda, URAP_KAYNAK_URL'ye çıkan gerçek bir (rel="noopener", yeni sekme, nofollow YOK) bulunmak zorundadır. Link konulamayan bir yüzeyde (ör. OG görseli) URAP sayısı hiç gösterilmez. Şart dosyanın başındaki yorumda da yazılıdır. Co-Authored-By: Claude Opus 5 --- src/lib/urap-siralama.ts | 242 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 242 insertions(+) create mode 100644 src/lib/urap-siralama.ts diff --git a/src/lib/urap-siralama.ts b/src/lib/urap-siralama.ts new file mode 100644 index 0000000..eb301de --- /dev/null +++ b/src/lib/urap-siralama.ts @@ -0,0 +1,242 @@ +// URAP (University Ranking by Academic Performance) Türkiye genel sıralaması. +// +// Kaynak: URAP Araştırma Laboratuvarı, 2025-2026 genel sıralaması +// (URAP_KAYNAK_URL). Veri, URAP'ın yazılı izniyle yayımlanıyor; izin +// "urapcenter.org adresine aktif bağlantı/atıf vermek" şartına bağlı. +// Bu yüzden URAP sayısının göründüğü HER yüzeyde, aynı ekranda, +// URAP_KAYNAK_URL'ye çıkan gerçek bir bulunmak zorunda +// (rel="noopener", yeni sekme, nofollow YOK). Link konulamayan bir +// yüzeyde (ör. OG görseli) URAP sayısı hiç gösterilmez. +// +// Anahtar biçimi: /universite/[slug] sayfa slug'ı (slug.ts → uniSayfaSlug). +// URAP 198 üniversitenin 198'inde bizim yazımımızla birebir eşleşiyor; +// takma ad tablosu yok. Burada olmayan üniversite URAP listesinde yoktur — +// "kötü" demek değildir (KKTC/yurt dışı kurumlar, yalnız MYO'su olanlar ve +// araştırma çıktısı henüz oluşmamış yeni üniversiteler listeye girmiyor). +// +// Yıllık tazeleme: URAP sıralamayı her Ekim yeni bir adreste yayımlıyor; +// veri ve URAP_KAYNAK_URL aynı commit'te birlikte güncellenir. Denetimi +// `pnpm veri-kalite` içindeki URAP kontrolleri yapar. + +/** Sıralamanın dönemi. Ölçtüğü veri dönemi 2020-2024'tür (URAP Yöntem sayfası). */ +export const URAP_DONEM = "2025-2026"; + +/** Sıralamadaki toplam üniversite sayısı — payda. Sıra tek başına gösterilmez. */ +export const URAP_TOPLAM = 198; + +/** Atıf şartının adresi: sıralamanın o yıla ait kendi sayfası. */ +export const URAP_KAYNAK_URL = + "https://newtr.urapcenter.org/Rankings/2025-2026/GENEL-SIRALAMASI-2025"; + +export type UrapSira = { + /** Türkiye genel sıralamasındaki sıra (1..URAP_TOPLAM) */ + sira: number; + /** URAP toplam puanı — sayfada gösterilmez, veri kalitesi kontrolü kullanır */ + puan: number; +}; + +export const URAP_SIRA: Record = { + "koc-universitesi": { sira: 1, puan: 1152.91 }, + "hacettepe-universitesi": { sira: 2, puan: 1096.48 }, + "orta-dogu-teknik-universitesi": { sira: 3, puan: 1082.81 }, + "istanbul-teknik-universitesi": { sira: 4, puan: 1067.01 }, + "ankara-universitesi": { sira: 5, puan: 1038.45 }, + "gazi-universitesi": { sira: 6, puan: 1006.92 }, + "ege-universitesi": { sira: 7, puan: 1003.87 }, + "istanbul-universitesi-cerrahpasa": { sira: 8, puan: 998.17 }, + "istanbul-universitesi": { sira: 9, puan: 994.98 }, + "sabanci-universitesi": { sira: 10, puan: 992.03 }, + "yildiz-teknik-universitesi": { sira: 11, puan: 962.25 }, + "gebze-teknik-universitesi": { sira: 12, puan: 933.23 }, + "ataturk-universitesi": { sira: 13, puan: 932.94 }, + "erciyes-universitesi": { sira: 14, puan: 931.72 }, + "marmara-universitesi": { sira: 15, puan: 929.21 }, + "ihsan-dogramaci-bilkent-universitesi": { sira: 16, puan: 903.76 }, + "firat-universitesi": { sira: 17, puan: 885.66 }, + "bogazici-universitesi": { sira: 18, puan: 881.20 }, + "dokuz-eylul-universitesi": { sira: 19, puan: 869.21 }, + "karadeniz-teknik-universitesi": { sira: 20, puan: 866.97 }, + "akdeniz-universitesi": { sira: 21, puan: 862.50 }, + "izmir-yuksek-teknoloji-enstitusu": { sira: 22, puan: 862.37 }, + "acibadem-mehmet-ali-aydinlar-universitesi": { sira: 23, puan: 852.95 }, + "cukurova-universitesi": { sira: 24, puan: 851.47 }, + "bezm-i-alem-vakif-universitesi": { sira: 25, puan: 841.14 }, + "selcuk-universitesi": { sira: 26, puan: 840.50 }, + "saglik-bilimleri-universitesi": { sira: 27, puan: 837.93 }, + "sakarya-universitesi": { sira: 28, puan: 836.46 }, + "ondokuz-mayis-universitesi": { sira: 29, puan: 829.78 }, + "bursa-uludag-universitesi": { sira: 30, puan: 828.79 }, + "istinye-universitesi": { sira: 31, puan: 824.40 }, + "eskisehir-osmangazi-universitesi": { sira: 32, puan: 808.86 }, + "kocaeli-universitesi": { sira: 33, puan: 787.14 }, + "necmettin-erbakan-universitesi": { sira: 34, puan: 775.91 }, + "inonu-universitesi": { sira: 35, puan: 774.31 }, + "ankara-yildirim-beyazit-universitesi": { sira: 36, puan: 769.99 }, + "izmir-katip-celebi-universitesi": { sira: 37, puan: 763.47 }, + "istanbul-medeniyet-universitesi": { sira: 38, puan: 761.73 }, + "recep-tayyip-erdogan-universitesi": { sira: 39, puan: 755.54 }, + "kadir-has-universitesi": { sira: 40, puan: 748.99 }, + "istanbul-medipol-universitesi": { sira: 41, puan: 747.95 }, + "suleyman-demirel-universitesi": { sira: 42, puan: 739.79 }, + "mersin-universitesi": { sira: 43, puan: 736.04 }, + "eskisehir-teknik-universitesi": { sira: 44, puan: 734.81 }, + "harran-universitesi": { sira: 45, puan: 732.49 }, + "konya-teknik-universitesi": { sira: 46, puan: 731.10 }, + "van-yuzuncu-yil-universitesi": { sira: 47, puan: 728.49 }, + "bahcesehir-universitesi": { sira: 48, puan: 722.03 }, + "gaziantep-universitesi": { sira: 49, puan: 720.53 }, + "yeditepe-universitesi": { sira: 50, puan: 720.51 }, + "duzce-universitesi": { sira: 51, puan: 711.46 }, + "canakkale-onsekiz-mart-universitesi": { sira: 52, puan: 711.34 }, + "baskent-universitesi": { sira: 53, puan: 709.49 }, + "sivas-cumhuriyet-universitesi": { sira: 54, puan: 708.36 }, + "mugla-sitki-kocman-universitesi": { sira: 55, puan: 700.99 }, + "abdullah-gul-universitesi": { sira: 56, puan: 698.46 }, + "karabuk-universitesi": { sira: 57, puan: 695.29 }, + "isparta-uygulamali-bilimler-universitesi": { sira: 58, puan: 692.14 }, + "bingol-universitesi": { sira: 59, puan: 690.31 }, + "bartin-universitesi": { sira: 60, puan: 690.02 }, + "nigde-omer-halisdemir-universitesi": { sira: 61, puan: 686.24 }, + "biruni-universitesi": { sira: 62, puan: 686.04 }, + "bolu-abant-izzet-baysal-universitesi": { sira: 63, puan: 682.56 }, + "manisa-celal-bayar-universitesi": { sira: 64, puan: 681.21 }, + "ozyegin-universitesi": { sira: 65, puan: 674.94 }, + "kastamonu-universitesi": { sira: 66, puan: 674.08 }, + "erzurum-teknik-universitesi": { sira: 67, puan: 672.03 }, + "aydin-adnan-menderes-universitesi": { sira: 68, puan: 671.78 }, + "tarsus-universitesi": { sira: 69, puan: 669.45 }, + "pamukkale-universitesi": { sira: 70, puan: 669.23 }, + "tobb-ekonomi-ve-teknoloji-universitesi": { sira: 71, puan: 660.20 }, + "anadolu-universitesi": { sira: 72, puan: 656.74 }, + "bursa-teknik-universitesi": { sira: 73, puan: 647.49 }, + "adana-alparslan-turkes-bilim-ve-teknoloji-universitesi": { sira: 74, puan: 646.96 }, + "kahramanmaras-sutcu-imam-universitesi": { sira: 75, puan: 646.28 }, + "cankaya-universitesi": { sira: 76, puan: 639.31 }, + "siirt-universitesi": { sira: 77, puan: 631.70 }, + "karamanoglu-mehmetbey-universitesi": { sira: 78, puan: 628.87 }, + "zonguldak-bulent-ecevit-universitesi": { sira: 79, puan: 628.13 }, + "tekirdag-namik-kemal-universitesi": { sira: 80, puan: 626.48 }, + "atilim-universitesi": { sira: 81, puan: 625.01 }, + "aksaray-universitesi": { sira: 82, puan: 624.78 }, + "bilecik-seyh-edebali-universitesi": { sira: 83, puan: 624.59 }, + "hatay-mustafa-kemal-universitesi": { sira: 84, puan: 621.04 }, + "hitit-universitesi": { sira: 85, puan: 620.88 }, + "cankiri-karatekin-universitesi": { sira: 86, puan: 619.86 }, + "hasan-kalyoncu-universitesi": { sira: 87, puan: 618.15 }, + "yozgat-bozok-universitesi": { sira: 88, puan: 611.80 }, + "kirikkale-universitesi": { sira: 89, puan: 608.75 }, + "erzincan-binali-yildirim-universitesi": { sira: 90, puan: 602.70 }, + "trakya-universitesi": { sira: 91, puan: 601.88 }, + "tokat-gaziosmanpasa-universitesi": { sira: 92, puan: 595.80 }, + "iskenderun-teknik-universitesi": { sira: 93, puan: 594.68 }, + "dicle-universitesi": { sira: 94, puan: 594.60 }, + "burdur-mehmet-akif-ersoy-universitesi": { sira: 95, puan: 593.54 }, + "izmir-ekonomi-universitesi": { sira: 96, puan: 592.96 }, + "afyon-kocatepe-universitesi": { sira: 97, puan: 592.85 }, + "usak-universitesi": { sira: 98, puan: 589.80 }, + "ordu-universitesi": { sira: 99, puan: 582.94 }, + "igdir-universitesi": { sira: 100, puan: 577.55 }, + "sakarya-uygulamali-bilimler-universitesi": { sira: 101, puan: 565.68 }, + "yasar-universitesi": { sira: 102, puan: 561.18 }, + "osmaniye-korkut-ata-universitesi": { sira: 103, puan: 558.18 }, + "altinbas-universitesi": { sira: 104, puan: 556.66 }, + "balikesir-universitesi": { sira: 105, puan: 550.12 }, + "adiyaman-universitesi": { sira: 106, puan: 546.48 }, + "munzur-universitesi": { sira: 107, puan: 545.61 }, + "istanbul-ticaret-universitesi": { sira: 108, puan: 544.68 }, + "malatya-turgut-ozal-universitesi": { sira: 109, puan: 542.65 }, + "kirsehir-ahi-evran-universitesi": { sira: 110, puan: 541.62 }, + "batman-universitesi": { sira: 111, puan: 530.02 }, + "istanbul-okan-universitesi": { sira: 112, puan: 527.88 }, + "kafkas-universitesi": { sira: 113, puan: 527.04 }, + "bayburt-universitesi": { sira: 114, puan: 525.89 }, + "bandirma-onyedi-eylul-universitesi": { sira: 115, puan: 524.68 }, + "giresun-universitesi": { sira: 116, puan: 520.78 }, + "samsun-universitesi": { sira: 117, puan: 516.24 }, + "alanya-alaaddin-keykubat-universitesi": { sira: 118, puan: 512.85 }, + "konya-gida-ve-tarim-universitesi": { sira: 119, puan: 512.57 }, + "nevsehir-haci-bektas-veli-universitesi": { sira: 120, puan: 509.45 }, + "sinop-universitesi": { sira: 121, puan: 509.24 }, + "gumushane-universitesi": { sira: 122, puan: 507.79 }, + "izmir-bakircay-universitesi": { sira: 123, puan: 504.13 }, + "antalya-bilim-universitesi": { sira: 124, puan: 503.18 }, + "ibn-haldun-universitesi": { sira: 125, puan: 501.66 }, + "artvin-coruh-universitesi": { sira: 126, puan: 498.79 }, + "istanbul-sabahattin-zaim-universitesi": { sira: 127, puan: 497.58 }, + "ted-universitesi": { sira: 128, puan: 496.02 }, + "agri-ibrahim-cecen-universitesi": { sira: 129, puan: 493.56 }, + "lokman-hekim-universitesi": { sira: 130, puan: 492.28 }, + "istanbul-aydin-universitesi": { sira: 131, puan: 489.10 }, + "amasya-universitesi": { sira: 132, puan: 486.73 }, + "kutahya-saglik-bilimleri-universitesi": { sira: 133, puan: 486.66 }, + "istanbul-nisantasi-universitesi": { sira: 134, puan: 479.20 }, + "kayseri-universitesi": { sira: 135, puan: 478.40 }, + "galatasaray-universitesi": { sira: 136, puan: 476.49 }, + "istanbul-bilgi-universitesi": { sira: 137, puan: 476.16 }, + "istanbul-gelisim-universitesi": { sira: 138, puan: 475.63 }, + "uskudar-universitesi": { sira: 139, puan: 472.03 }, + "turk-alman-universitesi": { sira: 140, puan: 471.87 }, + "yalova-universitesi": { sira: 141, puan: 464.53 }, + "kutahya-dumlupinar-universitesi": { sira: 142, puan: 462.86 }, + "istanbul-arel-universitesi": { sira: 143, puan: 459.52 }, + "piri-reis-universitesi": { sira: 144, puan: 451.88 }, + "afyonkarahisar-saglik-bilimleri-universitesi": { sira: 145, puan: 448.30 }, + "izmir-demokrasi-universitesi": { sira: 146, puan: 447.60 }, + "kto-karatay-universitesi": { sira: 147, puan: 440.94 }, + "mus-alparslan-universitesi": { sira: 148, puan: 439.94 }, + "maltepe-universitesi": { sira: 149, puan: 431.24 }, + "ardahan-universitesi": { sira: 150, puan: 422.37 }, + "kirklareli-universitesi": { sira: 151, puan: 421.10 }, + "bitlis-eren-universitesi": { sira: 152, puan: 414.54 }, + "demiroglu-bilim-universitesi": { sira: 153, puan: 407.06 }, + "ankara-haci-bayram-veli-universitesi": { sira: 154, puan: 404.20 }, + "turk-hava-kurumu-universitesi": { sira: 155, puan: 398.48 }, + "fatih-sultan-mehmet-vakif-universitesi": { sira: 156, puan: 392.99 }, + "dogus-universitesi": { sira: 157, puan: 388.75 }, + "sirnak-universitesi": { sira: 158, puan: 377.20 }, + "trabzon-universitesi": { sira: 159, puan: 376.52 }, + "halic-universitesi": { sira: 160, puan: 375.33 }, + "mef-universitesi": { sira: 161, puan: 373.15 }, + "gaziantep-islam-bilim-ve-teknoloji-universitesi": { sira: 162, puan: 367.89 }, + "ostim-teknik-universitesi": { sira: 163, puan: 363.20 }, + "sanko-universitesi": { sira: 164, puan: 361.18 }, + "isik-universitesi": { sira: 165, puan: 360.25 }, + "istanbul-beykent-universitesi": { sira: 166, puan: 360.02 }, + "mardin-artuklu-universitesi": { sira: 167, puan: 358.73 }, + "ankara-medipol-universitesi": { sira: 168, puan: 349.71 }, + "hakkari-universitesi": { sira: 169, puan: 348.80 }, + "ufuk-universitesi": { sira: 170, puan: 344.76 }, + "kilis-7-aralik-universitesi": { sira: 171, puan: 342.59 }, + "kahramanmaras-istiklal-universitesi": { sira: 172, puan: 340.49 }, + "istanbul-gedik-universitesi": { sira: 173, puan: 337.25 }, + "ankara-sosyal-bilimler-universitesi": { sira: 174, puan: 333.58 }, + "istanbul-kultur-universitesi": { sira: 175, puan: 330.47 }, + "yuksek-ihtisas-universitesi": { sira: 176, puan: 318.38 }, + "cag-universitesi": { sira: 177, puan: 318.17 }, + "mimar-sinan-guzel-sanatlar-universitesi": { sira: 178, puan: 315.16 }, + "istanbul-yeni-yuzyil-universitesi": { sira: 179, puan: 298.64 }, + "istanbul-saglik-ve-teknoloji-universitesi": { sira: 180, puan: 297.39 }, + "nuh-naci-yazgan-universitesi": { sira: 181, puan: 269.70 }, + "istanbul-atlas-universitesi": { sira: 182, puan: 248.03 }, + "fenerbahce-universitesi": { sira: 183, puan: 243.09 }, + "toros-universitesi": { sira: 184, puan: 241.33 }, + "kapadokya-universitesi": { sira: 185, puan: 237.16 }, + "izmir-tinaztepe-universitesi": { sira: 186, puan: 235.88 }, + "istanbul-kent-universitesi": { sira: 187, puan: 231.72 }, + "istanbul-rumeli-universitesi": { sira: 188, puan: 179.54 }, + "avrasya-universitesi": { sira: 189, puan: 178.53 }, + "alanya-universitesi": { sira: 190, puan: 176.69 }, + "istanbul-topkapi-universitesi": { sira: 191, puan: 171.16 }, + "istanbul-29-mayis-universitesi": { sira: 192, puan: 170.22 }, + "ankara-bilim-universitesi": { sira: 193, puan: 154.45 }, + "kocaeli-saglik-ve-teknoloji-universitesi": { sira: 194, puan: 116.23 }, + "istanbul-galata-universitesi": { sira: 195, puan: 114.92 }, + "istanbul-esenyurt-universitesi": { sira: 196, puan: 97.81 }, + "beykoz-universitesi": { sira: 197, puan: 83.48 }, + "antalya-belek-universitesi": { sira: 198, puan: 70.82 }, +}; + +/** Üniversite sayfa slug'ının URAP sırası; listede yoksa null. */ +export function urapSirasiBul(slug: string): UrapSira | null { + return URAP_SIRA[slug] ?? null; +} From 493267122fe9f15ff30b5cbb00ea214914d043c1 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Wed, 23 Sep 2026 00:21:36 +0300 Subject: [PATCH 2/5] =?UTF-8?q?feat(universite):=20"T=C3=BCr"=20kart=C4=B1?= =?UTF-8?q?n=C4=B1n=20yerine=20URAP=20T=C3=BCrkiye=20s=C4=B1ras=C4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit /universite/[slug] metrik ızgarasında takas: URAP listesinde olan üniversitede "Tür" kartının yerini "URAP TÜRKİYE · 18 / 198 · 2025-2026" alır, olmayan 31 kurumda "Tür" yerinde kalır. Kart sayısı 4'te kalıyor, lg ızgara şablonu değişmiyor, yeni bileşen yok, hiçbir sayfada "—" ya da delik yok. Payda kartın içinde: "18." tek başına yanıltır. Tablonun altına AYRI ikinci kaynak satırı eklendi; VeriKaynagi kullanılmadı ve kopyalanmadı, çünkü o satır YÖK Atlas'ın yerleştirme yılına ve son güncelleme tarihine bağlı — URAP'ın dönemi başka. Satırda metodoloji uyarısı da var: URAP akademik yayın ve araştırma performansını ölçer, eğitim kalitesini ya da iş bulma oranını ölçmez. URAP listesinde olmayan üniversitede eksiklik gizlenmiyor, nedeni tek cümleyle yazılıyor (KKTC/yurt dışı ile MYO/yeni için ayrı cümle). URAP'ın yayımlama izni "urapcenter.org adresine aktif bağlantı/atıf vermek" şartına bağlıdır. Kaynak satırındaki bağlantı bu yüzden gerçek bir : adres URAP_KAYNAK_URL sabitinden, target="_blank", rel="noopener", nofollow YOK. Sıranın göründüğü ekran ile atıfın göründüğü ekran aynı sayfadır; URAP sayısı yalnız ilk sayfada gösterildiği için kaynak satırı da yalnız ilk sayfada çiziliyor. Renk yok, rozet yok; URAP risk dili değildir. /universiteler hub'ında URAP'a göre sıralama/filtre eklenmedi. URAP 24'lük listeye, /sonuc tablosuna ve LLM prompt'una girmiyor — dokunulan dosya kümesi bunu zaten dışlıyor. veri-kalite.ts'e 5 URAP kontrolü (dosyanın en sonunda, tek satırlık çağrıyla): (1) her URAP slug'ı bir üniversite sayfasına bağlı — eşleşmeyen sessizce düşmüyor, adıyla listeleniyor; (2) kayıt sayısı = URAP_TOPLAM; (3) sıralar 1..N tekrarsız ve boşluksuz; (4) puanlar sıraya göre azalan; (5) kapsama boşluğu — URAP dışında kalan 150+ programlı bir Türkiye üniversitesi varsa UYARI (ad değişikliği işareti). Beşi de geçiyor, boşluk 31 kurum. Co-Authored-By: Claude Opus 5 --- scripts/veri-kalite.ts | 89 +++++++++++++++++++ .../katalog/components/universite-icerik.tsx | 89 ++++++++++++++++--- src/lib/katalog.ts | 7 ++ 3 files changed, 175 insertions(+), 10 deletions(-) diff --git a/scripts/veri-kalite.ts b/scripts/veri-kalite.ts index 862e848..67a62fe 100644 --- a/scripts/veri-kalite.ts +++ b/scripts/veri-kalite.ts @@ -33,6 +33,10 @@ import { tabloVar, yilArgumani, } from "./yokatlas-goc"; +// URAP kontrolleri (dosya sonundaki urapKontrolleri) — salt okunur sabit. +import type { Db } from "./yokatlas-goc"; +import { uniSayfaSlug } from "../src/lib/slug"; +import { URAP_DONEM, URAP_SIRA, URAP_TOPLAM } from "../src/lib/urap-siralama"; const TURLER = ["SAYISAL", "EŞİT AĞIRLIK", "SÖZEL", "DİL", "TYT"]; @@ -291,9 +295,94 @@ async function main() { console.log(` şimdi, tüm satırlar (yeni dahil) : ${toplamlar(simdi)}`); } + urapKontrolleri(db, zorunlu, bilgi); + db.close(); console.log(`\nSonuç: ${basarisiz} ZORUNLU kontrol kaldı, ${uyari} uyarı.`); if (basarisiz > 0) process.exit(1); } if (process.argv[1]?.endsWith("veri-kalite.ts")) calistir(main); + +/** + * URAP Türkiye sıralaması sabiti (`src/lib/urap-siralama.ts`) denetimi. + * Amaç: yıllık tazelemede eşleşmeyen bir URAP satırı SESSİZCE DÜŞMESİN — + * düşerse üniversitenin adı değişmiş demektir ve o sayfada sıra kaybolur. + * DB'ye yazmaz; sabit ile DB'deki üniversite slug'larını karşılaştırır. + */ +function urapKontrolleri( + db: Db, + zorunlu: (ad: string, tamam: boolean, detay: string) => void, + bilgi: (ad: string, sorunlu: boolean, detay: string) => void +) { + const kayitlar = Object.entries(URAP_SIRA); + + // (1) Sabitteki her slug DB'de karşılık bulmalı — bulamayan = ad değişikliği. + const dbToplam = new Map(); + const satirlar = db + .prepare("SELECT universite, unitur, COUNT(*) AS n FROM programs GROUP BY 1, 2") + .all() as { universite: string; unitur: string | null; n: number }[]; + for (const r of satirlar) { + const slug = uniSayfaSlug(r.universite); + if (!slug) continue; + const kayit = dbToplam.get(slug) ?? { unitur: null, program: 0 }; + kayit.program += r.n; + if (!kayit.unitur && r.unitur) kayit.unitur = r.unitur; + dbToplam.set(slug, kayit); + } + const karsiliksiz = kayitlar.filter(([slug]) => !dbToplam.has(slug)); + zorunlu( + "URAP: her sıra bir üniversite sayfasına bağlı", + karsiliksiz.length === 0, + karsiliksiz.length === 0 + ? `${kayitlar.length} slug'ın tamamı DB'de var` + : `DB'de karşılığı olmayan (ad değişmiş olabilir): ${karsiliksiz.map(([slug, v]) => `${slug}(#${v.sira})`).join(", ")}` + ); + + // (2) Kayıt sayısı payda ile aynı olmalı — payda kartta gösteriliyor. + zorunlu( + "URAP: kayıt sayısı = URAP_TOPLAM", + kayitlar.length === URAP_TOPLAM, + `kayıt ${kayitlar.length}, URAP_TOPLAM ${URAP_TOPLAM} (dönem ${URAP_DONEM})` + ); + + // (3) Sıralar 1..URAP_TOPLAM; tekrarsız ve boşluksuz. + const siralar = kayitlar.map(([, v]) => v.sira).sort((a, b) => a - b); + const bozukSira = siralar.findIndex((s, i) => s !== i + 1); + zorunlu( + "URAP: sıralar 1..N tekrarsız ve boşluksuz", + bozukSira === -1 && siralar.length === URAP_TOPLAM, + bozukSira === -1 + ? `1..${siralar.length} kesintisiz` + : `${bozukSira + 1}. sırada beklenen ${bozukSira + 1}, gelen ${siralar[bozukSira]}` + ); + + // (4) Puan sıraya göre azalmalı — sıra 1 en yüksek puan. + const sirali = [...kayitlar].sort((a, b) => a[1].sira - b[1].sira); + const bozukPuan = sirali.findIndex( + (k, i) => i > 0 && sirali[i - 1][1].puan < k[1].puan + ); + zorunlu( + "URAP: puanlar sıraya göre azalan", + bozukPuan === -1, + bozukPuan === -1 + ? `${sirali[0][1].puan} → ${sirali[sirali.length - 1][1].puan}` + : `#${sirali[bozukPuan][1].sira} (${sirali[bozukPuan][0]}) puanı bir önceki sıradan yüksek` + ); + + // (5) Kapsama boşluğu: URAP yalnız Türkiye'yi sıralar, KKTC/yurt dışı ve + // yalnız MYO'su olan kurumlar listede olmaz — bu normaldir. Ama büyük bir + // Türkiye üniversitesinin düşmesi neredeyse her zaman ad değişikliğidir. + const disarida = [...dbToplam.entries()].filter(([slug]) => !(slug in URAP_SIRA)); + const turkiyeBuyuk = disarida.filter( + ([, v]) => + (v.unitur === "DEVLET" || v.unitur === "VAKIF") && v.program >= 150 + ); + bilgi( + "URAP: kapsama boşluğu", + turkiyeBuyuk.length > 0, + turkiyeBuyuk.length === 0 + ? `URAP dışında ${disarida.length} kurum (KKTC/yurt dışı, MYO ve yeni üniversiteler); 150+ programlı Türkiye üniversitesi yok` + : `URAP dışında kalan 150+ programlı Türkiye üniversitesi (ad değişmiş olabilir): ${turkiyeBuyuk.map(([slug, v]) => `${slug}(${v.program})`).join(", ")}` + ); +} diff --git a/src/features/katalog/components/universite-icerik.tsx b/src/features/katalog/components/universite-icerik.tsx index 3769ae6..623bd1d 100644 --- a/src/features/katalog/components/universite-icerik.tsx +++ b/src/features/katalog/components/universite-icerik.tsx @@ -30,6 +30,11 @@ import { UniversiteKonumHaritasi } from "./universite-konum-haritasi"; import { uniUlkeKonum } from "@/lib/harita-ulkeler"; import { UniversiteProgramTablosu } from "./universite-program-tablosu"; import { VeriKaynagi } from "./veri-kaynagi"; +import { + URAP_DONEM, + URAP_KAYNAK_URL, + URAP_TOPLAM, +} from "@/lib/urap-siralama"; import { UniLogo } from "@/components/uni-logo"; import { uniLogoYolu } from "@/lib/uni-logolar"; import { Skeleton } from "@/components/ui/skeleton"; @@ -109,6 +114,48 @@ function fakulteOzeti({ return `${adlar[0]}, ${adlar[1]} ve ${adlar.length - 2} birim daha`; } +/** + * Tablonun altındaki AYRI ikinci kaynak satırı. `VeriKaynagi` kullanılmaz ve + * kopyalanmaz: o satır YÖK Atlas'ın yerleştirme yılına ve son güncelleme + * tarihine bağlı, URAP'ın dönemi başka — aynı satırda birleşirlerse URAP + * verisi YÖK Atlas tarihiyle sunulmuş olur. + * + * Atıf pazarlık dışı: URAP'ın izni "urapcenter.org adresine aktif bağlantı" + * şartına bağlı, o yüzden gerçek , yeni sekme, rel="noopener" ve + * nofollow YOK. Sıra payda ("198 üniversite arasında") ve dönem olmadan + * gösterilmez. URAP listesinde olmayan üniversitede sayı yoktur; eksiklik + * gizlenmez, nedeni tek cümleyle yazılır. + */ +function UrapKaynakSatiri({ uni }: { uni: UniDetay }) { + if (!uni.urap) { + const yurtDisi = + uni.unitur === "KKTC" || uni.unitur?.startsWith("YURTDISI"); + return ( +

+ {yurtDisi + ? "Bu üniversite URAP Türkiye sıralamasında yer almıyor — URAP yalnız Türkiye'deki üniversiteleri sıralıyor." + : `Bu üniversite URAP Türkiye Sıralaması ${URAP_DONEM} listesinde yer almıyor.`} +

+ ); + } + return ( +

+ URAP Türkiye Sıralaması {URAP_DONEM} ({sayi(URAP_TOPLAM)} üniversite + arasında) — akademik yayın ve araştırma performansını ölçer; eğitim + kalitesini ya da iş bulma oranını ölçmez. Kaynak:{" "} + + urapcenter.org + + . +

+ ); +} + export function uniSayfaMetadata(slug: string, sayfa: number): Metadata { const uni = getUniversiteBySlug(slug); if (!uni) return {}; @@ -308,17 +355,37 @@ export function UniversiteIcerik({ {sayi(uni.fakulteSayisi)} + {/* URAP'ta olan üniversitede "Tür" kartının yeri URAP'a + bırakılır (kart sayısı 4'te kalır, ızgara şablonu değişmez); + olmayanda "Tür" yerinde durur — hiçbir sayfada boş kutu yok. + Payda kartın içindedir: "18." tek başına yanıltır. */}
-
- Tür -
-
- {uni.unitur === "DEVLET" - ? "Devlet" - : uni.unitur - ? trBaslikDuzeni(uni.unitur) - : "—"} -
+ {uni.urap ? ( + <> +
+ URAP Türkiye +
+
+ {sayi(uni.urap.sira)} / {sayi(URAP_TOPLAM)} + + {URAP_DONEM} + +
+ + ) : ( + <> +
+ Tür +
+
+ {uni.unitur === "DEVLET" + ? "Devlet" + : uni.unitur + ? trBaslikDuzeni(uni.unitur) + : "—"} +
+ + )}
@@ -371,6 +438,8 @@ export function UniversiteIcerik({ veya o yıl yerleşen çıkmayan program).{" "} + {ilkSayfa ? : null} + u.slug === slug)!; return { ...ozet, + urap: urapSirasiBul(slug), fakulteler: [...gruplar.entries()] .map(([fakulte, programlar]) => ({ fakulte, programlar })) .sort((a, b) => a.fakulte.localeCompare(b.fakulte, "tr-TR")), From b63c7e8c87290281fb1656b1ae5eb2bed789d690 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Wed, 23 Sep 2026 00:22:37 +0300 Subject: [PATCH 3/5] docs(gece-vardiyasi): P3 URAP paketi raporu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Kabul kriterleri 6/6, atıf şartının karşılandığı yerler, şartnameden 4 sapma ve P2 ile merge kesişmesi. Co-Authored-By: Claude Opus 5 --- docs/gece-vardiyasi/2026-09-22/10-p3-urap.md | 64 ++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 docs/gece-vardiyasi/2026-09-22/10-p3-urap.md diff --git a/docs/gece-vardiyasi/2026-09-22/10-p3-urap.md b/docs/gece-vardiyasi/2026-09-22/10-p3-urap.md new file mode 100644 index 0000000..9b714db --- /dev/null +++ b/docs/gece-vardiyasi/2026-09-22/10-p3-urap.md @@ -0,0 +1,64 @@ +# 10 · P3 — URAP tek sayı: "Tür" kartıyla takas + +**Rol:** yazilimci · **Dal:** `gece/0922-urap` · **Tarih:** 23 Eylül 2026 +**Commit'ler:** `68cb69e` (veri sabiti), `4932671` (okuma katmanı + kart takası + kaynak satırı + veri-kalite), `` + +## Özet (5 madde) + +1. `src/lib/urap-siralama.ts` eklendi: 198 üniversitenin URAP Türkiye 2025-2026 sırası, `/universite/[slug]` slug'ına anahtarlı sabit + `URAP_KAYNAK_URL`, `URAP_DONEM`, `URAP_TOPLAM` + `urapSirasiBul()`. Yeni DB dosyası, göç, cron, çekme betiği **yok**. +2. Üniversite sayfası metrik ızgarasında takas yapıldı: URAP'ta olan üniversitede "Tür" kartının yerini **URAP TÜRKİYE · 18 / 198 · 2025-2026** alıyor; olmayan 31 kurumda **"Tür" yerinde duruyor**. Kart sayısı 4'te kaldı, `lg` ızgara şablonu değişmedi, yeni bileşen icat edilmedi. +3. Tablonun altına **ayrı ikinci kaynak satırı** eklendi; `VeriKaynagi` kullanılmadı ve kopyalanmadı. Satırda dönem, payda, metodoloji uyarısı ve `urapcenter.org`'a gerçek `` var (`rel="noopener"`, yeni sekme, **nofollow yok**, adres sabitten). +4. `scripts/veri-kalite.ts`'e **dosyanın en sonuna** 5 URAP kontrolü eklendi (mevcut satırlar yeniden düzenlenmedi; `main()` içine yalnız tek satırlık çağrı girdi). Beşi de geçiyor: 198/198 eşleşme, kesintisiz sıra, azalan puan, 31 kurumluk kapsama boşluğu. +5. `pnpm exec next typegen` + `tsc --noEmit` + `pnpm lint` + `pnpm build` temiz; doğrulama üretilmiş statik HTML üzerinden yapıldı (tarayıcı/dev sunucusu açılmadı). + +## Değişen dosyalar + +| Dosya | Ne | +|---|---| +| `src/lib/urap-siralama.ts` (**yeni**, 242 satır) | 198 satırlık `URAP_SIRA` sabiti + `URAP_DONEM`/`URAP_TOPLAM`/`URAP_KAYNAK_URL` + `urapSirasiBul()`; dosya başındaki yorumda atıf şartı yazılı | +| `src/lib/katalog.ts` (+7) | `UniDetay`'e tek alan: `urap: UrapSira \| null`; `getUniversiteBySlug` dönüşünde `urapSirasiBul(slug)` | +| `src/features/katalog/components/universite-icerik.tsx` (+89/−10) | Kart takası + `UrapKaynakSatiri` bileşeni (aynı dosyada, ızgaranın altındaki kaynak satırı) | +| `scripts/veri-kalite.ts` (+89) | Dosya sonuna `urapKontrolleri()` (5 kontrol) + `main()` sonunda tek satır çağrı + 3 satır import | + +Veri kaynağı: `docs/gece-vardiyasi/2026-09-22/05-urap.md` §1-2'de tarif edilen çıkarım (`rankings.byurlandgroup`, 198 satır), veri mühendisinin scratchpad'e bıraktığı `urap-2025.txt`. **Hiçbir sıra, ad ya da puan elle uydurulmadı**; slug'lar üretimden önce DB'deki 322 ham üniversite adından `uniSayfaSlug` ile türetilen kümeyle karşılaştırıldı (198/198 tuttu, 0 karşılıksız). + +## Kabul kriterleri — 6/6 + +| # | Kriter | Durum | Nasıl doğrulandı | +|---|---|---|---| +| 1 | URAP'ta olan sayfada 4 kart, "Tür" yerinde URAP; olmayanda 4 kart, "Tür" duruyor; hiçbir sayfada "—"/boş kutu yok | ✔ | Üretilmiş statik HTML'den metin çıkarımı: `koc-universitesi` → "Program 53 · Fakülte/Birim 7 · **URAP Türkiye 1 / 198 · 2025-2026** · En iyi sıralama 65"; `bogazici-universitesi` → "URAP Türkiye **18 / 198**"; `dogu-akdeniz-universitesi` → "Program 276 · Fakülte/Birim 17 · **Tür Kktc** · En iyi sıralama 9.061" | +| 2 | URAP sayısının göründüğü her sayfada aynı ekranda aktif atıf linki ve dönem var | ✔ | `koc-universitesi.html` içinde: ``; HTML'de `nofollow` geçmiyor. Dönem hem kartta (`2025-2026`) hem kaynak satırında. Sayı yalnız 1. sayfada çiziliyor, kaynak satırı da yalnız 1. sayfada | +| 3 | `veri-kalite` kontrolleri geçiyor, eşleşmeyen slug sessizce düşmüyor | ✔ | `pnpm veri-kalite --yil 2026 --db data/yokatlas.db` → 5 URAP satırı: "GEÇTİ … 198 slug'ın tamamı DB'de var", "kayıt 198, URAP_TOPLAM 198", "1..198 kesintisiz", "1152.91 → 70.82", "bilgi URAP dışında 31 kurum". Sonuç: 0 ZORUNLU kaldı (3 uyarı **önceden var olan** uyarılar, URAP'la ilgisiz) | +| 4 | Renk yok, rozet yok, `/universiteler` hub'ında URAP'a göre sıralama/filtre yok | ✔ | Kart mevcut `rounded-xl border-slate-200 bg-white` kutusunun içinde, metin `text-slate-900`/`text-slate-500`; `SectionEyebrow`/`Badge` kullanılmadı, yeni renk sınıfı girmedi. `universite-listesi.tsx` ve hub sayfaları **hiç açılmadı** (`git diff --stat`: 4 dosya) | +| 5 | 24'lük listeye, `/sonuc` tablosuna ve LLM prompt'una URAP girmez | ✔ | Dokunulan dosya kümesi bunu dışlıyor; `src/lib/urap-siralama.ts`'i içe aktaran yalnız `katalog.ts`, `universite-icerik.tsx` ve `veri-kalite.ts` | +| 6 | `tsc` + `lint` + `build` temiz | ✔ | `next typegen` ✓, `tsc --noEmit` çıktısız, `pnpm lint` çıktısız, `pnpm build` "Compiled successfully" + `BUILD_ID` üretildi (229 üniversite sayfası prerender). Build günlüğündeki `BetterAuthError`/Cal Sans uyarıları **önceden var**, worktree'de `.env` olmamasından | + +## Atıf şartı nerede karşılanıyor + +- **Veri dosyasının başında** (`src/lib/urap-siralama.ts` yorumu): izin şartı ve "link konulamayan yüzeyde sayı gösterilmez" kuralı yazılı — sonraki geliştirici sabiti başka bir yüzeye taşırken şartı görür. +- **Ekranda** (`UrapKaynakSatiri`): tablonun altında, `VeriKaynagi`'den ayrı ikinci satır. Kanonik cümle birebir: *"URAP Türkiye Sıralaması 2025-2026 (198 üniversite arasında) — akademik yayın ve araştırma performansını ölçer; eğitim kalitesini ya da iş bulma oranını ölçmez. Kaynak: urapcenter.org."* Adres `URAP_KAYNAK_URL` sabitinden geliyor, elle yazılmadı. +- **OG görselinde URAP yok**: `opengraph-image` dosyalarına dokunulmadı, `uni.urap` oraya hiç ulaşmıyor. +- **Boş durumda** (31 kurum) sayı olmadığı için link de yok; yalnız tek cümlelik açıklama var. Şart "sayının göründüğü yüzey" için; burada sayı görünmüyor. + +## Şartnameden sapmalar + +1. **Kaynak satırı yalnız 1. sayfada çiziliyor.** Şartname "tablonun altına" diyor; üniversite tabloları sayfalanıyor (`/universite//sayfa/2`…) ve metrik ızgarası yalnız 1. sayfada var. URAP sayısı 2. sayfada görünmediği için kaynak satırını da orada çizmedim — aksi hâlde sayfa 2'de bağlamsız bir URAP cümlesi kalırdı. Tersi isteniyorsa tek koşul kaldırılır (`{ilkSayfa ? : null}`). +2. **Boş durum cümlesinin varyant seçimi `unitur` üzerinden.** `KKTC` / `YURTDISI KAMU` / `YURTDISI VAKIF` → "URAP yalnız Türkiye'deki üniversiteleri sıralıyor."; diğerleri → "…2025-2026 listesinde yer almıyor." **P2 ile kesişme:** P2'nin düzelteceği 3 kurum (Kıbrıs Amerikan, Uluslararası Balkan, Uluslararası Saraybosna) bugün `DEVLET` etiketli olduğu için ikinci cümleyi alıyor. İki cümle de doğru, ama P2 merge edildikten sonra bu üç sayfa kendiliğinden doğru varyanta geçer — ek kod gerekmiyor. +3. **5. veri-kalite kontrolü şartnamedekinden farklı.** Veri mühendisinin önerisi "bir önceki döneme göre listeden düşen üniversite" idi; elimizde önceki dönemin sabiti olmadığı için bunu koşturmak mümkün değil. Yerine aynı riski (sessiz düşme) yakalayan bir kontrol yazdım: URAP dışında kalan **150+ programlı bir Türkiye üniversitesi** varsa UYARI — bu neredeyse her zaman ad değişikliği demektir. Bugün 0 (en büyük eksik Türkiye kurumu Mudanya, 78 program). +4. **`veri-kalite.ts`'e 3 satır import eklendi** (dosyanın en sonuna değil, import bloğunun sonuna). Kontrol gövdesi dosyanın en sonunda, `main()` içinde yalnız tek satırlık çağrı var; mevcut satırlar yeniden düzenlenmedi. P2 ile çakışma yüzeyi bu 4 satır. + +## Merge sonrası doğrulanması gerekenler + +- **P2 (`gece/0922-unitur-kacagi`) merge edildikten sonra:** `dogu-akdeniz-universitesi` dışında, düzeltilen 3 kurumun sayfasında boş durum cümlesinin "URAP yalnız Türkiye'deki üniversiteleri sıralıyor." varyantına geçtiği. Kod değişikliği gerekmez, yalnız gözle bakılır. +- **`scripts/veri-kalite.ts` merge'ü:** P2 aynı dosyaya "baz ad başına tek `unitur`" kontrolü ekliyor. Çakışma beklenen yer import bloğunun sonu; iki taraf da birleştirildikten sonra `pnpm veri-kalite --yil 2026 --db data/yokatlas.db` bir kez koşturulmalı (0 ZORUNLU bekleniyor). +- **Yayın sonrası:** `/universite/bogazici-universitesi` ve `/universite/dogu-akdeniz-universitesi` canlıda açılıp kartın 4'te kaldığı ve kaynak satırındaki linkin URAP sayfasına gittiği bir kez doğrulanmalı. + +## Gözlem (kapsam dışı, düzeltilmedi) + +"Tür" kartı artık yalnız URAP'ta olmayan 31 kurumda görünüyor ve bunların çoğu KKTC/yurt dışı. `trBaslikDuzeni` bu değerleri **"Kktc"**, **"Yurtdisi Kamu"** diye yazıyor — eskiden de böyleydi ama şimdi bu yazım yalnız o sayfalarda kaldığı için daha görünür. Şartnamede yok, dokunmadım; backlog önerisi. + +## Bilal'den istenen + +1. **URAP izin e-postasını `docs/` altına koy** (kanıt) — CEO kararı §5-3'te de yazıyor. ~2 dk. +2. **İki sayfayı gözle gör:** `/universite/bogazici-universitesi` (URAP 18/198 kartı + alttaki kaynak satırı) ve `/universite/dogu-akdeniz-universitesi` ("Tür" kartı yerinde + tek cümlelik boş durum). ~3 dk. +3. **Karar:** kaynak satırı derin sayfalarda (`/universite//sayfa/2`) da görünsün mü? Bugün görünmüyor, çünkü orada URAP sayısı da yok (sapma #1). ~1 dk. From 0e689e60bb82f404181a377ed57f03f9ee44f186 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Wed, 23 Sep 2026 00:49:15 +0300 Subject: [PATCH 4/5] =?UTF-8?q?fix(katalog):=20"T=C3=BCr"=20kart=C4=B1=20h?= =?UTF-8?q?am=20DB=20de=C4=9Ferini=20okunur=20T=C3=BCrk=C3=A7eyle=20g?= =?UTF-8?q?=C3=B6sterir?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Denetim O3: P2 üç kurumun `unitur`'ünü düzeltince (DEVLET → KKTC / YURTDISI KAMU) ve P3 "Tür" kartını yalnız URAP dışındaki 31 kurumda bırakınca, `trBaslikDuzeni`nin tr-TR küçültmesi ("I" → "ı") ekrana Türkçede olmayan kelimeler bastı: "YURTDISI KAMU" → "Yurtdısı Kamu" (6 sayfa), "KKTC" → "Kktc" (16 sayfa). Dün bu sayfalar "Devlet" diyordu; yani kullanıcıya görünen bir gerileme. Karta özel bir görüntüleme haritası (UNITUR_ETIKET) eklendi: Devlet / Vakıf / Vakıf MYO / KKTC / Yurt dışı (kamu) / Yurt dışı (vakıf). Haritada olmayan bir değer için mevcut davranış (`trBaslikDuzeni`) yedek kalır. `src/lib/slug.ts`'teki `trBaslikDuzeni`ye dokunulmadı — il adlarında da kullanılıyor ve oradaki davranışı doğru. Co-Authored-By: Claude Opus 5 --- .../katalog/components/universite-icerik.tsx | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/features/katalog/components/universite-icerik.tsx b/src/features/katalog/components/universite-icerik.tsx index 623bd1d..31778ab 100644 --- a/src/features/katalog/components/universite-icerik.tsx +++ b/src/features/katalog/components/universite-icerik.tsx @@ -43,6 +43,21 @@ import { BASLIK_YILI, SON_YIL, TERCIH_YILI } from "@/lib/veri-yillari"; const sayi = (n: number) => n.toLocaleString("tr-TR"); +// Ham `unitur` değerlerinin ekranda görünen karşılığı. `trBaslikDuzeni` +// tr-TR küçültmesi yaptığı için ("I" → "ı") ham değerlere uygulanamaz: +// "YURTDISI KAMU" → "Yurtdısı Kamu" gibi Türkçede olmayan kelimeler çıkıyor. +// Haritada olmayan (ileride eklenecek) bir değer için `trBaslikDuzeni` +// yedek olarak kalır. Yalnızca bu karttaki gösterim içindir — `trBaslikDuzeni` +// il adlarında doğru çalışıyor, ona dokunulmaz. +const UNITUR_ETIKET: Record = { + DEVLET: "Devlet", + VAKIF: "Vakıf", + "VAKIF MYO": "Vakıf MYO", + KKTC: "KKTC", + "YURTDISI KAMU": "Yurt dışı (kamu)", + "YURTDISI VAKIF": "Yurt dışı (vakıf)", +}; + export function uniToplamSayfa(programSayisi: number): number { return Math.max(1, Math.ceil(programSayisi / SAYFA_BOYU)); } @@ -378,11 +393,10 @@ export function UniversiteIcerik({ Tür
- {uni.unitur === "DEVLET" - ? "Devlet" - : uni.unitur - ? trBaslikDuzeni(uni.unitur) - : "—"} + {uni.unitur + ? (UNITUR_ETIKET[uni.unitur] ?? + trBaslikDuzeni(uni.unitur)) + : "—"}
)} From 4c756c41fdd2ce52e658b1d3880e0fd2944069b8 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Wed, 23 Sep 2026 10:01:41 +0300 Subject: [PATCH 5/5] =?UTF-8?q?fix(universite):=20=C3=BCniversite=20t?= =?UTF-8?q?=C3=BCr=C3=BC=20=C3=B6zet=20paragraf=C4=B1n=20ilk=20virg=C3=BCl?= =?UTF-8?q?=C3=BCne=20d=C3=B6nd=C3=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dün gece bu dalda URAP sırası "Tür" kartının yerini alırken devlet/vakıf bilgisi URAP'ta yer alan 198 üniversite sayfasından tamamen düştü — gerekçe "bilgi sayfanın başka yerinde zaten var" idi, doğrulandı ki değil (bogazici-universitesi.html'de "Devlet" 0 kez, koc-universitesi.html'de "Vakıf" 0 kez geçiyordu). Bu commit o bilgi kaybının telafisi. Telafi özet paragrafın ilk virgülünde duruyor: "… (İstanbul), devlet üniversitesi; 2026 YKS yerleştirme sonuçlarına göre …". Yeni kutu, yeni bileşen, yeni rozet yok; ızgara 4 kart kalıyor. Metin `trBaslikDuzeni` ile değil, dünkü commit'te eklenen `UNITUR_ETIKET` haritasıyla üretiliyor; harita cümle biçimini de taşıyacak şekilde genişletildi (kart etiketi + cümle öbeği tek kaynakta). `trBaslikDuzeni` tr-TR küçültmesi yaptığı için 6 `unitur` değerinin 4'ünde bozuk metin üretiyordu ("Kktc", "Yurtdısı Kamu"). Haritada olmayan ya da NULL bir değerde öbek hiç yazılmaz, cümlede kopuk virgül kalmaz. Co-Authored-By: Claude Opus 5 --- .../katalog/components/universite-icerik.tsx | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/src/features/katalog/components/universite-icerik.tsx b/src/features/katalog/components/universite-icerik.tsx index 31778ab..e3d5633 100644 --- a/src/features/katalog/components/universite-icerik.tsx +++ b/src/features/katalog/components/universite-icerik.tsx @@ -46,16 +46,24 @@ const sayi = (n: number) => n.toLocaleString("tr-TR"); // Ham `unitur` değerlerinin ekranda görünen karşılığı. `trBaslikDuzeni` // tr-TR küçültmesi yaptığı için ("I" → "ı") ham değerlere uygulanamaz: // "YURTDISI KAMU" → "Yurtdısı Kamu" gibi Türkçede olmayan kelimeler çıkıyor. -// Haritada olmayan (ileride eklenecek) bir değer için `trBaslikDuzeni` -// yedek olarak kalır. Yalnızca bu karttaki gösterim içindir — `trBaslikDuzeni` -// il adlarında doğru çalışıyor, ona dokunulmaz. -const UNITUR_ETIKET: Record = { - DEVLET: "Devlet", - VAKIF: "Vakıf", - "VAKIF MYO": "Vakıf MYO", - KKTC: "KKTC", - "YURTDISI KAMU": "Yurt dışı (kamu)", - "YURTDISI VAKIF": "Yurt dışı (vakıf)", +// İki biçim tek kaynakta durur, çünkü aynı bilgi iki yerde geçiyor: +// `kart` = "Tür" kartındaki kısa etiket (yalnız URAP'ta olmayan üniversitede), +// `cumle` = özet paragrafın ilk virgülündeki öbek (her üniversitede). +// `cumle` cümle ortasında okunacak biçimde küçük harfle başlar; KKTC gibi +// kısaltmalar büyük kalır. +const UNITUR_ETIKET: Record = { + DEVLET: { kart: "Devlet", cumle: "devlet üniversitesi" }, + VAKIF: { kart: "Vakıf", cumle: "vakıf üniversitesi" }, + "VAKIF MYO": { kart: "Vakıf MYO", cumle: "vakıf meslek yüksekokulu" }, + KKTC: { kart: "KKTC", cumle: "KKTC üniversitesi" }, + "YURTDISI KAMU": { + kart: "Yurt dışı (kamu)", + cumle: "yurt dışında bir kamu üniversitesi", + }, + "YURTDISI VAKIF": { + kart: "Yurt dışı (vakıf)", + cumle: "yurt dışında bir vakıf üniversitesi", + }, }; export function uniToplamSayfa(programSayisi: number): number { @@ -227,6 +235,14 @@ export function UniversiteIcerik({ } const ilkSayfa = sayfa === 1; + // Devlet/vakıf bilgisi sayfada başka hiçbir yerde geçmiyor (URAP'ta olan + // üniversitede "Tür" kartının yerini URAP sırası aldı), o yüzden özet + // paragrafın ilk virgülünde duruyor. Haritada olmayan ya da NULL bir + // `unitur`'da öbek hiç yazılmaz: cümlede kopuk virgül/boşluk kalmaz ve + // ham DB değeri cümlenin içine sızmaz. + const turCumlesi = uni.unitur + ? UNITUR_ETIKET[uni.unitur]?.cumle + : undefined; const buYol = ilkSayfa ? `/universite/${slug}` : `/universite/${slug}/sayfa/${sayfa}`; @@ -324,8 +340,9 @@ export function UniversiteIcerik({ <>

{uni.ad} - {uni.il ? ` (${trBaslikDuzeni(uni.il)})` : ""}, {SON_YIL} YKS - yerleştirme sonuçlarına göre{" "} + {uni.il ? ` (${trBaslikDuzeni(uni.il)})` : ""} + {turCumlesi ? `, ${turCumlesi};` : ","} {SON_YIL} YKS yerleştirme + sonuçlarına göre{" "} {sayi(uni.programSayisi)} programda öğrenci aldı {uni.fakulteSayisi > 1 ? `; programlar ${sayi(uni.fakulteSayisi)} fakülte/yüksekokula dağılıyor` @@ -394,7 +411,7 @@ export function UniversiteIcerik({

{uni.unitur - ? (UNITUR_ETIKET[uni.unitur] ?? + ? (UNITUR_ETIKET[uni.unitur]?.kart ?? trBaslikDuzeni(uni.unitur)) : "—"}