CPV/OKAS ham kod sınıflandırması: yayınlanmadan önce tamamlanan bir gate + sidebar filtresi

- server/cpv-classify.mjs (yeni): existing (kalem kodu) → keyword (66 kural, 45 OKAS_BOLUM kodunun tamamı kapsanıyor) → AI (analyzeSpec, sadece sözlükte gerçekten var olan kod kabul edilir) hibrit sınıflandırma
- server/index.js: cache.tenders'a eklenmeden ÖNCE her ihale için CPV sınıflandırması await'leniyor (mevcut "sektör" alanının aksine, sonradan zenginleştirilmiyor) — hem ilk yükleme hem arka plan tamamlama yolunda
- İKN bazlı kalıcı SQLite önbellek (history-store.mjs) — aynı ilan bir daha asla yeniden sınıflandırılmıyor
- /api/meta/filtreler artık cpvBolumler döndürüyor
- Frontend: Sektörler'in hemen altına CPV Kodu filtresi (arama + çoklu seçim), ihale kartında CPV rozeti, landing page'de yeni özellik: "AB uyumlu CPV sınıflandırması — Türkiye'de ilk"
This commit is contained in:
2026-08-30 14:00:56 +03:00
parent f98568da8e
commit c5662d2e60
10 changed files with 490 additions and 15 deletions
+2 -2
View File
@@ -115,7 +115,7 @@ export function ilanKonusu(metin) {
// temizlik ürünleri, 79 = hem güvenlik hem matbaa hem danışmanlık); onlar için
// daha uzun ön ek tanımlanır ve uzun olan kazanır.
const OKAS_GRUP = {
export const OKAS_GRUP = {
// 39 — mobilya / ev aletleri / temizlik ürünleri aynı bölümde
'3971': 'Isıtma & İklimlendirme', // elektrikli ev aletleri (buzdolabı, klima)
'3922': 'Temizlik & Hijyen', // süpürge, fırça, temizlik gereçleri
@@ -158,7 +158,7 @@ const OKAS_GRUP = {
'9042': 'Su & Arıtma',
};
const OKAS_BOLUM = {
export const OKAS_BOLUM = {
'03': 'Tarım & Hayvancılık',
'09': 'Akaryakıt & Yakıt',
'14': 'İnşaat & Bakım',