ReceiptOutputEntry.fromJson constructor
Liest einen gepufferten Eintrag (toJson) zurueck, streng: ein
unbekanntes Feld (unbekanntes Feld "<name>", wie npm ohne den Vorsatz
entries[i]: ) oder ein Feld mit falschem Typ wirft
KasseneckValidationError (kind: request). Ein unbekanntes Feld ginge
sonst still verloren (der Puffer haette etwas gemerkt, das nie gemeldet
wird). Ob die Werte gueltig sind, prueft erst das Melden.
Implementation
factory ReceiptOutputEntry.fromJson(Map<String, dynamic> json) {
const name = Aufrufe.logReceiptOutputs;
for (final feld in json.keys) {
if (!_eintragsfelder.contains(feld)) throw KasseneckValidationError(name, 'unbekanntes Feld "$feld"', 'request');
}
// Ein fehlendes Feld bleibt leer: das Melden weist es dann mit demselben
// Grund ab wie das npm-Paket (`entries[i].key fehlt` ...).
String text(String feld) {
final w = json[feld];
if (w == null) return '';
if (w is! String) throw KasseneckValidationError(name, '$feld muss ein Text sein', 'request');
return w;
}
final at = json['at'];
final ergebnis = json['result'];
// Ein ausdrueckliches null ist kein fehlendes Ergebnis, sondern ein Wert
// ausserhalb des Katalogs (wie im npm-Paket); nur ein fehlendes Feld gilt
// als ohne Ergebnis.
if (ergebnis == null && json.containsKey('result')) {
throw KasseneckValidationError(name, 'result muss ${receiptOutputResults.join(', ')} sein', 'request');
}
if (ergebnis != null && ergebnis is! String) {
throw const KasseneckValidationError(name, 'result muss ein Text sein', 'request');
}
return ReceiptOutputEntry(
key: text('key'),
receiptId: text('receiptId'),
kind: text('kind'),
at: _ganzeZahl(at) ?? at ?? '',
result: ergebnis as String?,
);
}