feat: tüm mock veriyi kaldır + Resend e-posta entegrasyonu

- mockTenders.js silindi; referans listeleri (sektör/il/kurum) constants.js'e taşındı
- AppContext: tenders/liveStats/competitorWatchlist/vaultDocuments/notifications/
  savedFilters/apiKeys/scrapedCapabilities → gerçek/boş; sahte Math.random online
  sayacı kaldırıldı; competitor & belge kasası artık localStorage
- LiveStatsBar: gerçek alanlar (canlı havuz/yüklü/bugün/kalem/takibimdeki)
- AnalyticsDashboard: KPI'lar (katılım/kazanma oranı/kazanılan bedel) + aylık hacim
  + sektörel dağılım gerçek companyStats/monthlyStats/sectorStats'tan; ciro hedefi
  kullanıcı tarafından belirlenir; veri yoksa dürüst boş durum
- ContractSearch & Rakip Radar: gerçek firmStats
- analytics.js: companyStats/monthlyStats/parseDateTR eklendi
- Resend: server/email.mjs + /api/notify/email/config + /api/notify/email/test
  (auth'lu, kullanıcının kendi adresine); PwaSettings gerçek e-posta test kartı
This commit is contained in:
2026-08-28 08:49:10 +03:00
parent 7521f798f6
commit 3e129c2988
14 changed files with 497 additions and 555 deletions
+35
View File
@@ -0,0 +1,35 @@
/**
* Sabit referans listeleri (mock veri DEĞİL — açılır menü/filtre seçenekleri).
* Sektörler, kurum türleri ve iller Türkiye kamu ihale sisteminin gerçek
* kategori listeleridir; il-plaka.mjs gibi kanonik sabitlerdir.
*/
export const SECTORS_LIST = [
"Sağlık / Tıbbi Malzeme",
"Kırtasiye & Büro",
"Bilişim & Yazılım",
"Gıda & Catering",
"İnşaat & Bakım",
"Temizlik & Hijyen",
"Tekstil & Giyim",
"Otomotiv & Yedek Parça",
];
export const INSTITUTION_TYPES_LIST = [
"Eğitim ve Araştırma Hastaneleri",
"Belediyeler",
"Büyükşehir Belediyeleri",
"Ceza İnfaz Kurumları",
"Üniversiteler",
"Bakanlıklar",
"Kamu Şirketleri",
"Ağız ve Diş Sağlığı Merkezleri",
];
export const CITIES_LIST = [
"Adana", "Adıyaman", "Afyonkarahisar", "Aksaray", "Amasya", "Ankara", "Antalya", "Ardahan", "Artvin",
"Aydın", "Balıkesir", "Bolu", "Bursa", "Çanakkale", "Denizli", "Diyarbakır", "Edirne", "Eskişehir",
"Gaziantep", "Giresun", "Isparta", "İstanbul", "İzmir", "Kahramanmaraş", "Kars", "Kastamonu", "Kayseri",
"Kocaeli", "Konya", "Kütahya", "Malatya", "Manisa", "Mardin", "Muğla", "Ordu", "Rize", "Sakarya",
"Samsun", "Sivas", "Şanlıurfa", "Tekirdağ", "Trabzon", "Van", "Zonguldak",
];
-331
View File
@@ -1,331 +0,0 @@
export const MOCK_TENDERS = [
{
id: "tender-101",
ikn: "26DT1489671",
baslik: "KIRTASİYE MALZEMELERİ ALIMI KAYSERİ ÇOCUK CEZAEVİ",
kurum: "CEZA VE TEVKİFEVLERİ GENEL MÜDÜRLÜĞÜ KAYSERİ ÇOCUK KAPALI CEZA İNFAZ KURUMU MÜDÜRLÜĞÜ",
sehir: "Kayseri",
bolge: "İÇ ANADOLU BÖLGESİ",
tarih: "10.08.2026",
saat: "12:00",
alimTuru: "Doğrudan Temin",
usul: "Doğrudan Temin (4734 22/d)",
sektor: "Kırtasiye & Büro",
brans: "Sanatsal Kırtasiye ve El Becerisi Malzemeleri",
kurumTipi: "Ceza İnfaz Kurumları",
eklenmeZamani: "az önce eklendi",
isYeni: true,
aciliyetBadge: "⚠️ SON 3 GÜN",
items: [
{ id: "i1", ad: "35*50 TUVAL", miktar: "10", birim: "adet", birimFiyat: 145 },
{ id: "i2", ad: "50*70 TUVAL", miktar: "10", birim: "adet", birimFiyat: 220 },
{ id: "i3", ad: "AKRİLİK BOYA SETİ 12'Lİ", miktar: "25", birim: "set", birimFiyat: 185 },
{ id: "i4", ad: "RESİM FIRÇASI SETİ NO: 1-12", miktar: "30", birim: "set", birimFiyat: 95 }
],
aciklama: "Kayseri Çocuk Kapalı Ceza İnfaz Kurumu Müdürlüğü Hobi ve Atölye Çalışmaları İhtiyacı İçin 4 Kalem Kırtasiye ve Sanatsal Malzeme Doğrudan Temin Usulü İle Alınacaktır. Fiyat teklif cetveli kaşeli ve imzalı teslim edilecektir.",
yaklasikMaliyet: 18500,
teslimatSuresi: "7 Takvim Günü",
teslimYeri: "Kayseri Çocuk Cezaevi Deposu",
yeterlikKriterleri: ["KDV Hariç Teklif Cetveli", "İmza Sirküleri / Yetki Belgesi", "Faaliyet Belgesi"],
aiMatchScore: 94,
aiRiskScore: "Düşük",
aiBidRange: { min: 14200, max: 17800, recommended: 15600 },
kanbanStatus: "teklif_hazirlaniyor",
atananPersonel: "Ahmet Yılmaz",
durum: "Aktif",
incelendi: true,
takipte: true,
sozlesmeBedeli: null,
kazananFirma: null
},
{
id: "tender-102",
ikn: "26DT1489955",
baslik: "Yemek Kabı ve Üst Kapama Filmi Alımı",
kurum: "TARIM İŞLETMELERİ GENEL MÜDÜRLÜĞÜ KARACABEY TARIM İŞLETMESİ MÜDÜRLÜĞÜ",
sehir: "Bursa",
bolge: "MARMARA BÖLGESİ",
tarih: "10.08.2026",
saat: "18:00",
alimTuru: "Doğrudan Temin",
usul: "Doğrudan Temin (4734 22/d)",
sektor: "Gıda & Catering",
brans: "Ambalaj ve Paketleme Ürünleri",
kurumTipi: "Kamu Şirketleri",
eklenmeZamani: "az önce eklendi",
isYeni: true,
aciliyetBadge: "⚠️ SON 3 GÜN",
items: [
{ id: "i1", ad: "1 Gözlü Yemek Kabı", miktar: "1000", birim: "adet", birimFiyat: 2.80 },
{ id: "i2", ad: "2 Gözlü Yemek Kabı", miktar: "1000", birim: "adet", birimFiyat: 3.40 },
{ id: "i3", ad: "Sızdırmaz Üst Kapama Filmi (Rulo)", miktar: "50", birim: "rulo", birimFiyat: 410 }
],
aciklama: "Karacabey Tarım İşletmesi personel yemekhanesi için kullanılacak olan ısıya dayanıklı 1 ve 2 gözlü porsiyonluk kaplar ve üst kapatma film ruloları alınacaktır.",
yaklasikMaliyet: 26700,
teslimatSuresi: "5 İş Günü",
teslimYeri: "Karacabey Tarım İşletmesi Ambarı",
yeterlikKriterleri: ["Gıda Temas Uygunluk Sertifikası (ISO 22000)", "Teklif Mektubu"],
aiMatchScore: 88,
aiRiskScore: "Düşük",
aiBidRange: { min: 21000, max: 25500, recommended: 23200 },
kanbanStatus: "incelenecek",
atananPersonel: null,
durum: "Aktif",
incelendi: false,
takipte: false,
sozlesmeBedeli: null,
kazananFirma: null
},
{
id: "tender-103",
ikn: "2026/184201",
baslik: "193064-PANİK BUTON KURULUM İŞİ",
kurum: "ANKARA ÜNİVERSİTESİ REKTÖRLÜĞÜ SAĞLIK UYGULAMA VE ARAŞTIRMA HASTANELERİ BAŞHEKİMLİĞİ",
sehir: "Ankara",
bolge: "İÇ ANADOLU BÖLGESİ",
tarih: "11.08.2026",
saat: "10:30",
alimTuru: "Doğrudan Temin",
usul: "Doğrudan Temin (4734 22/d)",
sektor: "Bilişim & Yazılım",
brans: "Güvenlik Sistemleri ve Zayıf Akım",
kurumTipi: "Üniversiteler",
eklenmeZamani: "15 dakika önce",
isYeni: true,
aciliyetBadge: "🔥 BUGÜN KAPANIYOR",
items: [
{ id: "i1", ad: "Kablosuz Panik Butonu Verici Ünite", miktar: "15", birim: "adet", birimFiyat: 1250 },
{ id: "i2", ad: "Merkezi Alarm Alma Paneli (RF Receiver)", miktar: "2", birim: "adet", birimFiyat: 8400 },
{ id: "i3", ad: "Montaj ve Kablolama Hizmeti", miktar: "1", birim: "paket", birimFiyat: 6500 }
],
aciklama: "İbn-i Sina Araştırma Hastanesi Acil Servis ve Yoğun Bakım üniteleri için acil durum kablosuz panik buton sistemi temini ve devreye alınması işidir.",
yaklasikMaliyet: 42000,
teslimatSuresi: "10 Gün",
teslimYeri: "Ankara Üniversitesi İbn-i Sina Hastanesi",
yeterlikKriterleri: ["TSE HYB Belgesi", "Marka Tescil / Yetkili Satıcı Belgesi"],
aiMatchScore: 92,
aiRiskScore: "Orta",
aiBidRange: { min: 34500, max: 40800, recommended: 37200 },
kanbanStatus: "inceleniyor",
atananPersonel: "Zeynep Kaya",
durum: "Aktif",
incelendi: true,
takipte: true,
sozlesmeBedeli: null,
kazananFirma: null
},
{
id: "tender-104",
ikn: "26DT1490112",
baslik: "HASTAYA ÖZGÜ ORTOPEDİ MALZEME ALIMI (ZARİFE BALLI)",
kurum: "KONYA İL SAĞLIK MÜDÜRLÜĞÜ KONYA AKŞEHİR DEVLET HASTANESİ BAŞHEKİMLİĞİ",
sehir: "Konya",
bolge: "İÇ ANADOLU BÖLGESİ",
tarih: "12.08.2026",
saat: "14:00",
alimTuru: "Doğrudan Temin",
usul: "Doğrudan Temin (4734 22/f)",
sektor: "Sağlık / Tıbbi Malzeme",
brans: "Ortopedi ve Protez İmplanta Sistemleri",
kurumTipi: "Eğitim ve Araştırma Hastaneleri",
eklenmeZamani: "1 saat önce",
isYeni: false,
aciliyetBadge: null,
items: [
{ id: "i1", ad: "Revizyon Kalça Protez Femoral Stem (Titanyum)", miktar: "1", birim: "set", birimFiyat: 48500 },
{ id: "i2", ad: "Asetabular Kap ve Seramik Insert", miktar: "1", birim: "set", birimFiyat: 29000 },
{ id: "i3", ad: "Kemik Çimentosu Gentamisinli 40gr", miktar: "2", birim: "kutu", birimFiyat: 3200 }
],
aciklama: "Hastaya özel doğrudan temin usulü ile kalça revizyon protez seti alımıdır. Ürünlerin ÜTS (Ürün Takip Sistemi) kaydı ve SUT kodları eksiksiz olmalıdır.",
yaklasikMaliyet: 83900,
teslimatSuresi: "3 Gün (Hasta Ameliyat Tarihi)",
teslimYeri: "Akşehir Devlet Hastanesi Ameliyathane Deposu",
yeterlikKriterleri: ["ÜTS Barkod Eşleşme Çıktısı", "SUT Bildirimi", "FDA / CE Sertifikası"],
aiMatchScore: 96,
aiRiskScore: "Düşük",
aiBidRange: { min: 72000, max: 81000, recommended: 76500 },
kanbanStatus: "teklif_verildi",
atananPersonel: "Hikmet Tanrıverdi",
durum: "Aktif",
incelendi: true,
takipte: true,
sozlesmeBedeli: null,
kazananFirma: null
},
{
id: "tender-105",
ikn: "2026/178920",
baslik: "Klima Santrali Filtre Değişimi ve Bakım Hizmet Alımı",
kurum: "İZMİR BÜYÜKŞEHİR BELEDİYESİ ULAŞIM DARE BAŞKANLIĞI",
sehir: "İzmir",
bolge: "EGE BÖLGESİ",
tarih: "14.08.2026",
saat: "11:00",
alimTuru: "Açık İhale",
usul: "Açık İhale Usulü (4734 Madde 19)",
sektor: "İnşaat & Bakım",
brans: "HVAC ve İklimlendirme Bakımı",
kurumTipi: "Büyükşehir Belediyeleri",
eklenmeZamani: "3 saat önce",
isYeni: false,
aciliyetBadge: null,
items: [
{ id: "i1", ad: "G4 Panel Filtre 592x592x48mm", miktar: "120", birim: "adet", birimFiyat: 190 },
{ id: "i2", ad: "F7 Torba Filtre 592x592x535mm 6 Cepli", miktar: "80", birim: "adet", birimFiyat: 480 },
{ id: "i3", ad: "Hepa Filtre H13 610x610x292mm", miktar: "24", birim: "adet", birimFiyat: 2100 },
{ id: "i4", ad: "Periyodik Bakım ve Gaz Şarjı Hizmeti", miktar: "12", birim: "ay", birimFiyat: 15000 }
],
aciklama: "İzmir Büyükşehir Belediyesi Hizmet Binalarındaki 18 Adet Klima Santralinin 1 Yıllık Periyodik Filtre Değişimi ve Bakım Hizmeti Alımı İhalesidir.",
yaklasikMaliyet: 241000,
teslimatSuresi: "365 Gün",
teslimYeri: "İzmir Merkez Binaları",
yeterlikKriterleri: ["İş Deneyim Belgesi (Benzer İş %50)", "Geçici Teminat Mektubu %3", "Kapasite Raporu"],
aiMatchScore: 81,
aiRiskScore: "Orta",
aiBidRange: { min: 195000, max: 228000, recommended: 212000 },
kanbanStatus: "incelenecek",
atananPersonel: null,
durum: "Aktif",
incelendi: false,
takipte: false,
sozlesmeBedeli: null,
kazananFirma: null
},
{
id: "tender-106",
ikn: "26DT1490888",
baslik: "Genel Temizlik ve Dezenfeksiyon Sarf Malzemeleri Alımı",
kurum: "ANTALYA GENÇLİK VE SPOR İL MÜDÜRLÜĞÜ KYK YURTLARI",
sehir: "Antalya",
bolge: "AKDENİZ BÖLGESİ",
tarih: "15.08.2026",
saat: "15:30",
alimTuru: "Doğrudan Temin",
usul: "Doğrudan Temin (4734 22/d)",
sektor: "Temizlik & Hijyen",
brans: "Endüstriyel Temizlik Kimyasalları",
kurumTipi: "Bakanlıklar",
eklenmeZamani: "5 saat önce",
isYeni: false,
aciliyetBadge: null,
items: [
{ id: "i1", ad: "Çamaşır Suyu (Yüzey Dezenfektanı) 20 L", miktar: "80", birim: "bidon", birimFiyat: 340 },
{ id: "i2", ad: "Sıvı El Sabunu Sedefli 30 L", miktar: "60", birim: "bidon", birimFiyat: 520 },
{ id: "i3", ad: "Mikrofiber Temizlik Bezi 40x40 (100'lü)", miktar: "15", birim: "paket", birimFiyat: 680 }
],
aciklama: "Antalya KYK Kız ve Erkek Öğrenci Yurtları yeni eğitim-öğretim sezonu hazırlıkları için temizlik hijyen sarf ürünleri temin edilecektir.",
yaklasikMaliyet: 68600,
teslimatSuresi: "7 Gün",
teslimYeri: "Antalya Akdeniz Yurt Müdürlüğü Deposu",
yeterlikKriterleri: ["MSDS Güvenlik Bilgi Formları", "Sağlık Bakanlığı Ruhsat Fotokopisi"],
aiMatchScore: 89,
aiRiskScore: "Düşük",
aiBidRange: { min: 54000, max: 63000, recommended: 58500 },
kanbanStatus: "kazanildi",
atananPersonel: "Hikmet Tanrıverdi",
durum: "Sonuçlandı",
incelendi: true,
takipte: true,
sozlesmeBedeli: 57400,
kazananFirma: "Tanrıverdi Medikal & Hijyen Ltd. Şti."
},
{
id: "tender-107",
ikn: "2026/172340",
baslik: "Veri Merkezi Sunucu ve Depolama Ünitesi Alımı",
kurum: "HAVELSAN HAVA ELEKTRONİK SANAYİ A.Ş.",
sehir: "Ankara",
bolge: "İÇ ANADOLU BÖLGESİ",
tarih: "18.08.2026",
saat: "10:00",
alimTuru: "Açık İhale",
usul: "Açık İhale",
sektor: "Bilişim & Yazılım",
brans: "Sunucu ve Veri Depolama Donanımları",
kurumTipi: "Kamu Şirketleri",
eklenmeZamani: "1 gün önce",
isYeni: false,
aciliyetBadge: null,
items: [
{ id: "i1", ad: "Rack Sunucu 2U 2x Xeon Gold 6430 / 256GB RAM", miktar: "4", birim: "adet", birimFiyat: 145000 },
{ id: "i2", ad: "NVMe SAN Storage Unit 100TB Usable", miktar: "1", birim: "set", birimFiyat: 620000 }
],
aciklama: "Havelsan Teknoloji Kampüsü Veri Merkezi Genişletme Projesi kapsamında yüksek performanslı sunucu ve veri depolama üniteleri temin edilecektir.",
yaklasikMaliyet: 1200000,
teslimatSuresi: "30 Takvim Günü",
teslimYeri: "Havelsan ODTÜ Teknokent Binası",
yeterlikKriterleri: ["Üretici Yetki Belgesi (MAF)", "ISO 27001 Bilgi Güvenliği Belgesi"],
aiMatchScore: 76,
aiRiskScore: "Yüksek",
aiBidRange: { min: 980000, max: 1150000, recommended: 1040000 },
kanbanStatus: "kaybedildi",
atananPersonel: "Mehmet Demir",
durum: "Sonuçlandı",
incelendi: true,
takipte: true,
sozlesmeBedeli: 1025000,
kazananFirma: "Netaş Telekomünikasyon A.Ş."
}
];
export const MOCK_COMPANY_STATS = {
notlarimCount: 4,
ajandaCount: 2,
incelediklerimCount: 14,
sozlesmelerimCount: 8,
sonuclarimCount: 12,
takibimdekilerCount: 9,
kanbanStats: {
incelenecek: 3,
inceleniyor: 2,
teklif_hazirlaniyor: 4,
teklif_verildi: 3,
kazanildi: 8,
kaybedildi: 4
}
};
export const MOCK_LIVE_STATS = {
onlineKullanici: 17551,
toplamKalem: 99666,
bugunEklenen: 1445,
aktifTakip: 102473
};
export const SECTORS_LIST = [
"Sağlık / Tıbbi Malzeme",
"Kırtasiye & Büro",
"Bilişim & Yazılım",
"Gıda & Catering",
"İnşaat & Bakım",
"Temizlik & Hijyen",
"Tekstil & Giyim",
"Otomotiv & Yedek Parça"
];
export const INSTITUTION_TYPES_LIST = [
"Eğitim ve Araştırma Hastaneleri",
"Belediyeler",
"Büyükşehir Belediyeleri",
"Ceza İnfaz Kurumları",
"Üniversiteler",
"Bakanlıklar",
"Kamu Şirketleri",
"Ağız ve Diş Sağlığı Merkezleri"
];
export const CITIES_LIST = [
"Adana", "Adıyaman", "Afyonkarahisar", "Aksaray", "Amasya", "Ankara", "Antalya", "Ardahan", "Artvin",
"Aydın", "Balıkesir", "Bolu", "Bursa", "Çanakkale", "Denizli", "Diyarbakır", "Edirne", "Eskişehir",
"Gaziantep", "Giresun", "Isparta", "İstanbul", "İzmir", "Kahramanmaraş", "Kars", "Kastamonu", "Kayseri",
"Kocaeli", "Konya", "Kütahya", "Malatya", "Manisa", "Mardin", "Muğla", "Ordu", "Rize", "Sakarya",
"Samsun", "Sivas", "Şanlıurfa", "Tekirdağ", "Trabzon", "Van", "Zonguldak"
];
export const COMPETITOR_DATA = [
{ name: "Tanrıverdi Medikal & Hijyen Ltd.", winCount: 24, totalVolume: "4.850.000 TL", share: 32 },
{ name: "Atlas Büro & Kırtasiye A.Ş.", winCount: 19, totalVolume: "3.200.000 TL", share: 24 },
{ name: "ProTek Bilişim ve Sistemler", winCount: 15, totalVolume: "6.750.000 TL", share: 22 },
{ name: "Özkan Sağlık Hizmetleri", winCount: 11, totalVolume: "2.100.000 TL", share: 14 },
{ name: "Diğer Tedarikçiler", winCount: 8, totalVolume: "1.400.000 TL", share: 8 }
];