fix: parse decimal money values without scale errors
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user