test(eval): profil beklentileri havuz düzeltmeleri sonrası davranışa göre yeniden üretildi
- 22 profilin beklenen değeri (gevşetme, minAday, hedef) B1/B2/B3/B5/B8 sonrası gerçek havuzOlustur() çıktısına eşitlendi; "liste-24-alti" etiketi kalktı, düzelen bugların supheli kayıtları temizlendi. - robot.ts: "alan-ilsiz-gevsedi" değişmezi artık yalnız alanda adayın yazabileceği 24+ program varken ihlal sayar (a07: baraj yüzünden alanda 1 program kalıyor, gevşetme meşru; beklenti hatasıydı). Önce: pnpm eval:robot 22 temiz / 18 ihlalli, çıkış 1. Sonra: 40 temiz / 0 ihlalli, çıkış 0. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -31,9 +31,9 @@ import {
|
||||
} from "./ortak";
|
||||
import { JEV_EVAL_MODEL, JEV_SORU_GRUPLARI, type JevGerekceState } from "./jev-sorulari";
|
||||
import { PROFILLER, type EvalProfil } from "./profiller";
|
||||
import { getDb } from "@/lib/db";
|
||||
import { getDb, havuzAdaylari } from "@/lib/db";
|
||||
import { kategoriEslesir } from "@/lib/kategoriler";
|
||||
import { dilimHedefiHesapla, havuzOlustur, havuzuKompaktJson, turLabel, type AdayProgram, type DilimHedef } from "@/lib/rapor-havuzu";
|
||||
import { dilimHedefiHesapla, havuzOlustur, havuzuKompaktJson, ozelKontenjanSatiriMi, turLabel, type AdayProgram, type DilimHedef } from "@/lib/rapor-havuzu";
|
||||
import type { RaporParams, RaporSonuc } from "@/features/rapor/types/rapor";
|
||||
|
||||
const DILIMLER = ["hayal", "dengeli", "garanti"] as const;
|
||||
@@ -115,7 +115,14 @@ function degismezler(p: EvalProfil) {
|
||||
degismez("liste-24", toplam < 24, ["B1", "B6"], `liste ${toplam} satır`);
|
||||
degismez("baraj-disi", barajDisi.length > 0, ["B2"], `${barajDisi.length} program adayın yazamayacağı barajda (ör. ${barajDisi[0]?.isim} — ${barajDisi[0]?.universite})`);
|
||||
degismez("ozel-kontenjan", ozelKontenjan.length > 0, ["B8"], `${ozelKontenjan.length} KKTC Uyruklu/M.T.O.K. satırı (ör. ${ozelKontenjan[0]?.isim} — ${ozelKontenjan[0]?.universite})`);
|
||||
degismez("alan-ilsiz-gevsedi", gevsetildi.includes("kategori") && s.iller.length === 0, ["B3"], `il seçilmeden alan gevşedi; havuzda alan içi ${alanIci}/${havuz.length}`);
|
||||
// İl seçilmeden alanın gevşemesi yalnız alanda adayın YAZABİLECEĞİ (baraj içi, özel kontenjan dışı) 24 program
|
||||
// varken bug'dır (B3). Alan baraj yüzünden gerçekten boşaldıysa (a07: SÖZ 310.000 + öğretmenlik) gevşetme meşrudur.
|
||||
let alanYazilabilir: number | null = null;
|
||||
if (gevsetildi.includes("kategori") && s.iller.length === 0) {
|
||||
const r = havuzAdaylari(params.sira, params.tur, { uniturGrubu: s.universiteTipi === "farketmez" ? undefined : s.universiteTipi });
|
||||
alanYazilabilir = [...r.hayal, ...r.dengeli, ...r.garanti].filter((x) => !ozelKontenjanSatiriMi(x.isim) && kategoriEslesir(x.isim, s.kategoriler, x.fakulte)).length;
|
||||
}
|
||||
degismez("alan-ilsiz-gevsedi", alanYazilabilir != null && alanYazilabilir >= 24, ["B3"], `il seçilmeden alan gevşedi; alanda yazılabilir ${alanYazilabilir} program varken havuzda alan içi ${alanIci}/${havuz.length}`);
|
||||
degismez("il-korunmadi", gevsetildi.includes("il") && ilIci < Math.min(3, toplam), ["B5"], `il gevşedi; havuzda seçili ilden ${ilIci}/${havuz.length}`);
|
||||
if (tipIci < havuz.length) bulgular.push({ ad: "tip", durum: "ihlal", neden: `üniversite tipi dışı ${havuz.length - tipIci} program` });
|
||||
if (yinelenen > 0) bulgular.push({ ad: "yinelenen", durum: "ihlal", neden: `${yinelenen} yinelenen program` });
|
||||
@@ -134,6 +141,8 @@ function degismezler(p: EvalProfil) {
|
||||
liste: toplam,
|
||||
ideal: ayni(hedef, IDEAL),
|
||||
alanIci,
|
||||
/** Alan ilsiz gevşediyse: alanda adayın yazabileceği program sayısı (<24 ise gevşetme meşru). */
|
||||
alanYazilabilir,
|
||||
ilIci: s.iller.length ? ilIci : null,
|
||||
tipIci,
|
||||
barajDisi: barajDisi.length,
|
||||
|
||||
Reference in New Issue
Block a user