fix: havuz uyarısı tek ölçüm yerine 7 günlük ortalamaya kıyaslasın (yavaş erime de yakalansın)

This commit is contained in:
2026-08-29 23:22:16 +03:00
parent eb20a05478
commit 8ced4d73d5
3 changed files with 62 additions and 16 deletions
+6 -4
View File
@@ -9,8 +9,10 @@ export const LiveStatsBar = () => {
const takibimdeki = tenders.filter((t) => t.takipte).length;
const kalemSayisi = tenders.reduce((s, t) => s + (t.items?.length || 0), 0);
// Havuz sağlığı: kaynak (ilan.gov.tr) sayısı haftalık zirvenin çok altındaysa
// Havuz sağlığı: kaynak (ilan.gov.tr) sayısı 7 GÜNLÜK ORTALAMANIN çok altındaysa
// bunu açıkça söyleriz — kullanıcı "veri mi kayboldu?" diye düşünmesin.
// Ortalama, tek bir ölçüme kıyaslamaktan daha güvenilir: havuz yavaş yavaş
// erirse de yakalar, tek seferlik dalgalanmada boşuna uyarı vermez.
const [havuz, setHavuz] = useState(null);
useEffect(() => {
fetch('/api/health/havuz?limit=40')
@@ -18,7 +20,7 @@ export const LiveStatsBar = () => {
.then((d) => setHavuz(d.success ? d : null))
.catch(() => {});
}, []);
const dusuk = havuz?.zirveyeOran != null && havuz.zirveyeOran < 0.6;
const dusuk = havuz?.yeterliVeri && havuz.ortalamayaOran != null && havuz.ortalamayaOran < 0.6;
const stats = [
{ deger: liveStats.toplamIhale, etiket: 'Canlı İhale Havuzu', renk: 'text-white', dot: true },
@@ -50,11 +52,11 @@ export const LiveStatsBar = () => {
{dusuk && (
<div
className="flex items-center gap-1.5 text-amber-300"
title={`ilan.gov.tr'de şu an ${havuz.son?.kaynak_toplam?.toLocaleString('tr-TR')} açık ihale var; bu hafta en yüksek ${havuz.haftalikZirve?.toLocaleString('tr-TR')} idi. Havuzun tamamı yüklendi — eksik veri yok.`}
title={`ilan.gov.tr'de şu an ${havuz.son?.kaynak_toplam?.toLocaleString('tr-TR')} açık ihale var; son 7 günün ortalaması ${havuz.haftalikOrtalama?.toLocaleString('tr-TR')} (${havuz.olcumAdedi} ölçüm). Havuzun tamamı yüklendi — eksik veri yok.`}
>
<TrendingDown className="w-3.5 h-3.5" />
<span className="font-bold">
Kaynakta ihale sayısı düşük (%{Math.round(havuz.zirveyeOran * 100)})
Kaynakta ihale sayısı düşük (7 gün ort. %{Math.round(havuz.ortalamayaOran * 100)})
</span>
</div>
)}