feat(liste): danışman profili havuzu süzer (önce profil gevşetilir) + KVKK metin düzeltmeleri
- db.ts OzellikSuzgeci (dil, yalnız örgün, yalnız burslu, ücret üst sınırı) program_ozellik alt sorgusuyla; tablo yoksa süzgeç yok. - rapor-havuzu: profilSuzgeci (ev ili + km → il listesi; sihirbazda il seçiliyse km uygulanmaz); havuz 24'ün altına düşerse gevşetme sırası profil → il → kategori. rapor.ts prompt'a 'danışmana söylediği tercihler' ve profil gevşetme notu; rapor-actions profili okuyup geçirir. - /meraklisina şeması (huni-semasi SEMA + aria-label + figcaption) ve 4. bölüm metni yeni adım ve gevşetme sırasıyla eşitlendi (AGENTS.md kuralı). - /api/soru: profil kaydı öncesi 'kaydedeyim mi?' onayı (PROFIL_ONAY_SOR). - Gizlilik metni kodla eşitlendi: OpenRouter→DeepSeek (Anthropic değil), profil satırı, amaç+hukuki sebep, saklama süreleri, md. 11 hakları, 18 yaş altı notu; unvan/adres ve aktarım dayanağı TODO. Giriş kartı: koşullar 'kabul', gizlilik 'okudum'. Sohbet girişine kişisel bilgi uyarısı. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { profilSatirlari, type DanismanProfili } from "@/lib/danisman-profil";
|
||||
import "server-only";
|
||||
import { z } from "zod";
|
||||
import type {
|
||||
@@ -231,8 +232,10 @@ export async function raporUret(
|
||||
params: RaporParams,
|
||||
revizyonNotu?: string,
|
||||
oncekiListeOzeti?: string,
|
||||
profil?: DanismanProfili,
|
||||
): Promise<RaporSonuc> {
|
||||
const { havuz, gevsetildi } = havuzOlustur(params);
|
||||
const { havuz, gevsetildi } = havuzOlustur(params, profil);
|
||||
const profilSatir = profil ? profilSatirlari(profil) : [];
|
||||
if (havuz.length < MIN_LISTE) {
|
||||
throw new RaporUretimHatasi(
|
||||
"Bu sıralama ve filtrelerle yeterli program bulunamadı. Daha geniş kategori veya il seçmeyi dene.",
|
||||
@@ -252,6 +255,11 @@ export async function raporUret(
|
||||
(params.universiteTipi && params.universiteTipi !== "farketmez");
|
||||
|
||||
const gevsetmeNotu: string[] = [];
|
||||
if (gevsetildi.includes("profil")) {
|
||||
gevsetmeNotu.push(
|
||||
"Adayın danışmana söylediği tercihlerle (aşağıda) yeterli program yoktu; havuz bu tercihler uygulanmadan kuruldu. Uyanları öne al ve uyarılarda bunu tek cümleyle söyle.",
|
||||
);
|
||||
}
|
||||
if (gevsetildi.includes("il")) {
|
||||
gevsetmeNotu.push(
|
||||
`Adayın seçtiği illerde yeterli program yoktu; havuza başka illerden de program eklendi. Seçili illere öncelik ver ama listeyi ${toplamHedef}'e tamamlamak için diğerlerini de kullan.`,
|
||||
@@ -280,6 +288,9 @@ export async function raporUret(
|
||||
})}\nSeçili kategori ve illere öncelik ver; havuzun elverdiği ölçüde bu seçimlere sadık kal.`
|
||||
: null,
|
||||
params.notlar ? `Adayın ek notları: ${params.notlar}` : null,
|
||||
profilSatir.length > 0
|
||||
? `ADAYIN DANIŞMANA SÖYLEDİĞİ TERCİHLER (havuz buna göre süzüldü; gerekçelerde uyanı belirt):\n${profilSatir.map((s) => `- ${s.metin}`).join("\n")}`
|
||||
: null,
|
||||
gevsetmeNotu.length > 0 ? gevsetmeNotu.join("\n") : null,
|
||||
revizyonNotu
|
||||
? `REVİZYON İSTEĞİ: Aday mevcut listede şu değişikliği istiyor: ${revizyonNotu}\nÖnceki listenin özeti: ${oncekiListeOzeti ?? "yok"}`
|
||||
|
||||
Reference in New Issue
Block a user