hikmettan
e07be66e7f
fix: expose tender detail loading errors and retry
2026-09-06 09:23:13 +03:00
hikmettan
a34b758430
fix: normalize Turkish search and isolate query item matches
2026-09-06 09:22:05 +03:00
hikmettan
efec6e434d
fix: order new tenders by validated publication time
2026-09-06 09:20:45 +03:00
hikmettan
f593d5e372
fix: export filtered tender list as real XLSX
2026-09-06 09:19:41 +03:00
hikmettan
9c7055a543
fix: align list expiry and date ordering with tender deadlines
2026-09-06 09:18:41 +03:00
hikmettan
a87ee758bc
fix: restrict PWA cache and report actual offline capabilities
2026-09-06 09:17:15 +03:00
hikmettan
37b10ce09a
fix: clean failed document uploads and surface filesystem errors
2026-09-06 09:15:34 +03:00
hikmettan
43dc4feb31
fix: validate document uploads and allow clearing expiry dates
2026-09-06 09:14:43 +03:00
hikmettan
0d2cf584e7
fix: require explicit choice for conflicting bid item sources
2026-09-06 09:13:26 +03:00
hikmettan
c3264149ea
fix: support keyboard navigation in tender details
2026-09-06 09:12:07 +03:00
hikmettan
2aaf56ce8b
fix: validate nested analysis fields before merging and preparation
2026-09-06 09:10:18 +03:00
hikmettan
144724484c
fix: align server deadlines and follow consumers with preparation state
2026-09-06 09:09:10 +03:00
hikmettan
7ad5fb4f50
fix: preserve newer tender note drafts after delayed saves
2026-09-06 09:07:23 +03:00
hikmettan
d4d9d17a9f
feat: verify offline user data backup and recovery
2026-09-06 09:04:03 +03:00
hikmettan
f88a0c7bfe
fix: persist explicit review status and align review counters
2026-09-06 09:02:28 +03:00
hikmettan
a9036cf909
feat: verify analysis citations against source text
2026-09-06 09:00:16 +03:00
hikmettan
0ae828163a
feat: analyze complete long documents in bounded source parts
2026-09-06 08:58:54 +03:00
hikmettan
90d85060f2
fix: expose incomplete AI analysis and track source versions
2026-09-06 08:57:32 +03:00
hikmettan
ca92bebb45
feat: export validated bid sheets as real Excel workbooks
2026-09-06 08:56:12 +03:00
hikmettan
2dfd32aa9c
fix: invalidate pending bid output when preparation changes
2026-09-06 08:54:22 +03:00
hikmettan
953d3b5c1e
feat: validate preparation against owned document files
2026-09-06 08:53:41 +03:00
hikmettan
0d332afdb1
feat: prepare bids by official lot selection
2026-09-06 08:52:07 +03:00
hikmettan
311344306b
fix: preserve Turkish decimal prices and verify preparation persistence
2026-09-06 08:50:18 +03:00
hikmettan
b94ab97241
fix: unify tender countdowns and add monthly calendar navigation
2026-09-06 08:47:44 +03:00
hikmettan
a291b186df
fix: isolate account state and ignore stale session responses
2026-09-06 08:46:05 +03:00
hikmettan
05c7e7ecdc
fix: share persisted preparation checks across analysis screens
2026-09-06 08:44:10 +03:00
hikmettan
e4b02f5dd3
feat: track document and health product preparation checks
2026-09-06 08:42:59 +03:00
hikmettan
465874ebbb
fix: bind bid prices and review to source content
2026-09-06 08:41:14 +03:00
hikmettan
456728b4bd
fix: preserve bid drafts and align tender source data
2026-09-06 08:40:10 +03:00
hikmettan
c91631d99f
fix: persist tender preparation and correct calendar export
2026-09-06 08:30:32 +03:00
hikmettan and Claude Fable 5.1
909ebae7c2
fix(pwa): önbellek v2 — yanlış MIME ile saklanan pdf worker temizlenir, bozuk JS yanıtları artık önbelleğe alınmaz
...
nginx düzeltmesi tek başına yetmezdi: servis çalışanı /assets/ dosyalarını
cache-first sakladığı için kullanıcıların tarayıcısındaki octet-stream'li
worker kopyası redeploy sonrasında da kullanılmaya devam ederdi. Sürüm
yükseltilince eski önbellek silinir; ayrıca .js/.mjs dosyaları yalnızca
JavaScript MIME tipiyle ve 200 ile geldiğinde saklanır.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-06 01:02:35 +03:00
hikmettan and Claude Fable 5.1
3a0403f07f
fix: PDF okuma — nginx .mjs worker dosyasını octet-stream sunuyordu, tarayıcı worker'ı reddediyordu
...
pdfjs worker'ı Vite tarafından pdf.worker.min-<hash>.mjs olarak üretiliyor.
Debian nginx'in mime.types dosyasında mjs uzantısı olmadığından dosya
application/octet-stream ile geliyor; tarayıcılar modül worker'ını yalnızca
JavaScript MIME tipiyle yüklediği için her PDF yüklemesinde
"Setting up fake worker failed: Failed to fetch dynamically imported module"
hatası çıkıyor, belge analizi tamamlanamıyordu. mjs → application/javascript
eşlemesi eklendi (nginx -t ile doğrulandı).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-06 01:02:04 +03:00
hikmettan and Claude Fable 5.1
2271883be4
fix: EKAP dokümanları açılmıyor — yeni sekme tıklama anında açılıyor, boşluklu İKN'ler düzeltildi
...
İki ayrı neden vardı:
1) window.open sunucu yanıtından SONRA çağrılıyordu; Safari, PWA ve sıkı ayarlı
Chrome bunu açılır-pencere sayıp sessizce engelliyordu — düğme "çalışmıyor"
görünüyordu. Sekme artık tıklamanın hemen içinde boş açılır, adres gelince
yönlendirilir. Engellenirse gerçek bir bağlantı (a href) gösterilir; bağlantı
tıklaması hiçbir tarayıcıda engellenmez.
2) ilan.gov.tr bazı kayıtlarda İKN'yi başta/sonda boşluk ve kesme boşluğu (nbsp)
ile veriyor (" 2026/1622878"). Bu 50 kayıtta panel "EKAP formatında değil"
deyip düğmeyi hiç göstermiyordu. İKN artık alınırken boşluksuz saklanıyor;
panel ve doküman araması da savunma amaçlı temizliyor.
Ayrıca: "EKAP'ta 0 doküman kayıtlı" yanıltıcı metni kaldırıldı (EKAP arama
kaydı sayıyı vermiyor), EKAP'ın önce güvenlik doğrulaması istediği açıklandı.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-05 23:53:43 +03:00
hikmettan and Claude Fable 5.1
8e9dff6833
TED çevirisi: parçalar 3'lü eşzamanlı — 30 ilanlık liste daha hızlı tamamlanır
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-05 17:08:46 +03:00
hikmettan and Claude Fable 5.1
c32446db81
AB İhaleleri (TED): başlık ve açıklamalar Türkçe
...
- server/ted-ceviri.mjs: TED'in kendi Türkçe alanı varsa onu kullanır; yoksa
OpenRouter ile toplu çevirir (deepseek-v4-flash → gemini 3.7 flash → glm),
sonucu server/data/ted.sqlite'ta ilan numarasına göre saklar
- İstek en fazla 12 sn bekler, kalan çeviriler arka planda sürer;
yanıt ceviriBekleniyor bayrağı taşır, ön yüz sessizce yeniden çeker
- Kartta Türkçe başlık + küçük özgün başlık, Türkçe açıklama (3 satır),
ülke kodları Türkçe ad (TUR → Türkiye, AUT → Avusturya…)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-05 15:58:28 +03:00
hikmettan and Claude Fable 5.1
eeb1447edc
Kalan kişisel varsayılanlar: firma sitesi tarama URL'si ve sonuç kartı kazanan yedeği
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-05 15:36:37 +03:00
hikmettan and Claude Fable 5.1
782b361d24
feat: Gemini Flash ücretli yedek — analiz zincirinin sonunda her zaman denenir
...
Panelde seçilen modeller tıkanınca (limit/429) şartname analizi ve teklif asistanı
boş kalıyordu; analyzeSpec zincire yoksa 'gemini'yi sona ekler. Panel ve kılavuz notu.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-05 13:45:04 +03:00
hikmettan and Claude Fable 5.1
08c0a0af7e
Kullanıcı testi hataları: sabit tarihler, kişisel varsayılanlar, kılavuz düğmesi, mobil başlık, AI taslak çökmesi
...
- Günlük Bülten ve İhale Takvimi sabit "10.08.2026" yerine bugünden hesaplar;
takvim 7 günü gerçek ihale tarihleriyle sayar
- Ekip/üye/firma varsayılanları oturumdaki kullanıcıdan; sahte "Ekip Notları"
ve sabit "%94 Uyum" rozeti kaldırıldı (gerçek uyum skoru varsa gösterilir)
- Kılavuz düğmesi document.body'ye portal (ekran dışına düşüyordu)
- Detay modalı havuzdaki güncel kaydı okur: Takip Et / Görev aç etiketleri güncellenir
- Mobil: başlıkta ikincil düğmeler md altında gizli, arama formu küçülebilir
- PWA sayfası: sahte önbellek sayıları yerine Cache API ve bellek sayımı
- Sözleşme sorgula pazar payı bir ondalık (hep %0 görünüyordu)
- Rakip Radar "SMS" vaadi düzeltildi; sektör=CPV etiketi tekrarı gizlendi;
Stripe kurulum uyarısı yalnız yöneticiye
- Açılışta 7 gereksiz PUT /api/me/data: ilk yükleme yazımı atlanır
- server: teklif taslağı çökmesi (kalemOku nesne döndürür), denetim yanıtından
model adı kaldırıldı, gereklilikler satır bazlı; derin analiz 12k token +
kesik JSON onarımı
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-05 09:43:41 +03:00
hikmettan and Claude Fable 5.1
6d7d938711
Sekme şeridi: 19 sekmeye kendi rengi (ikon tonu + aktif dolgu) — menü daha belirgin
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-05 08:32:03 +03:00
hikmettan and Claude Fable 5.1
6f33adc1b6
feat: landing sayfasına taşınan yeni özellikler (Teklif Asistanı, yeterlilik, MCP+RSS, haftalık brief, yeni bayrak kuralları)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-04 11:04:19 +03:00
hikmettan and Claude Fable 5.1
25dde198d7
Landing: 'Yeni eklenenler' bölümü (11 yetenek) + derin analiz kartı + Yenilikler nav bağlantısı
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-04 10:03:17 +03:00
hikmettan and Claude Fable 5.1
48f0c48732
feat: İhaleAB'den taşınan özellikler — MCP sunucusu, RSS, haftalık brief, teklif asistanı, yeterlilik rozeti, 5 yeni kırmızı bayrak
...
- /mcp (JSON-RPC, ih_live_ anahtarı): search_tenders, get_tender, search_results, search_items, upcoming_deadlines
- /api/feeds/tenders.rss (anahtarlı) ve /api/feeds/sonuc.rss (açık)
- Haftalık brief (Pazartesi 08:00, Telegram + e-posta), /api/me/brief tercihi + önizleme, sağ panelde yaklaşan ihale tarihleri
- Detayda Teklif Asistanı sekmesi: belgeye sor (atıflı), taslak denetimi, taslak üretimi (analyzeSpec zinciri)
- Derin analiz belge listesi × Doküman Deposu eşleştirme rozeti
- Kırmızı bayrak: kısa süre, hafta sonu tarih, geç sözleşme, kazananı gizli, DT parçalama şüphesi
- Kullanım kılavuzu güncellendi
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-04 02:23:41 +03:00
hikmettan and Claude Fable 5.1
fabff18fe9
feat: mobil uyumlu PWA — manifest, service worker, gercek kurulum, filtre cekmecesi
...
- public/manifest.webmanifest (standalone, tr, kisayollar) + 192/512 ve
maskable ikonlar + apple-touch-icon; index.html PWA meta etiketleri
- public/sw.js: /assets cache-first (hash'li adlar), kabuk network-first,
/api ASLA onbellekten (eski ihale gosterilmesin); surum degisince temizlik
- main.jsx: SW yalniz uretimde kaydedilir (dev'de HMR ile cakismasin)
- Mobil PWA sayfasindaki "Cihaza Yukle" dugmesi sahteydi (setInstalled(true));
artik beforeinstallprompt ile gercek kurulum, standalone algilama, iOS/
Android/masaustu yol tarifi
- Kucuk ekranda sol filtre paneli listeyi 72 satir asagi itiyordu: lg altinda
"Filtreler" dugmesiyle acilan cekmece; sag panel xl altinda gizli
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-04 00:39:40 +03:00
hikmettan and Claude Fable 5.1
acec88a4c4
feat: her sayfada sagdan acilan kullanim kilavuzu (? dugmesi / ? tusu), sekmeye gore icerik
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-04 00:36:55 +03:00
hikmettan and Claude Fable 5.1
91b8ea94b8
feat: sinir deger hesaplayici — Tebliğ md. 79/45 formulleri, 2026 R katsayilari
...
Formuller kaynagindan alindi (mevzuat.gov.tr Kamu Ihale Genel Tebligi,
kullanicinin Chrome'u uzerinden okundu; formuller Teblig'de gorsel oldugu icin
ekran goruntusunden):
- Md. 79.1.2 hizmet (personel dayali olmayan): SD = ((YM + ΣT)/(n+1)) × R,
YM'nin %60 alti ve YM ustu teklifler haric
- Md. 79.1.1 personel calistirmaya dayali: SD = kar haric YM
- Md. 62/A.1 (RG 9/4/2026): mal aliminda 79 uygulanir
- Md. 45.1.1 yapim: Tort1/σ/Tort2, C = Tort2/YM, K parcali, SD = K×Tort2/(C×N);
N 1,00 (B/C/D/E gruplari) veya 1,20 (45.1.1.1)
- R katsayilari: KIK Kurul karari 21.01.2026 (.doc'tan okundu): arac kiralama
0,77, bilgisayar 0,87, yemek 0,77, muhendislik 0,72, sigorta 0,74, tasima
0,78, diger 0,78
Dogrulama: Teblig'in kendi 45.2 ornegi (YM 100.000, N 1,20, 12 teklif) ile
birebir — Tort1 66.270,00, σ 20.317,05, Tort2 63.237,50, C 0,632, K 0,627,
SD 52.281,00. Yuvarlama kurallari ornekteki gibi (2/3 ondalik).
Arac: ust menude "Sinir Deger"; alim turu, YM, teklif listesi, R/N secimi,
"benim teklifim sinirin altinda mi" uyarisi, adim adim hesap.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-04 00:16:58 +03:00
hikmettan and Claude Fable 5.1
df89eaac33
feat: takip izleme (zeyilname + sonuc bildirimi), hazirlik gorevi, belge sure uyarisi, Telegram, OCR, yasakli sorgu
...
28 depo taramasindan alinan alti ozellik. Kod kopyalanmadi (depolar
lisanssiz), fikirler uygulandi.
1) Zeyilname / duzeltme ilani takibi (server/zeyilname.mjs): takipteki
IKN'ler sunucuya yazilir; 3 saatte bir EKAP detayindan ilan sayisi ve
ihale tarihi karsilastirilir, degisince "ne degisti" bildirimi (uygulama
ici + e-posta + Telegram). Test: anlik kaydi eskitilince tur "yeni ilan
yayimlandi; ihale tarihi 01.01.2026 → 08.10.2026" bildirimi uretti.
2) Sonuc bildirimi: takipteki ihale sonuclaninca "X firmasi Y'ye aldi, %Z
kirim". Yalniz takiptekiler; kismi ihalede oran yazilmaz.
3) Ihaleden goreve (MOBIT-DURT): detayda "Hazirlik Gorevi Ac" → teslim
tarihi ihale saati, pano "Teklif Hazirlaniyor", derin analizden gelen
belge kontrol listesi gorevde; Kanban kartinda geri sayim rozeti.
4) Sirket belgesi sure takibi: Belge Kasasi'nda son kullanma tarihi girisi,
dolmus / 30 gun icinde dolacak uyarisi; girise gunde bir bildirim.
PATCH /api/me/documents/meta.
5) Telegram (server/telegram.mjs): TELEGRAM_BOT_TOKEN sunucuda; kullanici
6 haneli kodu bota yazar, "Dogrula" → getUpdates ile chat id baglanir.
Arayuzde adim adim kurulum rehberi (BotFather → env → Redeploy → kod).
Ihale ozeti, zeyilname ve sonuc bildirimleri Telegram'a da gider.
6) OCR (tesseract.js, tur): PDF metin katmani bossa (taranmis) ilk 8 sayfa
OCR. Olcum: sentetik cetvelde guven 87, ~0,3 sn/sayfa; IKN ve kalemler
dogru okundu. Kalem havuzu ve derin analiz artik taranmis PDF'ten de
besleniyor.
7) Rakip Radari'nda KIK yasakli sorgusu baglantisi (firma adi panoya
kopyalanir; EKAP sorguyu API'den vermiyor).
Sinir deger hesaplayici KURULMADI: Kamu Ihale Genel Tebligi'ne ulasilamadi
(mevzuat.gov.tr / ihale.gov.tr bu makineden erisilemiyor); formul kaynaksiz
yazilmadi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-03 22:58:13 +03:00
hikmettan and Claude Fable 5.1
1716b6365c
feat: hibrit uyum skoru (sozluksel + anlamsal bonus) ve firma esigi
...
Anlamsal bonus: profil metni sunucuda gomulur (multilingual-e5-small, ONNX
q8, @huggingface/transformers — Python/GPU yok), havuzdaki her ihaleyle
kosinus alinir, havuz ici z-skor → +0..20 puan. Sozluksel skor ana eksen
kalir; bonus eklenir. Sozluksel 0 iken bonus yalniz ≥10'sa gorunur.
NEDEN BONUS, ESIK DEGIL (olculdu): e5 kosinusleri 0,79-0,86 bandina
sikisiyor (havuz ort 0,814 sd 0,026); kirtasiye ile rontgen arasi 0,06.
kaanvp/kobi-ihale-eslestirme'nin 0,65 esigiyle trafo bakimi da "eslesti"
sayilirdi. Ama siralama dogru ve sozlukselin kacirdigini yakaliyor: "GENEL
TIBBI SARF" profilde birebir terim yokken kirtasiyenin ustune cikiyor.
- server/uyum-gomme.mjs: acilista arka planda isitma (~45 sn soguk), ihale
gommeleri bellekte (metin imzasi degisince yenilenir), model data/modeller
volume'unda bir kez indirilir; paket/yukleme yoksa sessizce kapali
- POST /api/uyum/gomme, GET /api/health/uyum
- Dockerfile: calisma imajina @huggingface/transformers@3 (package.json'a
degil — sunucu sifir-bagimlilik, calisma katmani ayri npm i)
- Olculen: 3.2 bin ihale ilk cagri 7,6 sn (tumu gomuluyor), ikinci 17 ms;
+20 alan 170, ≥10 alan 610 ihale
Firma esigi: profilde uyumEsigi (varsayilan 60, kalici); "Uyumlu" hizli
filtresi bu esigi kullanir; profil modalinda kaydirici + bonus durumu.
Modaldaki "%98+ dogruluk" cumlesi kaldirildi — olculmemis iddiaydi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-03 22:32:23 +03:00
hikmettan and Claude Fable 5.1
2c70ed9d71
fix: kismi ihalede sahte kirim orani — maliyet tum ihale, bedel kisim basina
...
Sonuc ayristirici yaklasik maliyeti TUM ihale icin okuyor
((?<!Kısımlarının )Yaklaşık Maliyeti), sozlesme bedeli ise kisim basina
satir. 11 kisimlik ilac ihalesinin ilk kismi 1,6 milyon tahmine karsi 25 bine
verilmisse rakip radarinda "%98 kirim" cikiyordu — aritmetik kurgu.
Kirim artik yalnizca tek sonuc satiri olan (kisimsiz) ihalelerde
hesaplaniyor. Yanlis bir oran, hic oran olmamasindan kotudur.
Test: A (kisimsiz) → %20; B ve C (ayni IKN, iki kisim) → null.
Bulgu kaynagi: erenulutas0/MOBIT-DURT README "olcerek cozulmus uc tuzak".
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-03 22:19:15 +03:00
hikmettan and Claude Fable 5.1
17c781a9ba
feat: gercek sirket-ihale uyum skoru — sahte %98 rozeti gitti
...
Karttaki "%N Uyumlu" rozeti sabit yazili degerlerdi (liveTenderService
98/95/91/99), sunucudan null geliyordu. Artik profil terimleri ile ihale
metni arasinda agirlikli sozcuk eslesmesi (src/services/uyum.js):
- terimler: urunler (1.0), ihale konulari (1.0), sektorler (0.6),
sertifikalar (0.3); "ve/alimi/malzeme" gibi durma kelimeleri sayilmaz
- alanlar: baslik (1.0), teklif cetveli kalemleri (1.1 — en guclu sinyal),
OKAS/CPV (0.7), ilan metni (0.6), sektor (0.5)
- doygunluk egrisi: 1 guclu eslesme ≈ 55, 2 ≈ 75, 3+ ≈ 90
- profilde terim yoksa skor null → sahte yuzde gosterilmez
- her skorun nedeni var: kartta ipucu, detayda "‘eldiven’ · teklif cetveli"
Olculen: "VETERINER ILAC VE SARF MALZEME" basligi hicbir urunu icermiyor ama
kalemlerinde ELDIVEN + HEMOGRAM KITI var → %86; kirtasiye → 0.
- Siralama: "Sirketime En Uyumlu"; hizli filtre 'uyumlu' (≥60)
- Profil yetkinlikleri artik kalici (localStorage + sunucu 'firma_profil');
onceden sayfa yenilenince siliniyordu
- Web sitesi taramasi gercek uca bagli (/api/company/scan: site metni +
model → sektorler/urunler/sertifikalar/ihaleKonulari); basarisizsa eski
alan-adi tahmini yedek. Onceden 1,5 sn setTimeout ile taklitti.
Sozluksel yol bilincli: dis servis yok, 8 bin ihalede aninda, deterministik,
aciklanabilir. Embedding katmani istenirse ustune eklenebilir.
(Fikir: kaanvp/kobi-ihale-eslestirme'nin esik + aciklama deseni; kod alinmadi.)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-03 21:51:28 +03:00
hikmettan and Claude Fable 5.1
1fce9df06f
feat: OKAS kod aramasi, toplu ihale dokumani yukleme, kazanan istihbarati
...
Uc ozellik, 27+1 depo taramasinda gorulen fikirlerden; kod kopyalanmadi
(ilgili depolar lisanssiz), uygulamalar sifirdan yazildi.
1) OKAS koduyla arama (fikir: firatbadur/ihaletakip-api'nin kullandigi
IhtiyacKalemleri/GetAll ucu). EKAP'in kendi OKAS katalogunda ad ile
(TR/EN) arama: "ortoped" → 33141700 Ortopedik malzemeler, 33183000
Ortopedik destek cihazlari. Secilen kodla EKAP'ta ihale aramasi
(okasBransKodList). Olculen: 33141700 altinda 335 ihale, basliklari
"VETERINER ILAC VE SARF MALZEME" — basliktan gorunmeyen turden.
- ekap-v2.mjs: okasAra(), searchByOkas(); sonuc normalize ortak
- GET /api/okas/ara?q= (1 sa onbellek); /api/urun-ara?okas=kod,kod
- Urun Arama modalinda "OKAS koduyla" modu (katalog onerisi + cok kod)
- Sol menude CPV bolumunun ustunde OKAS kutusu: kod secilince modal
o kodla acilip hemen arar
2) Toplu ihale dokumani yukleme (fikir: barkem-tayyar/ihale'nin izlenen
klasor + extractIkn deseni). Belge Kasasi'na coklu dosya secimi: her
dosyanin IKN'si METNINDEN bulunur ("Ihale Kayit Numarasi (IKN):
2026/1166496"), kullaniciya sorulmaz; ihaleye baglanir ve teklif
cetveli kalemleri otomatik havuza yazilir. Onlarca sartnameyi tek
seferde atarak kalem havuzunu hizla doldurmak icin.
- kalem-cikar.mjs#iknCikar + istemci esi (PDF tarayicida okunuyor)
- Yukleme ucu: otoIkn → ofis metninden IKN; donuste ikn alani
- Dosya basina sonuc satiri: IKN / kalem sayisi / "IKN bulunamadi"
Dogrulandi: ikn parametresiz docx → 2026/1588948 bulundu, 2 kalem.
3) Kazanan istihbarati (fikir: gulmezeren2-byte/ihalent, MIT). Rakip
Radari'nda firma basina kirim orani (1 − sozlesme/yaklasik maliyet,
ortalama), ortalama gecerli teklif sayisi (rekabet derinligi) ve tek
teklifle kazanma orani. Veri yoksa null — 0 ile karismasin; bedel >
maliyet×1,5 olan bozuk satirlar orana katilmiyor.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-03 20:16:53 +03:00