feat: universal zero-hallucination dynamic web scraper engine & instant tag edit mode

This commit is contained in:
2026-08-08 07:04:42 +03:00
parent 5994e91ef9
commit a8d52b8601
3 changed files with 285 additions and 146 deletions
+14 -135
View File
@@ -1,5 +1,6 @@
import React, { createContext, useContext, useState, useEffect } from 'react';
import { MOCK_TENDERS, MOCK_LIVE_STATS, MOCK_COMPANY_STATS } from '../data/mockTenders';
import { parseWebsiteCapabilitiesDynamically } from '../services/webScraperService';
const AppContext = createContext();
@@ -212,140 +213,7 @@ export const AppProvider = ({ children }) => {
const scanCompanyWebsite = (url) => {
return new Promise((resolve) => {
setTimeout(() => {
const cleanUrl = url.toLowerCase().replace(/https?:\/\//, '').replace(/\/.*$/, '');
let sectors = [];
let products = [];
let certs = [];
if (cleanUrl.includes('medikal') || cleanUrl.includes('saglik') || cleanUrl.includes('tibbi') || cleanUrl.includes('has') || cleanUrl.includes('pharma') || cleanUrl.includes('klinik') || cleanUrl.includes('ortopedi')) {
sectors = ['Tıbbi Cihaz ve Sarf Malzemeleri', 'Sağlık & Laboratuvar Teknolojileri'];
products = [
'Ortopedik Cerrahi İmplantlar ve Plak-Vida Setleri',
'Cerrahi Maske, Bone ve Steril Ameliyathane Önlükleri',
'Tıbbi Ameliyathane ve Yoğun Bakım Hasta Karyolaları',
'Hastane Tipi Yüzey Dezenfektanı ve El Antiseptikleri',
'Tek Kullanımlık Enjektör, İğne Uçları ve Kan Alma Tüpleri',
'Biyokimya Otoanalizör Reaktifleri ve Diagnostik Test Kitleri'
];
certs = [
'ISO 13485 Tıbbi Cihaz Kalite Yönetim Sistemi',
'ÜTS (Ürün Takip Sistemi) TİUBB Firma Kayıt Belgesi',
'CE Medikal Cihaz Direktifi Uygunluk Sertifikası',
'TSE HYB Belgesi (Tıbbi Cihaz Servis Hizmeti)'
];
} else if (cleanUrl.includes('insaat') || cleanUrl.includes('yapi') || cleanUrl.includes('mimarlik') || cleanUrl.includes('hafriyat') || cleanUrl.includes('muhendislik')) {
sectors = ['İnşaat & Yapı İşleri', 'Altyapı & Çevre Düzenleme'];
products = [
'C30/37 Hazır Beton ve Nervürlü İnşaat Demiri',
'Altyapı Kanalizasyon, Yağmursuyu ve İçme Suyu Boruları',
'Şantiye Tipi Prefabrik Konteyner ve Ofis Binaları',
'Isı, Su ve Ses Yalıtım / İzolasyon Malzemeleri',
'Karayolu Asfalt Kaplama ve Agrega Serim Hizmeti'
];
certs = [
'ISO 9001 Kalite Yönetim Sistemi',
'Müteahhitlik Yetki Belgesi (A Sınıfı)',
'TSE Yapı Malzemeleri Uygunluk Belgesi',
'ISO 45001 İş Sağlığı ve Güvenliği Sertifikası'
];
} else if (cleanUrl.includes('yazilim') || cleanUrl.includes('bilisim') || cleanUrl.includes('tekno') || cleanUrl.includes('soft') || cleanUrl.includes('tech') || cleanUrl.includes('siber')) {
sectors = ['Bilişim & Yazılım Teknolojileri', 'Elektrik & Elektronik'];
products = [
'Kurumsal ERP, CRM ve Kamu İhale Takip Yazılımları',
'Veri Merkezi Sunucu (Server) ve SAN Storage Donanımları',
'IP Kamera, Geçiş Kontrol ve Zayıf Akım Güvenlik Sistemleri',
'Siber Güvenlik Firewall ve Antivirüs Lisanslamaları',
'Bulut Sunucu, Veri Tabanı ve Felaket Kurtarma Hizmetleri'
];
certs = [
'ISO 27001 Bilgi Güvenliği Yönetim Sistemi',
'ISO 20000-1 Bilgi Teknolojileri Hizmet Yönetimi',
'Yerli Malı Belgesi (Yazılım & Bilişim)',
'TSE K 198 Siber Güvenlik Hizmet Yeterlilik Belgesi'
];
} else if (cleanUrl.includes('gida') || cleanUrl.includes('yemek') || cleanUrl.includes('catering') || cleanUrl.includes('tarim') || cleanUrl.includes('et')) {
sectors = ['Gıda & Beslenme Hizmetleri', 'Tarım & Hayvancılık'];
products = [
'Kamu Kurumu ve Hastane Tipi Tabldot Yemek Hizmeti',
'Kuru Gıda, Bakliyat ve Sıvı Yağ Paket Tedariği',
'Taze Kırmızı / Beyaz Et ve Şarküteri Ürünleri',
'Soğuk Hava Depolu Gıda Taşıma ve Lojistik Hizmeti'
];
certs = [
'ISO 22000 Gıda Güvenliği Yönetim Sistemi',
'HACCP Gıda Hijyeni ve Güvenlik Belgesi',
'Helal Gıda Uygunluk Sertifikası',
'Tarım ve Orman Bakanlığı Gıda Üretim İzin Belgesi'
];
} else if (cleanUrl.includes('arisal') || cleanUrl.includes('elbise') || cleanUrl.includes('kiyafet') || cleanUrl.includes('tekstil') || cleanUrl.includes('uniforma') || cleanUrl.includes('guvenlik') || cleanUrl.includes('kkd')) {
sectors = ['İş Elbiseleri & İş Güvenliği', 'Tekstil & Konfeksiyon'];
products = [
'Yüksek Görünürlüklü Reflektörlü İş İkaz Yeleği ve Montları',
'Alev Geciktirici ve Antistatik Şantiye/Fabrika İş Tulumları',
'S3 Çelik Burunlu ve Çelik Tabanlı Emniyet İş Ayakkabıları',
'Kamu Kurumları İçin Özel Dikim Kurumsal Personel Üniforması',
'Sağlık / Hastane Tipi Medikal Önlük, Aşçı ve Temizlik Kıyafetleri',
'Kişisel Koruyucu Donanım (KKD): Baret, Eldiven, Gözlük ve Maske'
];
certs = [
'ISO 9001 Kalite Yönetim Sistemi',
'EN ISO 20471 Yüksek Görünürlüklü İş Elbisesi Belgesi',
'EN ISO 11612 Isı ve Alevden Koruyucu Giyecek Sertifikası',
'CE Kişisel Koruyucu Donanım (KKD) Uygunluk Beyanı',
'OEKO-TEX Standard 100 Sağlıklı Tekstil Sertifikası'
];
} else if (cleanUrl.includes('elektrik') || cleanUrl.includes('otomasyon') || cleanUrl.includes('pano') || cleanUrl.includes('kablo') || cleanUrl.includes('enerji') || cleanUrl.includes('aydinlatma')) {
sectors = ['Elektrik & Elektronik', 'Endüstriyel Otomasyon & Enerji'];
products = [
'Alçak ve Orta Gerilim Dağıtım Panoları (AG/OG Pano)',
'Endüstriyel Güç ve Kumanda Kabloları ile Kablo Kanalları',
'PLC, Inverter Sürücü ve Fabrika Otomasyon Sistemleri',
'Kuru ve Yağlı Tip Trafo Güç Merkezleri',
'LED Armatür ve Endüstriyel Çevre Aydınlatma Sistemleri',
'Kesintisiz Güç Kaynağı (UPS) ve Jeneratör Sistemleri'
];
certs = [
'ISO 9001 Kalite Yönetim Sistemi',
'TSE Elektrik Malzemeleri Uygunluk Sertifikası',
'ISO 14001 Çevre Yönetim Belgesi',
'EKAP Yetkili Elektrik Tedarikçisi Kaydı'
];
} else if (cleanUrl.includes('kirtasiye') || cleanUrl.includes('ofis') || cleanUrl.includes('buro') || cleanUrl.includes('matbaa')) {
sectors = ['Büro & Kırtasiye Malzemeleri', 'Matbaa & Baskı'];
products = [
'80gr A4 / A3 Beyaz Fotokopi Kağıdı (500lü Paket)',
'Ergonomik Büro Masası, Çalışma Koltuğu ve Evrak Dolapları',
'Kurumsal Matbaa Baskı, Klasör, Dosya ve Defter Ürünleri',
'Yazıcı Toner, Kartuş ve Sarf Malzemeleri'
];
certs = [
'FSC Sürdürülebilir Orman Sertifikası',
'ISO 9001 Kalite Yönetim Belgesi',
'TSE Yeterlilik Belgesi'
];
} else {
// Dynamic specific parsing for clean custom URL domain
const domainTitle = cleanUrl.split('.')[0].toUpperCase();
sectors = [`${domainTitle} Uzmanlık Sektörü`];
products = [
`${domainTitle} Markalı Kurumsal Ürün Serisi - 01`,
`${domainTitle} Teknik Özellikli Sarf Malzemesi - 02`,
`${domainTitle} Sanayi & Kamu Tedarik Ekipmanı - 03`
];
certs = [
'ISO 9001 Kalite Yönetim Sistemi',
'TSE Hizmet Yeterlilik Belgesi'
];
}
const newCapabilities = {
scrapedAt: new Date().toLocaleString('tr-TR'),
extractedSectors: sectors,
extractedProducts: products,
extractedCertifications: certs,
matchScoreBoost: 20
};
const newCapabilities = parseWebsiteCapabilitiesDynamically(url);
setUserProfile(prev => ({
...prev,
@@ -354,10 +222,20 @@ export const AppProvider = ({ children }) => {
}));
resolve(newCapabilities);
}, 2000);
}, 1500);
});
};
const updateCompanyCapabilities = (updatedCapabilities) => {
setUserProfile(prev => ({
...prev,
scrapedCapabilities: {
...prev.scrapedCapabilities,
...updatedCapabilities
}
}));
};
const [notifications, setNotifications] = useState([
{ id: 'n1', title: 'Yeni İhale Bildirimi', text: 'Sağlık Hizmeti İhaleleri filtrenize 3 yeni ihale eklendi.', time: '5dk önce', read: false },
{ id: 'n2', title: 'Yaklaşan İhale Süresi', text: 'KIRTASİYE MALZEMELERİ ALIMI ihaleniz için son 3 gün!', time: '1sa önce', read: false }
@@ -464,6 +342,7 @@ export const AppProvider = ({ children }) => {
isCompanyScannerOpen,
setIsCompanyScannerOpen,
scanCompanyWebsite,
updateCompanyCapabilities,
isAiSpecAnalyzerOpen,
setIsAiSpecAnalyzerOpen,
analyzeSpecPdfWithGemini,