hikmettan
372c0e76e0
Fix API key error states and verify revocation lifecycle
2026-09-06 10:37:14 +03:00
hikmettan
21e80d0dd6
Expose partial item search failures and allow query-scoped retries
2026-09-06 10:31:58 +03:00
hikmettan
0c16bbd96f
Surface shared inventory failures and isolate test database storage
2026-09-06 10:30:51 +03:00
hikmettan
dbe43c241d
Recheck tender deadlines before preparation output delivery
2026-09-06 10:29:17 +03:00
hikmettan
cb231426e8
Record browser acceptance for document previews across tender switches
2026-09-06 10:28:00 +03:00
hikmettan
7e1e5fe0a1
Scope tender document workflows to the active account and tender
2026-09-06 10:26:49 +03:00
hikmettan
2164494c32
Cancel vault rereading without persisting a false document error
2026-09-06 10:25:17 +03:00
hikmettan
3ad9348c20
Cancel PDF reading and OCR when the offer assistant closes
2026-09-06 10:24:07 +03:00
hikmettan
d534ea20b9
Cancel disconnected offer analysis and stop remaining provider calls
2026-09-06 10:22:29 +03:00
hikmettan
673d6c1bc8
Audit all supplied requirements across complete long drafts
2026-09-06 10:20:37 +03:00
hikmettan
c3ec8c8ba8
Honor explicitly supplied sources and disclose draft source changes
2026-09-06 10:18:28 +03:00
hikmettan
2b9e1953e4
Restrict preparation document links to their tender scope
2026-09-06 10:17:14 +03:00
hikmettan
91451b1134
Distinguish shared item inventory from tender rows and load errors
2026-09-06 10:15:53 +03:00
hikmettan
0fd46c4867
Verify provider failure preserves drafts and improve user feedback
2026-09-06 10:14:29 +03:00
hikmettan
a1d70b9dcf
Validate assistant response contracts and bound AI request waiting
2026-09-06 10:12:53 +03:00
hikmettan
996cc15245
Preserve full draft sections and disclose missing requested content
2026-09-06 10:11:44 +03:00
hikmettan
a78aaef7e5
Preserve question source chunks and reject fabricated citations
2026-09-06 10:10:26 +03:00
hikmettan
0b3bb8223f
Require real draft evidence for offer audit findings
2026-09-06 10:09:12 +03:00
hikmettan
ecc031a822
Bind offer assistant requests and private context to their session
2026-09-06 10:08:03 +03:00
hikmettan
132bd815c6
Populate search detail summaries from EKAP announcement tables
2026-09-06 10:06:23 +03:00
hikmettan
a136a74a1b
Open and retain tender details discovered outside the main pool
2026-09-06 10:01:34 +03:00
hikmettan
819a10c006
Add modal keyboard navigation and focus restoration to product search
2026-09-06 09:59:23 +03:00
hikmettan
5895f60b28
Make mobile filters a keyboard-accessible modal drawer
2026-09-06 09:56:34 +03:00
hikmettan
3550f1a9bc
Fix list and header overflow on mobile and tablet widths
2026-09-06 09:54:48 +03:00
hikmettan
af250c0980
Record browser acceptance for persisted and conflicting document reviews
2026-09-06 09:52:32 +03:00
hikmettan
ad7f8746a0
Verify current document review before bid outputs
2026-09-06 09:50:16 +03:00
hikmettan
742e05933e
Analyze server-resolved document reviews with revision checks
2026-09-06 09:49:30 +03:00
hikmettan
e49593be46
Add source-comparison form for versioned document text reviews
2026-09-06 09:48:09 +03:00
hikmettan
559a2feeda
Persist versioned document text reviews against source file hashes
2026-09-06 09:47:12 +03:00
hikmettan
f073438922
Carry OCR and missing-source warnings into analysis readiness
2026-09-06 09:45:33 +03:00
hikmettan
49965a2688
Expose document text and OCR page provenance for review
2026-09-06 09:44:06 +03:00
hikmettan
b340cf5772
Read complete PDFs and surface per-page OCR failures
2026-09-06 09:42:35 +03:00
hikmettan
01d4acf246
Verify stored PDF retry in browser and clarify upload errors
2026-09-06 09:41:17 +03:00
hikmettan
277c9407a2
Keep vault state and file transfers within their originating session
2026-09-06 09:39:05 +03:00
hikmettan
6dc6fadda8
Share stored document retry flow across tender detail and vault
2026-09-06 09:37:56 +03:00
hikmettan
ba1f93bd76
Persist client document read failures with stale-state protection
2026-09-06 09:36:47 +03:00
hikmettan
a109c2e548
Allow retrying item extraction from stored tender documents
2026-09-06 09:35:51 +03:00
hikmettan
32ea749669
Persist document processing outcomes separately from upload success
2026-09-06 09:34:52 +03:00
hikmettan
ece623d86c
fix: separate private company documents from shared tender item imports
2026-09-06 09:30:37 +03:00
hikmettan
5e9f17969c
fix: provide visible prepared Excel download link
2026-09-06 09:28:58 +03:00
hikmettan
90fc789a7a
test: record integrated search and preparation browser evidence
2026-09-06 09:27:35 +03:00
hikmettan
bc71984847
fix: enforce source-backed offer type in bid preparation
2026-09-06 09:25:51 +03:00
hikmettan
a751147d45
fix: carry source-backed bid validity into preparation drafts
2026-09-06 09:24:38 +03:00
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
hikmettan and Claude Opus 5
9c142fa0f8
feat: EKAP imzalama anahtari rotasyona girince kendini toparlasin
...
Anahtar sabit kodluydu (EKAP_R8FACT_KEY ile gecilebiliyordu). EKAP anahtari
donemsel degistiriyor; degistigi anda ihale havuzu tamamen karariyor ve birinin
elle yeni anahtari bulup env'e yazmasi gerekiyordu.
Artik kimlik dogrulama hatasindan sonra anahtar portalin kendi paketinden
kesfediliyor. Zincir canli EKAP'ta dogrulandi:
/ekap/search → <script src="main.<hash>.js">
main.<hash>.js → webpack chunk haritasi; 2076 ozel olarak "common" adiyla
yayimlaniyor: y=>(2076===y?"common":y)+"."+{...}
common.<hash>.js → r8fact:"<32 baytlik anahtar>"
Kesfedilen deger su anki sabit anahtarla birebir ayni cikti — zincir dogru.
- Kesif YALNIZCA yedek: normalde sabit/env anahtar kullanilir, kesif ancak
401/403/5xx sonrasi ve istek basina BIR KEZ denenir (gercek sunucu hatasinda
her denemede portalden uc dosya indirmeyelim)
- 5xx de tetikliyor: EKAP gecersiz anahtari bazen 401, bazen 500 ile bildiriyor
(imza cozulemeyince sifre cozme katmani patliyor); yalnizca 401'e bakmak
rotasyonun yarisini kacirirdi
- Basari 1 sa, basarisizlik 5 dk onbellekleniyor
- Anahtar 32 bayt degilse kullanilmiyor — sema degismis demektir, korlemesine
denemek yerine mevcut anahtarla devam edilir
- SPA fallback tuzagi: bilinmeyen yol HTTP 200 + index.html donduruyor; JS
beklenen isteklerde HTML gelirse hata veriliyor (sessiz basarisizlik olmasin)
Sahte rotasyon testi: bozuk anahtarla EKAP 500 dondu → kesif devreye girdi →
dogru anahtar bulundu → tekrar denendi → arama basarili (860 ms).
Bulgu kaynagi: saidsurucu/ihale-mcp taramasinda gorulen imza semasi ve
firatbadur/ihaletakip-api'nin belgeledigi rotasyon davranisi. Ilgili depo
lisanssiz oldugu icin kod kopyalanmadi, uygulama sifirdan yazildi.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-03 20:04:11 +03:00
hikmettan and Claude Opus 5
ff797f5a91
feat: urun arama — urun adini ihale DOKUMANLARININ icinde aratir
...
saidsurucu/ihale-mcp deposu incelenirken EKAP arama API'sinin doküman ici
arama parametreleri oldugu goruldu: teklifCetvelindeAra, teknikSartnamedeAra,
idariSartnamedeAra, sozlesmeTasarisindaAra. EKAP dokumani kendi tarafinda
indeksliyor — yani teklif cetvelinde arama icin dokumani indirmeye (ve
CAPTCHA'ya) gerek yok.
Kullanicinin sikayetini olcen kanit:
ELDIVEN basliкta 1.135 → teklif cetvelinde 29.057
ORTOPEDIK VIDA baslikta 0 → teklif cetvelinde 3
HEMOGRAM baslikta 283 → teklif cetvelinde 2.529
"ORTOPEDIK VIDA" hicbir ihale BASLIGINDA gecmiyor; gectigi ihalelerin adi
"VETERINER ILAC ... SARF MALZEME". Basliga bakan firma bunlari bulamiyordu.
- ekap-v2.mjs: searchBody artik opts.kapsam ile daraltilabiliyor;
searchInDocuments() yalnizca teklif cetvelinde (istege bagli teknik
sartnamede) arar ve sonucu normalize eder
- GET /api/urun-ara?q=&skip=&take=&teknik= — 5 dk bellek onbellegi ile
(EKAP'a uzak cagri, ayni sorgu kaynagi yormasin)
- Header'da "URUN ARA" dugmesi + UrunAramaModal: sayfalama, "sadece teklif
verilebilir" suzgeci, havuzda acik olan ihalede detayi acma kisayolu
SINIR: EKAP hangi kalemin eslestigini dondurmuyor, yalnizca eslesen ihaleleri.
Kalem dokumu icin dokuman yuklemeye dayali ortak havuz yolu gecerli kaliyor;
arayuzde bu acikca yaziliyor.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-03 12:55:36 +03:00
hikmettan and Claude Opus 5
8826ff8e68
feat: ortak kalem havuzu — teklif cetveli kalemleri kartta gorunur ve aranabilir
...
Firmalar ihalenin sadece basligina bakarak kendi urunlerinin icinde olup
olmadigini goremiyordu ("148 KALEM KIRTASIYE MALZEME ALIMI"). Artik bir
kullanici ihale dokumanini yukledinde teklif cetveli kalemleri ayristirilip
IKN'ye baglaniyor ve o ihale HERKESIN kartinda kalemleriyle gorunuyor.
NEDEN YUKLEMEYE DAYALI: kalem listesi EKAP'in programatik yuzeyinde yok.
- Arama/detay API'si (ihtiyacKalemiOkasList) yalnizca OKAS sinifi veriyor:
"KALP AKCIGER POMPASI CIHAZI ALIMI" icin tek satir "Tibbi cihazlar"
- Ilan metni yalnizca sayiyi veriyor: "148 KALEM ... Ayrintili bilgiye EKAP'ta
yer alan ihale dokumani icinde bulunan idari sartnameden ulasilabilir"
- Dokuman sayfasi CAPTCHA ile korunuyor (ctl00_btnCaptchaProtect, guvenlik
resmi). Gercek tarayiciyla (Playwright) da acildi, donen tek metin: "Dogrula"
OTOMATIK, AI'SIZ: kalem cikarimi yukleme aninda kendiliginden calisir,
kullanicidan tiklama beklemez ve model cagirmaz (saf regex). AI analizi ayri
dugmede, kullanici isterse.
- server/kalem-cikar.mjs: teklif cetveli ayristirici. " | " tablolarindan
(docx/xlsx/zip) sutun basligini cozerek; ayracsiz PDF metninde sezgisel
satir kalibiyla. Miktar+birim tek hucrede olabiliyor ("25000 TEST").
Birim listesinde 'test' var — tibbi kitlerde kalem miktari boyle yaziliyor.
- server/kalem-store.mjs: kalem.sqlite, IKN bazli, Turkce duyarli arama.
Bos ayristirma mevcut iyi veriyi silmez.
- Uclar: POST /api/kalem/cikar (tarayicidan gelen PDF metni), GET /api/kalem,
GET /api/kalem/ara, GET /api/health/kalem
- /api/tenders payloadu kalemSayisi + ilk kalemleri tasiyor
- Kartta kalem rozeti ve kalem seridi; aramada eslesen kalemler one alinir
- Ust arama kutusu kalem havuzunda da ariyor (350ms debounce, sunucu tarafi)
- Detay modalinda tam kalem listesi + kalem ici arama
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-03 11:51:39 +03:00
hikmettan and Claude Fable 5.1
b41bc338af
fix: analiz icin dosya yuklenemiyordu — nginx varsayilan 1 MB govde siniri 413 veriyordu (arayuz 10 MB vaat ediyor); 20 MB + 300 sn zaman asimi, 413/504 icin anlasilir hata mesaji, 10 MB on kontrol
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-02 13:48:22 +03:00
hikmettan and Claude Fable 5.1
920a147126
fix: ust serit tiklaninca donuyordu — Kanban havuzdaki tum ihaleleri (8 bin+ kart) ciziyordu; artik yalnizca takipteki/kolona tasinan ihaleler, sekme gecisi transition ile aninda vurgulaniyor
...
- KanbanBoard: sunucu her ilana varsayilan 'incelenecek' verdigi icin bos pano 8.372 kart basiyordu; yalnizca takipte veya kolona tasinmis ihaleler kaliyor
- TopNavigation: useTransition + spinner; agir sekmelerde tiklama karsiliksiz kalmiyor
- sunucu: 'yeni liste eskisinden kucukse alma' kurali havuzu 30 Agustos zirvesinde dondurmustu (gunlerce yeni ilan yok); eksiksiz inen liste her zaman devrede
- sunucu: isYeni/bugun eklenen UTC-TR gun farkindan hep 0'di; Europe/Istanbul gunune gore ve her yanitta tazeleniyor (eklenmeZamani da donmuyor)
- ust kartlar: 'bugun eklenenler' tum ilanlari sayiyordu ('once' metnine bakiyordu), 'son giristen beri' sabit 14'tu; sayimlar liste filtresiyle ayni olcut (ihaleTarih.js), arsiv/sonuclanan filtreleri 'sadece acik' kapisina takilmiyor
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-02 13:02:40 +03:00
hikmettan
3eb0f91823
feat: derin analiz & yol haritasi + ihale dosyasi hazirlama; docx/xlsx/zip okunuyor
...
Doküman panelindeki "Tum Evraki Derin Analiz Et" dugmesi EKAP ilan metnini ve
ihaleye yuklenmis butun belgeleri TEK metinde birlestirip gonderiyor; model
sartnameyi ilanla ve eklerle capraz okuyabiliyor.
Derin analiz (mode='derin', ayri sistem istemi + 8000 token):
- Teklifi gecersiz kilabilecek noktalar (kirmizi uyari, en ustte)
- Gozden kacan ince detaylar (Kritik/Yuksek/Orta + madde no + neden onemli)
- Alinacak kalemler: aranan evsaflar, miktar, sartnamede geciyorsa fiyat
(modele "TAHMIN URETME" talimati verildi, yoksa null)
- Belge kontrol listesi, kritik tarihler, maliyet kalemleri
- Teklife kadar yol haritasi (faz / kim / ne zaman / cikti)
- Idareye sorulacak belirsizlikler
Standart hizli ozet modu aynen duruyor.
Ihale Dosyasi Hazirla (rapor sonunda, acilir bolum):
- Eksik firma bilgileri kullaniciya sorulur, profilden gelenler sorulmaz,
girilenler tarayicida saklanir
- Kalem fiyatlandirma tablosu, canli toplam + yaziyla karsiligi
- Teklif Mektubu, Birim Fiyat Teklif Cetveli, Evrak Kontrol Listesi
- Belgeler yazdirilabilir HTML: jsPDF'in gomulu fontlari WinAnsi, s/g/i/I
tasimiyor (bkz. services/pdf.js ASCII basliklari) — resmi teklif mektubunda
bozuk Turkce kabul edilemez
docx/xlsx/zip metin cikarimi (server/office-text.mjs):
- ihaleab projesindeki officeText.ts'ten tasindi, harici bagimlilik yok
- Sunucuda: tarayicida cozucu yok, baytlar zaten BELGE_DIR'de
- Tablolar " | " ile korunuyor, ic ice zip aciliyor, ~$ gecici dosyalari atlanir
- Yeni uc: GET /api/me/documents/text
- Yukleme kabul listesi .doc/.rar cikarildi (karsiligi yok), .xlsx eklendi
fix: yuklenen belgelerdeki "AI analiz" dugmesi bozuktu — extractText nesne
donduruyor ({text,pageCount,usedPages}), kod onu duz metin sanip gonderiyordu;
sunucuya "[object Object]" gidiyor ve analiz reddediliyordu. Uzunluk kontrolu
de nesne uzerinde undefined verdigi icin hatayi yutuyordu.
fix: analiz dokuman panelinden baslatildiginda modal kendi isAnalyzing'ini
bilmiyordu, kullanici 1-2 dakika bos modal goruyordu — ortak aiAnalyzing sinyali
2026-08-31 14:53:46 +03:00
hikmettan
be79f9366a
docs: seans devir notu — canlidaki havuz sorunu, bekleyen deploylar, bilinen aciklar
2026-08-31 00:34:14 +03:00