feat(tadimlik): batch üretimi yılsız alanlarla; snapshot'a ilkYil (P-B c)

Prompt ve mock metni "son ${VERI_YIL_SAYISI} yıl" der; program seçimi
yerlesenSon'a göre; snapshot rapor.ts programBilgisi ile aynı şekilde
siraGecmisi + ilkYil yazar.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-09-21 17:00:39 +03:00
parent ceeb70375d
commit 85ed972c68

View File

@@ -38,6 +38,7 @@ import {
} from "../src/lib/tadimlik-havuzu";
import { anahtarVar } from "../src/lib/ai/client";
import { yapilandirilmisUret } from "../src/lib/ai/cagri";
import { ILK_YIL, VERI_YIL_SAYISI } from "../src/lib/veri-yillari";
// Next dışında koşuyoruz; .env dosyalarını elle yükle (mevcut env kazanır).
function envYukle(dosya: string): void {
@@ -72,8 +73,8 @@ KURALLAR (kesin):
riskli" etiketleriyle konuş.
- Programın "dilim" alanındaki "garanti" değeri teknik anahtardır; adaya dönük
hiçbir metinde bu kelimeyi kullanma, o dilimi "güvenli" diye an.
- trendOzeti: son 5 yılın taban sıralaması hareketi, TEK cümle (ör. "2022'den
beri taban 45B'den 38B'ye indi, bölüm zorlaşıyor").
- trendOzeti: son ${VERI_YIL_SAYISI} yılın taban sıralaması hareketi, TEK cümle
(ör. "2022'den beri taban 45B'den 38B'ye indi, bölüm zorlaşıyor").
- Adayın sıralaması yaklaşıktır; kesin sıra telaffuz etme, banda göre konuş.`;
function mockAktif(): boolean {
@@ -87,27 +88,30 @@ function mockMetin(p: Program, temsiliSira: number, kategori: string | null) {
riskNotu:
"(Dev mock) Son taban sıralaması sırana yakın; küçük bir kayma sonucu değiştirebilir.",
trendOzeti:
"(Dev mock) Son 5 yılda taban sıralaması görece stabil seyretti.",
`(Dev mock) Son ${VERI_YIL_SAYISI} yılda taban sıralaması görece stabil seyretti.`,
};
}
/** rapor.ts programBilgisi ile aynı snapshot şekli. */
function programBilgisi(p: Program) {
const gecmis = [p.sira2021, p.sira2022, p.sira2023, p.sira2024, p.sira2025];
const gecmis = p.siraGecmisi;
const gecmisVar = gecmis.some((s) => s != null);
return {
isim: p.isim,
universite: p.universite,
il: p.il,
unitur: p.unitur,
efektifSira: p.sira2025 ?? p.sira2024,
siraGecmisi: gecmis.some((s) => s != null) ? gecmis : undefined,
efektifSira: p.efektifSira,
siraGecmisi: gecmisVar ? gecmis : undefined,
ilkYil: gecmisVar ? ILK_YIL : undefined,
};
}
/**
* Deterministik program seçimi: kovanın temsili sırası için "dengeli" dilimden
* (boşsa "garanti") kategoriye ve üniversite tipine uyan, 2025'te en çok
* yerleşen alan program. Tanınır/dolu programlar tadımlıkta daha ikna edici.
* (boşsa "garanti") kategoriye ve üniversite tipine uyan, son yerleştirme
* yılında en çok yerleşen alan program. Tanınır/dolu programlar tadımlıkta
* daha ikna edici.
*/
function programSec(
temsiliSira: number,
@@ -125,7 +129,7 @@ function programSec(
: programlar;
if (uygunlar.length === 0) continue;
const secilen = [...uygunlar].sort(
(a, b) => (b.yerlesen2025 ?? -1) - (a.yerlesen2025 ?? -1),
(a, b) => (b.yerlesenSon ?? -1) - (a.yerlesenSon ?? -1),
)[0];
return { program: secilen, dilim };
}