Populate search detail summaries from EKAP announcement tables
This commit is contained in:
+1
-1
@@ -717,7 +717,7 @@ const server = http.createServer(async (req, res) => {
|
||||
const ikn = url.searchParams.get('ikn');
|
||||
if (!ikn) return json(res, 400, { success: false, error: 'ikn gerekli' });
|
||||
const out = await ilanMetni(ikn);
|
||||
return json(res, 200, { success: true, ...out });
|
||||
return json(res, 200, { success: true, ...out, ...announcementFields(out.metin) });
|
||||
} catch (e) {
|
||||
return json(res, 502, { success: false, error: e.message });
|
||||
}
|
||||
|
||||
@@ -26,10 +26,13 @@ export function uniqueTenders(records) {
|
||||
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);
|
||||
// EKAP table cells are separated by pipes in extracted text. Keep the
|
||||
// original announcement intact; normalize separators only for field parsing.
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
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ı';
|
||||
|
||||
Reference in New Issue
Block a user