Behandle Mehrdeutigkeit auch bei unverwertbaren Barcodes

Mehrere Barcodes ohne bekanntes Nummernschema, die sich in der
Teilenummer widersprechen, durften bisher nicht mehr Vorrang vor der
per OCR gelesenen Teilenummer erhalten als ein einzelner Treffer -
der erste gewann ungeprueft. Jetzt gilt derselbe Massstab wie bei
verwertbaren Treffern: Vorrang nur bei Eindeutigkeit (ein Code, oder
mehrere mit derselben - via canonical() verwechslungstolerant
verglichenen - Teilenummer). Widersprechen sie sich, stuetzt sich das
Ergebnis allein auf die Texterkennung.

Zusaetzlich: ungueltige @param-Zeile fuer deps in recognize() korrigiert.
This commit is contained in:
vchuser
2026-07-28 15:49:39 +02:00
parent 9c0a88b31b
commit 37df87a324
2 changed files with 59 additions and 9 deletions
+36
View File
@@ -155,3 +155,39 @@ test('haengender OCR-Adapter blockiert nicht dauerhaft, Erkennung ergibt rot', {
assert.equal(result.source, 'none');
assert.equal(result.confidence, 'red');
});
// --- Beanstandung 1 (3. Runde): Mehrdeutigkeit bei unverwertbaren Barcodes ---
test('zwei widersprechende unverwertbare Barcodes: keiner erhaelt Vorrang, gelesene Teilenummer bleibt', async () => {
const result = await recognize({}, {
// Beide ohne bekanntes Nummernschema, und sie widersprechen sich -
// keiner darf die aus dem Klartext gelesene Teilenummer ueberschreiben.
decodeBarcodes: async () => ['7325773', '9999999'],
runOcr: async () => OCR_TEXT,
});
assert.equal(result.source, 'ocr');
assert.equal(result.confidence, 'yellow');
assert.equal(result.spec.partNumber, 'M386A8K40BM1-CRC4Y');
assert.equal(result.spec.capacityGb, 64);
});
test('zwei unverwertbare Barcodes mit gleicher Teilenummer: Vorrang bleibt bestehen', async () => {
const result = await recognize({}, {
decodeBarcodes: async () => ['7325773', '7325773'],
runOcr: async () => OCR_TEXT,
});
assert.equal(result.source, 'ocr');
assert.equal(result.confidence, 'yellow');
assert.equal(result.spec.partNumber, '7325773');
});
test('zwei unverwertbare Barcodes, die sich nur in einer Verwechslung unterscheiden, gelten als derselbe', async () => {
const result = await recognize({}, {
// 'O' und '0' sind eine typische Verwechslung (siehe CONFUSIONS in spec.js).
decodeBarcodes: async () => ['732O773', '7320773'],
runOcr: async () => OCR_TEXT,
});
assert.equal(result.source, 'ocr');
assert.equal(result.confidence, 'yellow');
assert.equal(result.spec.partNumber, '732O773');
});