support tender deadline label variants
This commit is contained in:
@@ -2266,3 +2266,9 @@ Güncel canlı sonuçta health `ok:true` olsa da readiness `404` ve güvenlik ba
|
|||||||
Kaynaklar `Sonuçlandı` durumunu boşluk veya büyük/küçük harf farkıyla döndürdüğünde tekilleştirme artık aynı award anahtarını kullanıyor. Lot numarası hâlâ kimliğin parçası; farklı kısımlar birbirine karışmıyor ve aynı lotun farklı kaynak kayıtları birleşiyor.
|
Kaynaklar `Sonuçlandı` durumunu boşluk veya büyük/küçük harf farkıyla döndürdüğünde tekilleştirme artık aynı award anahtarını kullanıyor. Lot numarası hâlâ kimliğin parçası; farklı kısımlar birbirine karışmıyor ve aynı lotun farklı kaynak kayıtları birleşiyor.
|
||||||
|
|
||||||
Doğrulama: yeni regresyonla otomatik test sayısı 295/295’e yükseldi; üretim derlemesi başarılı.
|
Doğrulama: yeni regresyonla otomatik test sayısı 295/295’e yükseldi; üretim derlemesi başarılı.
|
||||||
|
|
||||||
|
### 2026-09-06 · D05 ilan son teklif tarihi etiket varyantları
|
||||||
|
|
||||||
|
İlan metni ayrıştırıcısı artık EKAP ve kurum ilanlarında kullanılan “İhale tarihi ve saati”, “Son Teklif Tarihi” ve “İhale Tarihi/Saati” başlıklarını aynı tarih-saat alanına dönüştürüyor. Ayrıştırma yalnız tarih ve saat birlikte bulunduğunda çalışıyor; teslim süresi gibi yalnız tarih içeren maddeler son teklif tarihi olarak yanlış eşleştirilmiyor.
|
||||||
|
|
||||||
|
Doğrulama: üç yaygın başlık varyantı için regresyonlar eklendi; 295 otomatik test ve üretim derlemesi başarılı. Resmî beş ihale dosyasıyla uçtan uca doğrulama ve canlı deployment hâlâ açık.
|
||||||
|
|||||||
@@ -31,7 +31,15 @@ export function announcementFields(text) {
|
|||||||
// EKAP table cells are separated by pipes in extracted text. Keep the
|
// EKAP table cells are separated by pipes in extracted text. Keep the
|
||||||
// original announcement intact; normalize separators only for field parsing.
|
// original announcement intact; normalize separators only for field parsing.
|
||||||
const fields = content.replace(/\s*\|\s*/g, ' ');
|
const fields = content.replace(/\s*\|\s*/g, ' ');
|
||||||
const deadline = /Tarih\s*ve\s*Saati\s*:\s*(\d{2}\.\d{2}\.\d{4})\s*[-–]?\s*(\d{2}:\d{2})/i.exec(fields);
|
// EKAP/ilan kaynakları aynı son teklif anını farklı başlıklarla verir.
|
||||||
|
// Yalnız tarih + saat birlikte bulunduğunda alan üret; teslim süresi gibi
|
||||||
|
// yalnızca tarih içeren maddeleri son teklif tarihi sanma.
|
||||||
|
const deadlinePatterns = [
|
||||||
|
/Tarih\s*ve\s*Saati\s*:\s*(\d{2}\.\d{2}\.\d{4})\s*[-–]?\s*(\d{2}:\d{2})/i,
|
||||||
|
/(?:İhale\s+|Son\s+Teklif\s+)?Tarih(?:i)?\s*(?:\/\s*Saat(?:i)?|ve\s+Saat(?:i)?|\s+Saat(?:i)?)\s*:\s*(\d{2}\.\d{2}\.\d{4})\s*[-–]?\s*(\d{2}:\d{2})/i,
|
||||||
|
/Son\s+Teklif\s+Tarihi\s*:\s*(\d{2}\.\d{2}\.\d{4})\s*[-–]?\s*(\d{2}:\d{2})/i,
|
||||||
|
];
|
||||||
|
const deadline = deadlinePatterns.map(pattern => pattern.exec(fields)).find(Boolean);
|
||||||
if (deadline) { result.tarih = deadline[1]; result.saat = deadline[2]; }
|
if (deadline) { result.tarih = deadline[1]; result.saat = deadline[2]; }
|
||||||
const place = /3\.3\.?\s*[^:]{0,120}:\s*([\s\S]*?)(?=3\.4\.?)/i.exec(fields);
|
const place = /3\.3\.?\s*[^:]{0,120}:\s*([\s\S]*?)(?=3\.4\.?)/i.exec(fields);
|
||||||
const duration = /3\.4\.?\s*[^:]{0,100}:\s*([\s\S]*?)(?=3\.5\.?|4\s*[-–])/i.exec(fields);
|
const duration = /3\.4\.?\s*[^:]{0,100}:\s*([\s\S]*?)(?=3\.5\.?|4\s*[-–])/i.exec(fields);
|
||||||
|
|||||||
@@ -37,3 +37,15 @@ test('EKAP table separators do not hide the deadline or leak into delivery field
|
|||||||
assert.equal(d.teslimYeri,'Turgut Özal Tıp Merkezi Deposu-Malatya');
|
assert.equal(d.teslimYeri,'Turgut Özal Tıp Merkezi Deposu-Malatya');
|
||||||
assert.equal(d.teslimatSuresi,'Her siparişin tebliğinden itibaren 30 (otuz) takvim günü');
|
assert.equal(d.teslimatSuresi,'Her siparişin tebliğinden itibaren 30 (otuz) takvim günü');
|
||||||
});
|
});
|
||||||
|
test('announcement deadline parser accepts common label variants',()=>{
|
||||||
|
const variants=[
|
||||||
|
'İhale tarihi ve saati: 11.09.2026 - 09:30',
|
||||||
|
'Son Teklif Tarihi : 12.09.2026 14:15',
|
||||||
|
'İhale Tarihi/Saati : 13.09.2026 - 08:05',
|
||||||
|
];
|
||||||
|
for (const [i,text] of variants.entries()) {
|
||||||
|
const d=announcementFields(text);
|
||||||
|
assert.equal(d.tarih,`${String(11+i).padStart(2,'0')}.09.2026`);
|
||||||
|
assert.equal(d.saat,['09:30','14:15','08:05'][i]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user