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.
|
- 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.
|
- 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ı
|
### 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.
|
- 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.
|
* 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) {
|
export function parseTL(v) {
|
||||||
if (v == null) return null;
|
if (v == null) return null;
|
||||||
if (typeof v === 'number') return isFinite(v) ? v : null;
|
if (typeof v === 'number') return isFinite(v) ? v : null;
|
||||||
const s = String(v).replace(/[^\d.,]/g, '');
|
const s = String(v).replace(/[^\d.,]/g, '');
|
||||||
if (!s) return null;
|
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);
|
const n = parseFloat(norm);
|
||||||
return isFinite(n) ? n : null;
|
return isFinite(n) ? n : null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
import test from 'node:test';
|
import test from 'node:test';
|
||||||
import assert from 'node:assert/strict';
|
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',()=>{
|
test('analytics rejects impossible Turkish calendar dates instead of rolling them over',()=>{
|
||||||
assert.equal(parseDateTR('31.02.2026'),null);
|
assert.equal(parseDateTR('31.02.2026'),null);
|
||||||
assert.equal(parseDateTR('29.02.2028')?.getDate(),29);
|
assert.equal(parseDateTR('29.02.2028')?.getDate(),29);
|
||||||
|
|||||||
Reference in New Issue
Block a user