fix(havuz): B3 — alan süzgeci kırpmadan önce uygulansın [KARAR]

Havuz her dilimden sıraya en yakın 60 programı alıp alan (kategori)
süzgecini ondan sonra uyguluyordu; il seçmeyen adayın alanı, o alanda
onlarca program varken "yeterli program yok" diye gevşiyordu (matris B3:
318 denemenin 206'sı). Artık dilimin tamamı okunur (db.havuzAdaylari),
il + alan süzgeci ona uygulanır, 24 eşiği gerçek sayıya bakar, kırpma en
sonda yapılır. Gevşetme sırası ve kırpma kuralı değişmedi.

Kanıt (önce → sonra, havuzda seçili alanla eşleşen): a16 EA 200.000
Turizm 1/60 → 33/33; p03 8/60 → 60/60; a08 5/60 → 60/60; hiçbiri artık
alan gevşetmiyor.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-10-05 01:13:23 +03:00
parent b26df27fcd
commit ef68f93463
2 changed files with 44 additions and 24 deletions

View File

@@ -239,6 +239,28 @@ export function searchByRank(
};
}
/**
* Aday havuzunun ham girdisi: üç dilimin TAMAMI, yakından uzağa sıralı
* (limit yok). Alan (kategori) DB'de kolon değil, JS'te isim+fakülteden
* türüyor; süzgeç limitten SONRA uygulanınca sıraya en yakın satırlar her
* alandan karışık geldiği için seçilen alan olduğundan az görünüyordu. Bu
* yüzden havuz dilimin tamamını alır, alan/il süzgecini kendisi uygular ve
* en son kırpar (bkz. lib/rapor-havuzu.ts). En büyük puan türü ~9 bin satır.
*/
export function havuzAdaylari(
sira: number,
turKey: PuanTuruKey,
opts: { uniturGrubu?: UniturGrubu; ozellik?: OzellikSuzgeci } = {}
): Record<DilimKey, Program[]> {
// LIMIT -1: SQLite'ta "sınırsız"
const ortak = { ...opts, limit: -1 };
return {
hayal: dilimAra(sira, turKey, "hayal", ortak).programlar,
dengeli: dilimAra(sira, turKey, "dengeli", ortak).programlar,
garanti: dilimAra(sira, turKey, "garanti", ortak).programlar,
};
}
/**
* Programa yerleşen son kişinin yıl bazlı netleri, yeniden eskiye sıralı.
* Veri scripts/detay.ts ile YÖK Atlas /api/netler/search'ten doldurulur.