From 096b687d06b1b17df629e2a9bcde9f9df0902193 Mon Sep 17 00:00:00 2001 From: vchuser Date: Tue, 28 Jul 2026 18:24:52 +0200 Subject: [PATCH] Entferne unerreichbaren Zweig im Rank-Muster, korrigiere Testnamen src/ocr-extract.js: RANK_PATTERN enthielt [Xx], obwohl der Text an dieser Stelle bereits vollstaendig grossgeschrieben ist (normalizeToken laeuft vorher) - das kleine x konnte nie ankommen. Auf X reduziert, mit Kommentar begruendet. Die uebrigen Muster im Modul (CAPACITY_PATTERN, SPEED_PATTERN, PART_NUMBER_PATTERN, das formFactor-Muster, DATE_CODE_PATTERN) geprueft: keine weiteren unerreichbaren Zweige, alle nutzen bereits ausschliesslich Grossbuchstaben-Zeichenklassen bzw. Ziffern. test/ocr-extract.test.js: Testname behauptete "nur einer plausibel", der Referenztext enthaelt aber zwei plausible Datumscode-Kandidaten (1234 und 1908) - der Test belegt tatsaechlich, dass bei mehreren plausiblen Kandidaten der zuletzt vorkommende gewinnt. Umbenannt entsprechend. Co-Authored-By: Claude Opus 5 (1M context) --- src/ocr-extract.js | 5 ++++- test/ocr-extract.test.js | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/ocr-extract.js b/src/ocr-extract.js index 1572585..9f305e0 100644 --- a/src/ocr-extract.js +++ b/src/ocr-extract.js @@ -7,7 +7,10 @@ const CAPACITY_PATTERN = /\b([0-9OQBSIL]{1,3})\s?GB\b/g; // Kein \b am Ende: auf Etiketten folgt der Geschwindigkeit oft direkt // ein Buchstabe (PC4-2400T), und dort gibt es keine Wortgrenze. const SPEED_PATTERN = /\bPC4[-\s]?([0-9OQ]{4})/g; -const RANK_PATTERN = /\b([0-9OQ][DS]?R[Xx][0-9OQ])\b/g; +// Nur Grossbuchstabe X: der Text ist an dieser Stelle bereits vollstaendig +// grossgeschrieben (siehe normalizeToken/text unten), ein kleines x kann +// hier also nie ankommen - die entsprechende Alternative waere toter Code. +const RANK_PATTERN = /\b([0-9OQ][DS]?RX[0-9OQ])\b/g; const PART_NUMBER_PATTERN = /\b([A-Z]{1,3}[0-9]{2,4}[A-Z0-9]{4,}(?:-[A-Z0-9]{2,6})?)\b/g; const DATE_CODE_PATTERN = /(?:^|\s)([0-9]{4})(?=\s|$)/g; diff --git a/test/ocr-extract.test.js b/test/ocr-extract.test.js index e50bb1b..781e39d 100644 --- a/test/ocr-extract.test.js +++ b/test/ocr-extract.test.js @@ -60,7 +60,7 @@ test('waehlt bei der Teilenummer den laengsten Bindestrich-Kandidaten, nicht den assert.equal(spec.partNumber, 'M386A8K40BM1-CRC4Y'); }); -test('verwirft den Datumscode, wenn mehrere vierstellige Bloecke vorkommen und nur einer plausibel ist', () => { +test('bei mehreren plausiblen Datumscode-Kandidaten gewinnt der zuletzt vorkommende', () => { const spec = extractFields('SAMSUNG\n1234 5678\n64GB 2Rx4 PC4-2666\n9012\n1908'); assert.equal(spec.dateCode, '1908'); });