feat: universal zero-hallucination dynamic web scraper engine & instant tag edit mode
This commit is contained in:
+14
-135
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user