feat(universite): "Tür" kartının yerine URAP Türkiye sırası
/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 <a href>: 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 <noreply@anthropic.com>
This commit is contained in:
@@ -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<string, { unitur: string | null; program: number }>();
|
||||
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(", ")}`
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user