From 21b902702c5b36ee339bed27f6be4b9ed2f95ada Mon Sep 17 00:00:00 2001 From: ht Date: Sun, 6 Sep 2026 16:37:37 +0300 Subject: [PATCH] fix: exclude nonpositive prices from comparisons --- docs/quality/uygulama-durumu.md | 5 +++++ src/services/analytics.js | 2 +- tests/review-state.test.mjs | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/quality/uygulama-durumu.md b/docs/quality/uygulama-durumu.md index 33139dc..ad27eb9 100644 --- a/docs/quality/uygulama-durumu.md +++ b/docs/quality/uygulama-durumu.md @@ -1370,3 +1370,8 @@ Taslak türü seçicisine erişilebilir ad eklendi. Üretim derlemesi geçti. Ö - `parseTL`, metindeki eksi işaretini artık koruyor. İade veya negatif düzeltme tutarları pozitif sözleşme bedeline dönüşmüyor; Türkçe binlik/ondalık ayrıştırma davranışı aynen sürüyor. - Negatif Türkçe tutar için regresyon eklendi. 283 test ve build başarılı. Finansal kaynakların negatif tutar anlamı ayrıca resmi veri sözleşmesiyle doğrulanmalı; genel plan açık. + +### 2026-09-06 — Fiyat istatistiklerinde negatif kayıt filtresi + +- İşaretli para ayrıştırması korunurken, fiyat karşılaştırması artık sıfır ve negatif birim fiyatları istatistiğe katmıyor. İade/düzeltme kayıtları fiyat medyanını bozmayacak; muhasebe amaçlı diğer tutarlar işaretini koruyor. +- Negatif fiyatın dışarıda kaldığı regresyon eklendi. 283 test ve build başarılı. Gerçek pazar verisinde düzeltme kayıtlarının sınıflandırılması hâlâ doğrulanmalı; genel plan açık. diff --git a/src/services/analytics.js b/src/services/analytics.js index 0ba9eb8..10d9630 100644 --- a/src/services/analytics.js +++ b/src/services/analytics.js @@ -95,7 +95,7 @@ export function itemStats(tenders) { for (const t of tenders) { for (const it of t.items || []) { const bf = parseTL(it.birimFiyat); - if (bf == null) continue; + if (bf == null || bf <= 0) continue; itemCount++; const quantity=quantityParts(it.miktar ?? it.quantity); const rawUnit=quantity.birim || it.birim || ''; diff --git a/tests/review-state.test.mjs b/tests/review-state.test.mjs index 8b08a60..48bf677 100644 --- a/tests/review-state.test.mjs +++ b/tests/review-state.test.mjs @@ -18,6 +18,7 @@ test('item price analysis separates units and ignores unknown quantities',async( {ad:'Test kiti',miktar:'2 kutu',birimFiyat:'10 TL'}, {ad:'Test kiti',miktar:'3 adet',birimFiyat:'12 TL'}, {ad:'Test kiti',miktar:'bilinmiyor',birimFiyat:'99 TL'}, + {ad:'Test kiti',miktar:'2 kutu',birimFiyat:'-4 TL'}, ]}]); assert.equal(result.itemCount,2); assert.equal(result.uniqueItems,2); assert.deepEqual(result.items.map(x=>x.birim).sort(),['adet','kutu']);