fix(metin): olasılık dili + 5 yıl

Ürün yerleşme olasılığı üretmiyor; tek yılın tabanına göre risk dilimi
etiketi veriyor (src/lib/risk.ts). Metinler buna eşitlendi:
- "yerleşme olasılığı ve risk analizi" → "yerleşme riski ve trend analizi"
  (ana sayfa fiyat kutusu + /paket özellik listesi)
- riskNotuUret'in dört "ihtimal" cümlesi yeni riskNotuMetni()'ne taşındı;
  cümleler geçmiş taban verisine bağlanıyor, "yerleşirsin/ihtimalle" yok.
  Risk eşikleri, 5/13/6 şeması ve prompt değişmedi (yalnız cümle)
- "son 4 yıl" → VERI_YIL_SAYISI (= 5; DB sira2021–sira2025) — yeni
  src/lib/veri-kapsami.ts tek kaynağından
- arama funnel kartı: "Yerleşme ihtimalini" → "Yerleşme riskini"

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-09-21 04:47:47 +03:00
parent 56925e1309
commit 16c450827b
6 changed files with 41 additions and 20 deletions

View File

@@ -18,7 +18,12 @@ import {
type AdayProgram,
} from "../rapor-havuzu";
import { secimOzeti } from "@/features/sihirbaz/sihirbaz-sabitler";
import { RISK_ETIKET, dilimdenRisk, riskHesapla } from "../risk";
import {
RISK_ETIKET,
dilimdenRisk,
riskHesapla,
riskNotuMetni,
} from "../risk";
// Yapay zekâdan istenen küçük şema (kullanıcı kararı, 6 Ağu 2026): riskNotu
// ve trendOzeti gerçek sıra geçmişinden deterministik üretilir; dilim iskeleti
@@ -161,16 +166,7 @@ function trendOzetiUret(p: AdayProgram): string {
}
function riskNotuUret(p: AdayProgram, adaySira: number): string {
switch (riskHesapla(p.sira2025 ?? p.sira2024, adaySira)) {
case "guvenli":
return "Taban sıralaması senin sıranın belirgin altında; yüksek ihtimalle yerleşirsin.";
case "az-riskli":
return "Taban sıralaması sırana yakın; orta ihtimalle yerleşilebilir.";
case "riskli":
return "Taban sıralaması senin sıranın üstünde kapandı; yerleşme ihtimali düşük.";
default:
return "Güncel taban sıralaması verisi yok; ihtimal öngörülemez, temkinli yaklaş.";
}
return riskNotuMetni(riskHesapla(p.sira2025 ?? p.sira2024, adaySira));
}
/** Havuz programını render için gereken bilgiye indirger. */

View File

@@ -42,3 +42,22 @@ export function dilimdenRisk(dilim: Dilim | string): RiskSeviyesi {
if (dilim === "dengeli") return "az-riskli";
return "riskli";
}
/**
* Risk seviyesinin tek cümlelik açıklaması (rapor satırları + tadımlık).
* Ürün yerleşme olasılığı HESAPLAMAZ; yalnızca son taban sıralamasını adayın
* sırasıyla kıyaslar. Bu yüzden metin olasılık/ihtimal/"yerleşirsin" demez.
* "Geçen yıl" da denmez: efektif sıra 2025 yoksa 2024'e düşüyor.
*/
export function riskNotuMetni(risk: RiskSeviyesi | null): string {
switch (risk) {
case "guvenli":
return "Son taban sıralaması senin sıranın belirgin altında; geçmiş veriye göre güvenli aralıkta.";
case "az-riskli":
return "Son taban sıralaması sırana yakın; küçük bir kayma sonucu değiştirebilir.";
case "riskli":
return "Son taban sıralaması senin sıranın üstünde kapandı; hayal tercihi olarak düşün.";
default:
return "Güncel taban verisi yok; bu satırı temkinli değerlendir.";
}
}

6
src/lib/veri-kapsami.ts Normal file
View File

@@ -0,0 +1,6 @@
/**
* Taban sıralaması geçmişinin kapsadığı yıl sayısı. Veritabanında
* sira2021–sira2025 kolonları var (5 yıl); "son N yıl" diyen tüm metinler bu
* sabitten okur. Yeni veri yılı eklenince (ör. sira2026) burayı güncelle.
*/
export const VERI_YIL_SAYISI = 5;