From 1c2651fc0ea160ff099ace54cbee134eaf7405d7 Mon Sep 17 00:00:00 2001 From: ht Date: Sun, 6 Sep 2026 16:32:59 +0300 Subject: [PATCH] fix: parse decimal money values without scale errors --- docs/quality/uygulama-durumu.md | 5 +++++ src/services/analytics.js | 6 ++++-- tests/review-state.test.mjs | 7 ++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/quality/uygulama-durumu.md b/docs/quality/uygulama-durumu.md index 2ec2561..a4357e9 100644 --- a/docs/quality/uygulama-durumu.md +++ b/docs/quality/uygulama-durumu.md @@ -1330,6 +1330,11 @@ Taslak türü seçicisine erişilebilir ad eklendi. Üretim derlemesi geçti. Ö - Miktarı veya birimi kaynakta bilinmeyen kalemler fiyat analizine alınmıyor; böylece birim fiyat karşılaştırması doğrulanmamış kapsamla öneri üretmiyor. - Kutu/adet ve bilinmeyen miktar regresyonu eklendi. 282 test ve build başarılı. Gerçek pazar verisiyle fiyat karşılaştırması ve kur kaynağı kabulü hâlâ plan maddesi; genel plan açık. +### 2026-09-06 — Analitik para biçimi ayrıştırması + +- `parseTL`, nokta içeren değerleri eskiden her zaman binlik ayraç sayıyordu; `12.50 TL` bu nedenle 1250 olabiliyordu. Artık virgüllü Türkçe biçim, üç haneli binlik gruplar ve ondalık noktalı değerler ayrı ayrıştırılıyor. +- `12.50`, `1.234` ve `1.234,50` için regresyonlar eklendi. Fiyat, sözleşme ve pazar istatistiklerinde tutar ölçeğinin yanlış değişmesi engellendi. 283 test ve build başarılı; genel plan açık. + ### 2026-09-06 — Belge son kullanma tarihi doğrulaması - Belge deposundaki son kullanma tarihi göstergesi artık yalnız geçerli ISO günlerini hesaplıyor. Bozuk veya yuvarlanabilir bir tarih sessizce gün hesabına girmiyor; kullanıcıya “Tarih doğrulanmalı” uyarısı gösteriliyor. diff --git a/src/services/analytics.js b/src/services/analytics.js index 3bf2bc1..88c0e8e 100644 --- a/src/services/analytics.js +++ b/src/services/analytics.js @@ -4,13 +4,15 @@ * ilanları) analizler otomatik zenginleşir. */ -// "22.800,00 TRY" / "1.234.567,89 TL" gibi metinleri sayıya çevir +// "22.800,00 TRY" / "1.234.567,89 TL" / "12.50 TL" gibi metinleri sayıya çevir export function parseTL(v) { if (v == null) return null; if (typeof v === 'number') return isFinite(v) ? v : null; const s = String(v).replace(/[^\d.,]/g, ''); if (!s) return null; - const norm = s.replace(/\./g, '').replace(',', '.'); + const norm = s.includes(',') + ? s.replace(/\./g, '').replace(',', '.') + : /^(?:\d+\.\d{3})+$/.test(s) ? s.replace(/\./g, '') : s; const n = parseFloat(norm); return isFinite(n) ? n : null; } diff --git a/tests/review-state.test.mjs b/tests/review-state.test.mjs index 13736be..095f809 100644 --- a/tests/review-state.test.mjs +++ b/tests/review-state.test.mjs @@ -1,6 +1,11 @@ import test from 'node:test'; import assert from 'node:assert/strict'; -import {companyStats,parseDateTR} from '../src/services/analytics.js'; +import {companyStats,parseDateTR,parseTL} from '../src/services/analytics.js'; +test('analytics parses Turkish grouped and decimal money without changing scale',()=>{ + assert.equal(parseTL('12.50 TL'),12.5); + assert.equal(parseTL('1.234 TL'),1234); + assert.equal(parseTL('1.234,50 TL'),1234.5); +}); test('analytics rejects impossible Turkish calendar dates instead of rolling them over',()=>{ assert.equal(parseDateTR('31.02.2026'),null); assert.equal(parseDateTR('29.02.2028')?.getDate(),29);