diff --git a/src/features/katalog/components/bolum-program-listesi.tsx b/src/features/katalog/components/bolum-program-listesi.tsx
index 9083819..2d80712 100644
--- a/src/features/katalog/components/bolum-program-listesi.tsx
+++ b/src/features/katalog/components/bolum-program-listesi.tsx
@@ -22,6 +22,7 @@ import {
SATIR_BUTON_BASLIK,
SATIR_BUTON_HUCRE,
SATIR_BUTON_KABI,
+ SATIR_CIP,
SATIR_GRUP,
SATIR_IKINCIL_LINK,
SATIR_META,
@@ -242,6 +243,10 @@ export function BolumProgramListesi({
)}
+ {/* Burs/dil/öğretim türü: aynı adlı satırları ayırt eder (§4.15 çip) */}
+ {p.varyant ? (
+ {p.varyant}
+ ) : null}
{p.il ? (
{TUR_ETIKET[p.tur] ?? p.tur}
+ {/* Burs/dil/öğretim türü: aynı adlı satırları ayırt eder (§4.15 çip) */}
+ {p.varyant ? (
+ {p.varyant}
+ ) : null}
{p.sure ? (
{p.sure} yıl
) : null}
diff --git a/src/features/liste/components/liste-cekmecesi.tsx b/src/features/liste/components/liste-cekmecesi.tsx
index 6db74f5..3104dc6 100644
--- a/src/features/liste/components/liste-cekmecesi.tsx
+++ b/src/features/liste/components/liste-cekmecesi.tsx
@@ -452,6 +452,10 @@ function CekmeceSatiri({
>
{trBaslikDuzeni(tercih.universite)}
+ {/* Burs/dil/öğretim türü: aynı adlı satırları ayırt eder */}
+ {tercih.varyant ? (
+ · {tercih.varyant}
+ ) : null}
{tercih.risk || tercih.efektifSira != null ? (
diff --git a/src/features/liste/components/program-ekle-butonu.tsx b/src/features/liste/components/program-ekle-butonu.tsx
index 10ba5ce..8275d43 100644
--- a/src/features/liste/components/program-ekle-butonu.tsx
+++ b/src/features/liste/components/program-ekle-butonu.tsx
@@ -28,6 +28,7 @@ type ProgramOzet = Pick<
| "unitur"
| "tur"
| "efektifSira"
+ | "varyant"
>;
const PROFILSIZ_EKLEME_TOAST_ID = "profilsiz-ekleme";
diff --git a/src/features/liste/components/program-tablosu.tsx b/src/features/liste/components/program-tablosu.tsx
index 1ba6711..d720c5a 100644
--- a/src/features/liste/components/program-tablosu.tsx
+++ b/src/features/liste/components/program-tablosu.tsx
@@ -55,6 +55,7 @@ import {
SATIR_BUTON_HUCRE,
SATIR_BUTON_KABI,
SATIR_ALT_GRUP,
+ SATIR_CIP,
SATIR_IKINCIL_LINK,
SATIR_META,
SATIR_MOBIL_SAYI,
@@ -373,6 +374,10 @@ function ProgramSatiri({
unitur={p.unitur}
onClick={(e) => e.stopPropagation()}
/>
+ {/* Burs/dil/öğretim türü: aynı adlı satırları ayırt eder (§4.15 çip) */}
+ {p.varyant ? (
+ {p.varyant}
+ ) : null}
{p.il ? (
;
kaynak: ManuelKaynak;
adaySira?: number;
@@ -271,11 +272,16 @@ export function programEkleIste(opts: {
}
const profil = profilsiz ? null : (durum.profil ?? tercihProfiliOku());
- const tercih = programdanManuelTercih(
- program,
- adaySira ?? profil?.sira ?? null,
- kaynak,
- );
+ // programdanManuelTercih (liste-store) varyantı bilmez; etiket burada
+ // kopyalanır ki çekmece aynı adlı satırları ayırt edebilsin.
+ const tercih = {
+ ...programdanManuelTercih(
+ program,
+ adaySira ?? profil?.sira ?? null,
+ kaynak,
+ ),
+ varyant: program.varyant ?? null,
+ };
const ok = ekle(tercih);
if (!ok) {
return {
diff --git a/src/features/liste/liste-dogrula.ts b/src/features/liste/liste-dogrula.ts
index 2396a66..c63494d 100644
--- a/src/features/liste/liste-dogrula.ts
+++ b/src/features/liste/liste-dogrula.ts
@@ -30,6 +30,8 @@ export type ManuelTercih = {
/** Ekleme / profil anındaki aday sıralamasına göre risk */
risk: RiskSeviyesi | null;
kaynak?: ManuelKaynak;
+ /** Burs/dil/öğretim türü etiketi (Program.varyant); eski kayıtlarda yok */
+ varyant?: string | null;
};
/** Güvenilmeyen JSON'u (localStorage veya sunucu kaydı) listeye süzer. */
@@ -66,6 +68,7 @@ export function dogrula(ham: unknown): ManuelTercih[] {
: null,
risk,
kaynak,
+ varyant: typeof kayit.varyant === "string" ? kayit.varyant : null,
});
if (sonuc.length >= MANUEL_LISTE_MAX) break;
}
diff --git a/src/features/liste/liste-queries.ts b/src/features/liste/liste-queries.ts
index d716a2e..4f95cb7 100644
--- a/src/features/liste/liste-queries.ts
+++ b/src/features/liste/liste-queries.ts
@@ -25,6 +25,7 @@ export function programOzetle(p: Program): ProgramListeSatiri {
efektifSira: p.efektifSira,
kontenjanSon: p.kontenjanSon,
yerlesenSon: p.yerlesenSon,
+ varyant: p.varyant,
};
}