Skip to content

NUMERIC_MATCH bewertet leere Werte und null als 0 #201

Description

@jurei733

Beschreibung

Bei der numerischen Übereinstimmung (NUMERIC_MATCH) werden leere Antwortwerte bzw. null aktuell wie der Zahlenwert 0 behandelt. Dadurch kann eine Regel NUMERIC_MATCH = 0 auch dann als richtig bewertet werden, wenn ein Eingabefeld leer geblieben ist.

Das fällt besonders auf, wenn bei Basisvariablen die Processing-Optionen TAKE_DISPLAYED_AS_VALUE_CHANGED und TAKE_EMPTY_AS_VALID gesetzt sind, damit abgeleitete Variablen auch bei fehlenden Werten ausgewertet werden können.

Reproduktion

Minimaler Fall mit @iqb/responses 5.1.0:

const { CodingSchemeFactory } = require('@iqb/responses');

const variableCodings = [{
  id: 'gap1',
  alias: 'gap1',
  sourceType: 'BASE',
  sourceParameters: {
    processing: ['TAKE_DISPLAYED_AS_VALUE_CHANGED', 'TAKE_EMPTY_AS_VALID']
  },
  processing: [],
  fragmenting: '',
  codeModel: 'RULES_ONLY',
  codes: [{
    id: 1,
    score: 1,
    ruleSets: [{
      rules: [{ method: 'NUMERIC_MATCH', parameters: ['0'] }]
    }]
  }, {
    id: 0,
    score: 0,
    type: 'RESIDUAL_AUTO'
  }]
}];

CodingSchemeFactory.code([
  { id: 'gap1', value: '', status: 'DISPLAYED' }
], variableCodings);

Aktuelles Verhalten

Der leere Wert wird als CODING_COMPLETE mit code: 1 / score: 1 bewertet. Dasselbe passiert mit value: null und status: 'VALUE_CHANGED'.

Ursache ist, dass getValueAsNumber(null) und getValueAsNumber('') derzeit 0 zurückgeben und NUMERIC_MATCH nicht vorher auf null/leer prüft.

Erwartetes Verhalten

NUMERIC_MATCH = 0 sollte nur tatsächliche numerische Nullwerte treffen, z. B. 0, '0', '00', '0,0', aber nicht null oder leere Strings.

Leere bzw. technische Nullwerte sollten stattdessen explizit über IS_EMPTY bzw. IS_NULL kodiert werden können.

Workaround

Bis zur Korrektur können vor der NUMERIC_MATCH = 0-Regel eigene Codes für IS_EMPTY und ggf. IS_NULL mit 0 Punkten angelegt werden. Da Codes in Reihenfolge geprüft werden, fangen diese Regeln leere/null-Werte ab, bevor die numerische 0-Regel greift.

Hinweis

Eine Änderung kann bestehende Kodierschemata beeinflussen, falls diese bisher implizit darauf beruhen, dass leer/null als numerische 0 zählt. Daher sollte der Fix vermutlich mit Release-Hinweis bzw. Migrationsempfehlung erfolgen.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

Fields

No fields configured for Bug.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions