feat(etiket): görünen "Garanti" dilim adı site genelinde "Güvenli"
Yalnız kullanıcıya görünen etiket değişir; iç anahtar, tip, DB değeri, API parametresi, mermaid classDef ve analitik değeri `garanti` olarak kalır (veri göçü yok). - risk.ts: tek kaynak DILIM_ETIKET + dilimdenFarkliRiskEtiketi; rapor listesi, yazdır tablosu, /sonuc sekmeleri, seçimlerim paneli ve meraklısına şeridi buradan okur - "Güvenli · Güvenli" / "Güvenli (Güvenli)": satır detayında risk etiketi yalnız dilimin varsayılanından farklıysa, yazdır ve seçimlerimde yalnız kelime farklıysa yazılır - LLM prompt'ları: `garanti` teknik anahtar, adaya "güvenli" denir sözlüğü (rapor, soru, tadımlık); liste özeti modele görünen dilim adıyla gider - meraklısına şeması (SEMA düğümü, aria-label), 2. bölüm anlatımı ve AGENTS.md şema kuralı görünen adla eşitlendi - "yerleşme garantisi vermez" türü vaat reddi cümleleri aynen kaldı Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -19,6 +19,7 @@ import {
|
||||
} from "../rapor-havuzu";
|
||||
import { secimOzeti } from "@/features/sihirbaz/sihirbaz-sabitler";
|
||||
import {
|
||||
DILIM_ETIKET,
|
||||
RISK_ETIKET,
|
||||
dilimdenRisk,
|
||||
riskHesapla,
|
||||
@@ -77,6 +78,11 @@ KURALLAR (kesin):
|
||||
- METİN DİYETİ: aday ${toplam} satır okuyacak; gerekce TEK kısa cümle (en fazla ~15
|
||||
kelime, Türkçe): bu programın bu aday için neden mantıklı olduğu. Dolgu söz
|
||||
yok; ASLA "garanti", "kesin", "yüzde yüz" deme.
|
||||
- SÖZLÜK: "garanti" yalnızca üçüncü listenin teknik JSON alan adı ve havuzdaki
|
||||
"dilim" değeridir. Adaya dönük HİÇBİR metinde (gerekce, genelDegerlendirme,
|
||||
uyarilar) "garanti" kelimesini kullanma; bu dilimi adaya "güvenli dilim" /
|
||||
"güvenli tercihler" diye an. Aday ya da önceki liste özeti "güvenli dilim"
|
||||
derse kastedilen "garanti" listesidir.
|
||||
- Adayın notlarındaki şehir/bölüm tercihlerine saygı göster ama dengeyi bozma.
|
||||
- genelDegerlendirme: listenin genel stratejisi, EN FAZLA 2 cümle. Uyarıları
|
||||
buraya yazma.
|
||||
@@ -209,12 +215,12 @@ function mockRapor(
|
||||
tercihler,
|
||||
genelDegerlendirme: `(Dev mock — Yapay Zeka anahtarı tanımlı değil, bu rapor gerçek Yapay Zeka çıktısı değildir.) ${params.sira.toLocaleString(
|
||||
"tr-TR",
|
||||
)}. sıra için hayal/dengeli/garanti dağılımlı ${toplamHedef} tercihlik örnek liste kuruldu.${
|
||||
)}. sıra için hayal/dengeli/güvenli dağılımlı ${toplamHedef} tercihlik örnek liste kuruldu.${
|
||||
revizyonNotu ? ` Revizyon isteğin not alındı: "${revizyonNotu}".` : ""
|
||||
}`,
|
||||
uyarilar: [
|
||||
"(Dev mock) Tercih dönemi kapanmadan listeyi ÖSYM sistemine kendin gir.",
|
||||
"(Dev mock) Garanti dilimindeki son tercihleri asla silme.",
|
||||
"(Dev mock) Güvenli dilimindeki son tercihleri asla silme.",
|
||||
],
|
||||
programlar,
|
||||
kapsam: kapsamUret(hedef),
|
||||
@@ -406,7 +412,7 @@ export async function raporUret(
|
||||
tercihler,
|
||||
genelDegerlendirme:
|
||||
genel.trim() ||
|
||||
`Listen ${toplamHedef} tercihten oluşuyor; hayal, dengeli ve garanti dilimleri sıralamana göre dengelendi.`,
|
||||
`Listen ${toplamHedef} tercihten oluşuyor; hayal, dengeli ve güvenli dilimleri sıralamana göre dengelendi.`,
|
||||
uyarilar: uyarilar.length > 0 ? uyarilar : undefined,
|
||||
programlar,
|
||||
kapsam: kapsamUret(hedef),
|
||||
@@ -424,7 +430,10 @@ export function listeOzetiCikar(rapor: RaporSonuc, adaySira?: number): string {
|
||||
p?.efektifSira != null
|
||||
? ` (taban sırası ~${p.efektifSira.toLocaleString("tr-TR")})`
|
||||
: "";
|
||||
return `${t.sira}. [${t.dilim} | ${RISK_ETIKET[risk]}] ${p?.isim ?? "?"} — ${p?.universite ?? "?"}${taban}`;
|
||||
// Modele ham `garanti` anahtarı değil görünen dilim adı gider; yoksa
|
||||
// sohbet cevaplarına "garanti dilimi" sızıyor. Dilim ve risk aynı kelime
|
||||
// olabildiği için ("Güvenli") alanlar adlandırılır.
|
||||
return `${t.sira}. [dilim: ${DILIM_ETIKET[t.dilim] ?? t.dilim} | risk: ${RISK_ETIKET[risk]}] ${p?.isim ?? "?"} — ${p?.universite ?? "?"}${taban}`;
|
||||
})
|
||||
.join("\n");
|
||||
}
|
||||
|
||||
@@ -12,6 +12,18 @@ export const RISK_ETIKET: Record<RiskSeviyesi, string> = {
|
||||
riskli: "Riskli",
|
||||
};
|
||||
|
||||
/**
|
||||
* Dilimin kullanıcıya GÖRÜNEN adı — tek kaynak. Üçüncü dilimin iç anahtarı
|
||||
* (tip, DB değeri, API parametresi, mermaid classDef, analitik) `garanti`
|
||||
* olarak kalır; ekranda "Güvenli" yazar. Ham anahtarı kullanıcıya basma,
|
||||
* buradan oku.
|
||||
*/
|
||||
export const DILIM_ETIKET: Record<Dilim, string> = {
|
||||
hayal: "Hayal",
|
||||
dengeli: "Dengeli",
|
||||
garanti: "Güvenli",
|
||||
};
|
||||
|
||||
/** Harita pinlerinin SVG dolgu renkleri — risk renk dilinin oklch karşılığı. */
|
||||
export const RISK_PIN_RENK: Record<RiskSeviyesi, string> = {
|
||||
guvenli: "oklch(0.696 0.17 162.5)", // emerald-500
|
||||
@@ -43,6 +55,19 @@ export function dilimdenRisk(dilim: Dilim | string): RiskSeviyesi {
|
||||
return "riskli";
|
||||
}
|
||||
|
||||
/**
|
||||
* Dilim başlığının yanına yazılacak risk etiketi. Yalnızca satırın riski
|
||||
* dilimin varsayılanından FARKLIYSA döner; aynıysa null. Üçüncü dilimin adı
|
||||
* risk etiketiyle aynı kelime olduğu için aksi hâlde "Güvenli · Güvenli"
|
||||
* görünürdü.
|
||||
*/
|
||||
export function dilimdenFarkliRiskEtiketi(
|
||||
dilim: Dilim | string,
|
||||
risk: RiskSeviyesi,
|
||||
): string | null {
|
||||
return dilimdenRisk(dilim) === risk ? null : RISK_ETIKET[risk];
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { kategoriEslesir } from "./kategoriler";
|
||||
import { riskHesapla, type RiskSeviyesi } from "./risk";
|
||||
import { DILIM_ETIKET, riskHesapla, type RiskSeviyesi } from "./risk";
|
||||
import type { TercihProfili } from "@/features/sihirbaz/sihirbaz-sabitler";
|
||||
|
||||
export type DegerlendirilecekProgram = {
|
||||
@@ -11,7 +11,8 @@ export type DegerlendirilecekProgram = {
|
||||
|
||||
export type TercihDegerlendirmesi = {
|
||||
risk: RiskSeviyesi | null;
|
||||
riskEtiketi: "Hayal" | "Dengeli" | "Daha güvenli" | "Veri yetersiz";
|
||||
/** Görünen dilim adı (DILIM_ETIKET) ya da "Veri yetersiz". */
|
||||
riskEtiketi: string;
|
||||
riskMetni: string;
|
||||
olumlu: string[];
|
||||
celiskiler: string[];
|
||||
@@ -65,11 +66,11 @@ export function tercihDegerlendir(
|
||||
|
||||
const riskEtiketi =
|
||||
risk === "riskli"
|
||||
? "Hayal"
|
||||
? DILIM_ETIKET.hayal
|
||||
: risk === "az-riskli"
|
||||
? "Dengeli"
|
||||
? DILIM_ETIKET.dengeli
|
||||
: risk === "guvenli"
|
||||
? "Daha güvenli"
|
||||
? DILIM_ETIKET.garanti
|
||||
: "Veri yetersiz";
|
||||
const riskMetni =
|
||||
risk === "riskli"
|
||||
|
||||
Reference in New Issue
Block a user