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:
@@ -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');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user