From 456728b4bdad795c402856ef1773f191a3bd6850 Mon Sep 17 00:00:00 2001 From: ht Date: Sun, 6 Sep 2026 08:40:10 +0300 Subject: [PATCH] fix: preserve bid drafts and align tender source data --- .../evidence/qa-kanban-after-reload.png | Bin 0 -> 96406 bytes .../evidence/qa-kanban-after-reload.txt | 144 ++++++++++++++++++ docs/quality/uygulama-durumu.md | 19 ++- server/ai-teklif.mjs | 14 +- server/ai.mjs | 3 + server/document-content.mjs | 5 + server/dt-store.mjs | 4 +- server/exchange-rates.mjs | 27 ++++ server/history-store.mjs | 1 + server/index.js | 17 ++- server/tender-quality.mjs | 37 +++++ src/components/AiSpecAnalyzerModal.jsx | 4 +- src/components/BidPackageBuilder.jsx | 47 +++--- src/components/CompanyScannerModal.jsx | 4 +- src/components/TenderDetailModal.jsx | 30 +++- src/components/UrunAramaModal.jsx | 60 +++++--- src/components/tools/PriceAnalysis.jsx | 10 +- src/context/AppContext.jsx | 4 +- src/services/bidDocs.js | 14 +- src/services/bidValidation.js | 24 +++ tests/bid-validation.test.mjs | 24 +++ tests/browser-qa.mjs | 25 +++ tests/document-content.test.mjs | 7 + tests/exchange-rates.test.mjs | 9 ++ tests/http-state.test.mjs | 40 +++++ tests/tender-quality.test.mjs | 18 +++ 26 files changed, 510 insertions(+), 81 deletions(-) create mode 100644 docs/quality/evidence/qa-kanban-after-reload.png create mode 100644 docs/quality/evidence/qa-kanban-after-reload.txt create mode 100644 server/document-content.mjs create mode 100644 server/exchange-rates.mjs create mode 100644 server/tender-quality.mjs create mode 100644 src/services/bidValidation.js create mode 100644 tests/bid-validation.test.mjs create mode 100644 tests/browser-qa.mjs create mode 100644 tests/document-content.test.mjs create mode 100644 tests/exchange-rates.test.mjs create mode 100644 tests/http-state.test.mjs create mode 100644 tests/tender-quality.test.mjs diff --git a/docs/quality/evidence/qa-kanban-after-reload.png b/docs/quality/evidence/qa-kanban-after-reload.png new file mode 100644 index 0000000000000000000000000000000000000000..e45c29e73b3128164776597878cac1b3baec6a8a GIT binary patch literal 96406 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 YDRh^LnQjgF_Ht%!6qM EKAP dokümanı (tarayıcı varsa) > ilan metni. */ -export async function ihaleMetni(ikn, verilen) { +export async function ihaleMetni(ikn, verilen, ilan) { if (verilen && String(verilen).trim().length > 200) return { text: String(verilen), kaynak: 'yüklenen' }; if (ikn && (await browserAvailable().catch(() => false))) { - try { const r = await documentText(ikn); if (r?.text && r.text.length > 200) return { text: r.text, kaynak: 'EKAP dokümanı' }; } catch { /* ilan metnine düş */ } + try { const text = documentContent(await documentText(ikn)); if (text.length > 200) return { text, kaynak: 'EKAP dokümanı' }; } catch { /* ilan metnine düş */ } } if (ikn) { - try { const r = await ilanMetni(ikn); const text = typeof r === 'string' ? r : r?.text; if (text && text.length > 100) return { text, kaynak: 'ilan metni' }; } catch { /* yok */ } + try { const text = documentContent(await ilanMetni(ikn)); if (text && text.length > 100) return { text, kaynak: 'ilan metni' }; } catch { /* yok */ } } + if (String(ilan || '').trim().length > 100) return {text:String(ilan),kaynak:'İhale ilanı (teknik şartname değil)'}; return { text: '', kaynak: null }; } export async function belgeyeSor({ ikn, soru, text, tender, chain }) { const q = String(soru ?? '').trim().slice(0, 500); if (q.length < 3) throw new Error('Soru en az 3 karakter olmalı.'); - const { text: metin, kaynak } = await ihaleMetni(ikn, text); + const { text: metin, kaynak } = await ihaleMetni(ikn, text, tender?.aciklama); if (!metin) throw new Error('Bu ihale için doküman metni bulunamadı — PDF\'i "Yapay Zeka Asistanı"ndan yükleyip tekrar sorun.'); const parcalar = parcala(metin); const kaynaklar = getir(parcalar, q, 8); @@ -96,7 +98,7 @@ function gereklilikMetni(tender, gereklilikler, metin) { export async function teklifDenetle({ ikn, taslak, gereklilikler, tender, chain, text }) { const t = String(taslak ?? '').trim().slice(0, 60000); if (t.length < 200) throw new Error('Taslak en az 200 karakter olmalı.'); - const { text: metin } = await ihaleMetni(ikn, text).catch(() => ({ text: '' })); + const { text: metin } = await ihaleMetni(ikn, text, tender?.aciklama).catch(() => ({ text: '' })); const liste = gereklilikMetni(tender, gereklilikler, metin); if (!liste.length) throw new Error('Gereklilik listesi yok — önce derin analiz çalıştırın veya dokümanı yükleyin.'); const sistem = `Sen kamu ihalelerinde teklif dosyası denetçisisin. Gereklilik listesi ve teklif TASLAĞI verilecek. Her gereklilik için taslağı kontrol et. "karsilaniyor" yalnızca taslakta açık karşılığı varsa (alıntıyı 'kanit'e aynen kopyala); değinilmiyorsa "eksik"; kısmen/belirsizse "belirsiz". Sayı üretme. Yalnızca JSON: {"ozet":"2-3 cümle","maddeler":[{"gereklilik":"","durum":"karsilaniyor"|"eksik"|"belirsiz","kanit":"veya null","oneri":"veya null"}]} — maddeleri verilen sırada döndür.`; @@ -121,7 +123,7 @@ const BOLUMLER = { export async function teklifTaslak({ ikn, tur, tender, firma, belgeler, fiyat, gereklilikler, chain, text }) { const istenen = BOLUMLER[tur] || BOLUMLER.tam; - const { text: metin } = await ihaleMetni(ikn, text).catch(() => ({ text: '' })); + const { text: metin } = await ihaleMetni(ikn, text, tender?.aciklama).catch(() => ({ text: '' })); const liste = gereklilikMetni(tender, gereklilikler, metin); const baglam = [ `İHALE: ${tender?.baslik ?? '?'} · İdare: ${tender?.kurum ?? '?'} · İl: ${tender?.sehir ?? '?'} · Tarih: ${tender?.tarih ?? '?'} · Usul: ${tender?.usul ?? tender?.alimTuru ?? '?'}${tender?.yaklasikMaliyet ? ' · Yaklaşık maliyet: ' + tender.yaklasikMaliyet : ''}${ikn ? ' · İKN ' + ikn : ''}`, diff --git a/server/ai.mjs b/server/ai.mjs index f706d1f..a8096b6 100644 --- a/server/ai.mjs +++ b/server/ai.mjs @@ -109,6 +109,9 @@ Metinde olmayan bilgiyi UYDURMA — bilinmiyorsa null veya boş dizi kullan.`; export const DERIN_SYSTEM_PROMPT = `Sen Türkiye kamu ihale mevzuatı (4734 sayılı Kamu İhale Kanunu, 4735 sayılı Kamu İhale Sözleşmeleri Kanunu ve ikincil mevzuat) konusunda çok deneyimli bir ihale danışmanısın. Sana verilen teknik şartname / idari şartname / sözleşme tasarısı / ihale ilanı metnini madde madde incele. İki şey üret: (1) derinlemesine analiz, (2) teklif anına kadar izlenecek somut yol haritası. +Kaynak metinde bulunmayan hukuki sonuç çıkartma. Konsorsiyum ile iş ortaklığı farklı kavramlardır; birinin yasağını diğerine genişletme. +Bir katsayıyı yaklaşık maliyet yüzdesi olarak yorumlama; formül metinde yoksa hesaplama yapma. +Her kritik koşulun madde numarasını ve metindeki dayanağını belirt. Bölümler arasında bulundu/bulunamadı çelişkisi oluşturma. Özellikle şunları ara — ihaleyi kaybettiren ama gözden kaçan detaylar bunlardır: - Teklif zarfında eksikse doğrudan değerlendirme dışı bırakılma sebepleri diff --git a/server/document-content.mjs b/server/document-content.mjs new file mode 100644 index 0000000..dac69f3 --- /dev/null +++ b/server/document-content.mjs @@ -0,0 +1,5 @@ +/** Normalize document providers without losing their source label. */ +export function documentContent(result) { + if (typeof result === 'string') return result.trim(); + return String(result?.metin || result?.text || '').trim(); +} diff --git a/server/dt-store.mjs b/server/dt-store.mjs index 64b73cc..73abb87 100644 --- a/server/dt-store.mjs +++ b/server/dt-store.mjs @@ -95,8 +95,8 @@ function mapDtRow(row) { kurum, sehir: row.ili && !row.ili.startsWith('Plaka') ? titleCaseTr(row.ili) : '', bolge: '', - tarih: row.dt_tarihi || '', - saat: (det.tarihSaat || '').split(' ')[1] || '', + tarih: (row.dt_tarihi || '').split(' ')[0], + saat: (det.tarihSaat || row.dt_tarihi || '').match(/\d{2}:\d{2}/)?.[0] || '', alimTuru: 'Doğrudan Temin', usul: det.yasaMaddesi ? `Doğrudan Temin (4734 ${det.yasaMaddesi})` diff --git a/server/exchange-rates.mjs b/server/exchange-rates.mjs new file mode 100644 index 0000000..c9e7368 --- /dev/null +++ b/server/exchange-rates.mjs @@ -0,0 +1,27 @@ +export const RATE_SOURCE = 'https://www.tcmb.gov.tr/kurlar/today.xml'; +export function parseRates(xml) { + const bulletinDate = /]*\bTarih="([^"]+)"/.exec(xml)?.[1]; + if (!bulletinDate) throw new Error('TCMB bülten tarihi okunamadı.'); + const rates={}; + for (const code of ['USD','EUR']) { + const block=new RegExp(`]*CurrencyCode="${code}"[^>]*>([\\s\\S]*?)`).exec(xml)?.[1]; + const unit=Number(/([^<]+)<\/Unit>/.exec(block || '')?.[1]); + const selling=Number(/([^<]+)<\/ForexSelling>/.exec(block || '')?.[1]); + if (!(unit>0) || !(selling>0)) throw new Error(`${code} döviz satış kuru okunamadı.`); + rates[code]=selling/unit; + } + return {bulletinDate,rates,type:'Döviz satış',source:RATE_SOURCE}; +} +let cache; +export async function exchangeRates() { + if (cache && Date.now()-cache.at<15*60*1000) return {...cache.value,cached:true}; + try { + const response=await fetch(RATE_SOURCE,{signal:AbortSignal.timeout(10000)}); + if (!response.ok) throw new Error('TCMB kaynağına ulaşılamadı.'); + const value={...parseRates(await response.text()),fetchedAt:new Date().toISOString()}; + cache={at:Date.now(),value};return {...value,cached:false}; + } catch(error) { + if(cache) return {...cache.value,cached:true,refreshError:'Güncelleme alınamadı; gösterilen bülten tarihini kontrol edin.'}; + throw new Error('Kur alınamadı. Daha sonra yeniden deneyin.'); + } +} diff --git a/server/history-store.mjs b/server/history-store.mjs index c156802..1dc8e66 100644 --- a/server/history-store.mjs +++ b/server/history-store.mjs @@ -185,6 +185,7 @@ function rowToTender(r) { id: `hist-${r.ikn}-${r.kisim}`, kaynak: 'EKAP Sonuç İlanı', ikn: r.ikn, + kisim: r.kisim, baslik: r.ihale_adi || 'İhale', kurum: r.idare_adi || '—', sehir: titleCaseTr(r.il), diff --git a/server/index.js b/server/index.js index 56c5bc5..8993525 100644 --- a/server/index.js +++ b/server/index.js @@ -1,3 +1,5 @@ +import { exchangeRates } from './exchange-rates.mjs'; +import { uniqueTenders, announcementFields } from './tender-quality.mjs'; /** * ihaleist API Proxy — ilan.gov.tr canlı ihale verisi * @@ -582,7 +584,7 @@ async function getDetail(ilanId) { if (cache.detail.has(ilanId)) return cache.detail.get(ilanId); const raw = await ilanDetail(ilanId); const text = htmlToText(raw.content || ''); - const detail = { aciklama: text.slice(0, 4000), adNo: raw.adNo || null }; + const detail = { ...announcementFields(text), adNo: raw.adNo || null }; cache.detail.set(ilanId, detail); if (cache.detail.size > 500) cache.detail.delete(cache.detail.keys().next().value); return detail; @@ -661,22 +663,28 @@ async function tendersPayload(force = false) { console.warn('[kalem] özet uygulanamadı:', e.message); } + const combined = uniqueTenders([...dt.tenders, ...c.tenders, ...hist.tenders]); return { success: true, source: sources.join(' + '), fetchedAt: new Date(c.fetchedAt).toLocaleString('tr-TR'), totalCount: c.totalCount + dt.totalCount + hist.totalCount, ilanCount: c.totalCount, - todayCount: c.todayCount, + todayCount: bugunEklenenSayisi(combined), + loadedUniqueCount: combined.length, dtCount: dt.totalCount, historyCount: hist.totalCount, - tenders: [...dt.tenders, ...c.tenders, ...hist.tenders], + tenders: combined, }; } const server = http.createServer(async (req, res) => { const url = new URL(req.url, `http://localhost:${PORT}`); try { + if (url.pathname === '/api/exchange-rates') { + try { return json(res,200,{success:true,...await exchangeRates()}); } + catch(e) { return json(res,503,{success:false,error:e.message}); } + } // --- Google ile Giriş --- if (url.pathname === '/api/auth/google/config') { return json(res, 200, { clientId: process.env.GOOGLE_CLIENT_ID || null }); @@ -1507,7 +1515,8 @@ const server = http.createServer(async (req, res) => { } }); -server.listen(PORT, () => { +server.listen(PORT, process.env.NODE_ENV === 'test' ? '127.0.0.1' : undefined, () => { + if (process.env.NODE_ENV === 'test') return; // Gömme modeli soğuk yüklemesi ~45 sn; ilk kullanıcı beklemesin diye arka planda ısıt. arkaPlandaIsit(); console.log(`[ihaleist-api] http://localhost:${PORT} — canlı veri: ilan.gov.tr`); diff --git a/server/tender-quality.mjs b/server/tender-quality.mjs new file mode 100644 index 0000000..4826c05 --- /dev/null +++ b/server/tender-quality.mjs @@ -0,0 +1,37 @@ +const norm = v => String(v || '').trim().replace(/\s+/g,' ').toLocaleLowerCase('tr-TR'); +export function tenderIdentity(t) { + const ikn = String(t.ikn || '').replace(/\s/g,''); + // Awards from different lots must never be collapsed into one contract. + if (t.durum === 'Sonuçlandı') return `award:${ikn}:${t.kisim ?? t.id}:${norm(t.kazananFirma)}`; + if (/^\d{2}DT\d+$/i.test(ikn)) return `dt:${ikn.toUpperCase()}:${norm(t.kurum)}`; + // Corrections/cancellations remain separate events until their source linkage is verified. + if (/düzeltme|zeyilname|iptal/i.test(t.baslik || '')) return `event:${t.id}`; + return /^\d{4}\/\d+$/.test(ikn) ? `tender:${ikn}` : `source:${t.id}`; +} +export function uniqueTenders(records) { + const found = new Map(); + for (const t of records) { + const key = tenderIdentity(t), old = found.get(key); + if (!old) { found.set(key,{...t,sourceIds:[t.id]}); continue; } + const sourceIds = [...new Set([...old.sourceIds,t.id])]; + const merged = {...old}; + for (const [field,value] of Object.entries(t)) { + if (merged[field] == null || merged[field] === '' || (Array.isArray(merged[field]) && !merged[field].length)) merged[field] = value; + } + if ((t.aciklama || '').length > (old.aciklama || '').length) merged.aciklama = t.aciklama; + found.set(key,{...merged,id:old.id,sourceIds}); + } + return [...found.values()]; +} +export function announcementFields(text) { + const content = String(text || ''); + const result = {aciklama:content}; + const deadline = /Tarih\s*ve\s*Saati\s*:\s*(\d{2}\.\d{2}\.\d{4})\s*[-–]?\s*(\d{2}:\d{2})/i.exec(content); + if (deadline) { result.tarih = deadline[1]; result.saat = deadline[2]; } + const place = /3\.3\.?\s*[^:]{0,120}:\s*([\s\S]*?)(?=3\.4\.?)/i.exec(content); + const duration = /3\.4\.?\s*[^:]{0,100}:\s*([\s\S]*?)(?=3\.5\.?|4\s*[-–])/i.exec(content); + if (place) result.teslimYeri = place[1].trim(); + if (duration) result.teslimatSuresi = duration[1].trim(); + if (/hizmet alımı\s+4734/i.test(content)) result.alimTuru = 'Kiralama ve Hizmet Alımı'; + return result; +} diff --git a/src/components/AiSpecAnalyzerModal.jsx b/src/components/AiSpecAnalyzerModal.jsx index 17f33e8..e9796da 100644 --- a/src/components/AiSpecAnalyzerModal.jsx +++ b/src/components/AiSpecAnalyzerModal.jsx @@ -308,7 +308,7 @@ export const AiSpecAnalyzerModal = () => {