Commit Graph
118 Commits
Author SHA1 Message Date
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 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 ecc031a822 Bind offer assistant requests and private context to their session 2026-09-06 10:08:03 +03:00
hikmettan a136a74a1b Open and retain tender details discovered outside the main pool 2026-09-06 10:01:34 +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 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 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 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 0d2cf584e7 fix: require explicit choice for conflicting bid item sources 2026-09-06 09:13:26 +03:00
hikmettan 7ad5fb4f50 fix: preserve newer tender note drafts after delayed saves 2026-09-06 09:07:23 +03:00
hikmettan f88a0c7bfe fix: persist explicit review status and align review counters 2026-09-06 09:02:28 +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 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
hikmettanandClaude 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
hikmettanandClaude 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
hikmettanandClaude 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
hikmettanandClaude 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
hikmettanandClaude 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
hikmettanandClaude 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
hikmettanandClaude 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