// Deterministik trend cümlesi: rapor satırları (lib/ai/rapor.ts) ve girişsiz // tadımlık (lib/tadimlik-havuzu.ts) AYNI saf fonksiyondan okur. Cümle gerçek // YÖK Atlas sıra geçmişinden kesin rakamla kurulur ("45B düzeyinden 38B // düzeyine indi"); yıl aralığı sabit bir "son N yıl" kalıbından değil, // serideki dolu yıllardan gelir. import { ILK_YIL } from "./veri-yillari"; /** 45000 -> "45B", 1_200_000 -> "1,2M" (şemadaki öğrenci dili). */ function siraKisa(n: number): string { if (n >= 1_000_000) { return `${(n / 1_000_000).toLocaleString("tr-TR", { maximumFractionDigits: 1 })}M`; } if (n >= 1000) return `${Math.round(n / 1000)}B`; return String(n); } /** * [ilkYil..] taban sıralaması dizisinden tek cümlelik trend özeti. Dizi * `ilkYil`'a demirlidir (varsayılan: veri penceresinin ilk yılı); yeni veri * yılı sona eklenir, bu yüzden eski kayıtların daha kısa dizileri de doğru * yılları verir. `ilkYil`, snapshot kendi çapasını taşıyorsa ondan gelir. * * Cümle yalnızca OLANI betimler: ilk ve son dolu yılın tabanını kıyaslar * (±%10 eşiği). "Zorlaşıyor / kolaylaşıyor" gibi geleceğe dönük yargı * kurmaz — iki uç yılın kıyası aradaki seyri ve gelecek yılı söylemez. * Küçülen sıra = taban sıkılaştı, büyüyen sıra = taban gevşedi. */ export function trendOzetiMetni( gecmis: readonly (number | null | undefined)[] | undefined, ilkYil: number = ILK_YIL, ): string { const seri: Array<[number, number]> = []; (gecmis ?? []).forEach((sira, i) => { if (sira != null) seri.push([ilkYil + i, sira]); }); if (seri.length < 2) { return "Karşılaştırma için yeterli geçmiş yıl verisi yok; trendi temkinli oku."; } const [basYil, ilkSira] = seri[0]; const [sonYil, sonSira] = seri[seri.length - 1]; const oran = (sonSira - ilkSira) / ilkSira; if (oran <= -0.1) { return `${basYil}-${sonYil} arasında taban ${siraKisa(ilkSira)} düzeyinden ${siraKisa(sonSira)} düzeyine indi; taban sıkılaştı.`; } if (oran >= 0.1) { return `${basYil}-${sonYil} arasında taban ${siraKisa(ilkSira)} düzeyinden ${siraKisa(sonSira)} düzeyine çıktı; taban gevşedi.`; } return `${basYil}-${sonYil} arasında taban sıralaması ${siraKisa(sonSira)} düzeyinde stabil seyretti.`; }