@kreiseck/kasseneck-api 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,38 @@ Was vor 0.7.0 geschah, steht in der Commit-Historie (`git log`); ab hier wird
4
4
  es hier geführt. Ein Eintrag nennt die Änderung **und ihren Grund** —
5
5
  nur der Grund überlebt den nächsten Umbau.
6
6
 
7
+ ## 1.1.1
8
+
9
+ The code-table test sheet asks for the right row. Reason: a Bluetooth
10
+ printer that only knows PC437 printed rows 2 and 3 with correct umlauts but
11
+ wrong glyphs for `€` and `§` (`╒`, `⌡`), and row 4 correct with gaps for
12
+ `€` and `§`. "The first row that looks exactly like above" confused users,
13
+ and "the row with correct umlauts" would pick row 2. The rule now is: the
14
+ row with no wrong character; a gap is fine; if several fit, the one with
15
+ the fewest gaps; if none fits, 6.
16
+
17
+ Additive, no breaking change; receipts are byte for byte the same (the 24
18
+ `code-table-receipt.*.hex` files are unchanged).
19
+
20
+ - **Test sheet** (`./receipt`): reference heading `codetable.reference` is
21
+ now "So sehen die Zeichen richtig aus" (32 columns; with a colon it would
22
+ wrap), the footer is the new rule: `codetable.instruction_title` (bold),
23
+ `codetable.instruction`, `codetable.instruction_none` ("Passt keine:
24
+ {number}.", the replacement row). As before, everything outside the test
25
+ rows prints with replacement letters (pure ASCII), so "Lücke" from the
26
+ catalogue stands as "Luecke" on the sheet, on paper and in the line model.
27
+ Rows, big numbers, margins and the end reset are unchanged. Contract:
28
+ `fixtures/expected/code-table-test-sheet.*`.
29
+ - **Screen texts** (`fixtures/pos-texts.json`): `codetable.question` is now
30
+ "In welcher Zeile steht kein falsches Zeichen?"; new
31
+ `codetable.question_hint`, `codetable.preview_title`, `codetable.apply`,
32
+ `codetable.other_row`.
33
+ - **Preview** (`./printing`): `codeTablePreviewText(table)` returns the
34
+ sample "Käsekrainer 3,50 €" / "Tee 80°" as it prints with that table
35
+ (lines joined by `\n`), e.g. `pc437` gives "Käsekrainer 3,50 EUR", so the
36
+ user sees the effect of a row before applying it. Shared contract with the
37
+ Dart twin: `fixtures/code-table-preview.json`.
38
+
7
39
  ## 1.1.0
8
40
 
9
41
  Receipt printers that print umlauts and special characters correctly.
@@ -470,10 +470,17 @@ declare const MELDUNGEN_ROH: {
470
470
  readonly text: "Nichts gespeichert.";
471
471
  };
472
472
  readonly 'codetable.question': {
473
- readonly text: "Welche Zeile sieht auf dem Papier aus wie oben?";
473
+ readonly text: "In welcher Zeile steht kein falsches Zeichen?";
474
+ };
475
+ readonly 'codetable.question_hint': {
476
+ readonly text: "Lücken sind in Ordnung.";
474
477
  };
475
478
  readonly 'codetable.instruction': {
476
- readonly text: "Die Nummer der ersten Zeile, die genau wie oben aussieht, in der Kasse antippen.";
479
+ readonly text: "Die Zeile, in der KEIN falsches Zeichen steht. Eine Lücke ist in Ordnung. Passen mehrere, die mit den wenigsten Lücken.";
480
+ };
481
+ readonly 'codetable.instruction_none': {
482
+ readonly text: "Passt keine: {number}.";
483
+ readonly placeholders: readonly ["number"];
477
484
  };
478
485
  readonly 'bluetooth.off': {
479
486
  readonly text: "Bluetooth ist ausgeschaltet. Bitte einschalten und erneut suchen.";
@@ -974,7 +981,7 @@ declare const BESCHRIFTUNGEN_ROH: {
974
981
  readonly text: "ZEICHENSATZ-TEST";
975
982
  };
976
983
  readonly 'codetable.reference': {
977
- readonly text: "So muss jede Zeile aussehen:";
984
+ readonly text: "So sehen die Zeichen richtig aus";
978
985
  };
979
986
  readonly 'codetable.replacement_note': {
980
987
  readonly text: "(Ersatz, passt immer)";
@@ -996,6 +1003,18 @@ declare const BESCHRIFTUNGEN_ROH: {
996
1003
  readonly text: "Zeichensatz: Nr. {number}";
997
1004
  readonly placeholders: readonly ["number"];
998
1005
  };
1006
+ readonly 'codetable.instruction_title': {
1007
+ readonly text: "Welche Zeile nehmen?";
1008
+ };
1009
+ readonly 'codetable.preview_title': {
1010
+ readonly text: "So steht es dann am Bon:";
1011
+ };
1012
+ readonly 'codetable.apply': {
1013
+ readonly text: "Übernehmen";
1014
+ };
1015
+ readonly 'codetable.other_row': {
1016
+ readonly text: "Andere Zeile";
1017
+ };
999
1018
  };
1000
1019
  export type LabelKey = keyof typeof BESCHRIFTUNGEN_ROH;
1001
1020
  export declare const LABELS: Record<LabelKey, TextEntry>;
@@ -256,9 +256,17 @@ const MELDUNGEN_ROH = {
256
256
  // damit niemand einen halb eingerichteten Drucker vermutet.
257
257
  'print.wizard_cancelled': { text: 'Nichts gespeichert.' },
258
258
  // Zeichensatz-Test im Drucker-Wizard: das Testblatt nennt die Anleitung,
259
- // der Bildschirm stellt die Frage daneben.
260
- 'codetable.question': { text: 'Welche Zeile sieht auf dem Papier aus wie oben?' },
261
- 'codetable.instruction': { text: 'Die Nummer der ersten Zeile, die genau wie oben aussieht, in der Kasse antippen.' },
259
+ // der Bildschirm stellt die Frage daneben. Die Regel ist „kein falsches
260
+ // Zeichen“, nicht „erste Zeile“ und nicht „Umlaute richtig“: ein Drucker
261
+ // mit nur PC437 druckt Zeile 2 und 3 mit richtigen Umlauten, aber falschem
262
+ // € und § (╒, ⌡); richtig ist dort Zeile 4, mit Luecken fuer € und §.
263
+ // Am Papier steht „Lücke“ als „Luecke“ (Ersatzbuchstaben wie jeder Text
264
+ // ausserhalb der Testzeilen), am Bildschirm mit Umlaut.
265
+ 'codetable.question': { text: 'In welcher Zeile steht kein falsches Zeichen?' },
266
+ 'codetable.question_hint': { text: 'Lücken sind in Ordnung.' },
267
+ 'codetable.instruction': { text: 'Die Zeile, in der KEIN falsches Zeichen steht. Eine Lücke ist in Ordnung. Passen mehrere, die mit den wenigsten Lücken.' },
268
+ // `{number}` ist die Ersatz-Zeile (6), die immer passt.
269
+ 'codetable.instruction_none': { text: 'Passt keine: {number}.', placeholders: ['number'] },
262
270
  'bluetooth.off': { text: 'Bluetooth ist ausgeschaltet. Bitte einschalten und erneut suchen.', only: ['app'] },
263
271
  'bluetooth.permission_missing': { text: 'Bitte die Freigabe in den Geräte-Einstellungen erteilen.', only: ['app'] },
264
272
  'bluetooth.search_failed': { text: 'Die Suche ist fehlgeschlagen: {reason}', placeholders: ['reason'], only: ['app'] },
@@ -571,17 +579,25 @@ const BESCHRIFTUNGEN_ROH = {
571
579
  'cancellation.payment_remainder': { text: 'Rest {amount}', placeholders: ['amount'] },
572
580
  'cancellation.difference': { text: 'Differenz' },
573
581
  // --- Zeichensatz-Test (Testblatt und Drucker & Lade) ----------------------
574
- // Das Testblatt druckt diese Texte; sie bleiben reines ASCII bis auf die
575
- // Knoepfe am Bildschirm. `{chars}` sind die fehlenden Zeichen einer Zeile
582
+ // Das Testblatt druckt diese Texte mit Ersatzbuchstaben (reines ASCII);
583
+ // die Knoepfe stehen nur am Bildschirm. `{chars}` sind die fehlenden Zeichen einer Zeile
576
584
  // („€“ bzw. „€ §“), `{number}` die gewaehlte Zeile (1-6).
577
585
  'codetable.title': { text: 'ZEICHENSATZ-TEST' },
578
- 'codetable.reference': { text: 'So muss jede Zeile aussehen:' },
586
+ // Genau 32 Spalten: mit Doppelpunkt waeren es 33, die Ueberschrift braeche um.
587
+ 'codetable.reference': { text: 'So sehen die Zeichen richtig aus' },
579
588
  'codetable.replacement_note': { text: '(Ersatz, passt immer)' },
580
589
  'codetable.missing': { text: 'ohne {chars}', placeholders: ['chars'] },
581
590
  'codetable.print_again': { text: 'Nochmal drucken' },
582
591
  'codetable.not_checked': { text: 'Umlaute noch nicht geprüft' },
583
592
  'codetable.check': { text: 'Umlaute prüfen' },
584
593
  'codetable.current': { text: 'Zeichensatz: Nr. {number}', placeholders: ['number'] },
594
+ // Ueberschrift der Anleitung am Testblatt.
595
+ 'codetable.instruction_title': { text: 'Welche Zeile nehmen?' },
596
+ // Nach der Wahl: das Beispiel so, wie es mit der Zeile am Bon steht
597
+ // (`codeTablePreviewText`), dann uebernehmen oder zurueck zur Frage.
598
+ 'codetable.preview_title': { text: 'So steht es dann am Bon:' },
599
+ 'codetable.apply': { text: 'Übernehmen' },
600
+ 'codetable.other_row': { text: 'Andere Zeile' },
585
601
  };
586
602
  exports.LABELS = BESCHRIFTUNGEN_ROH;
587
603
  /** Die Beschriftung zum Schluessel, Platzhalter ersetzt; fehlt ein Wert, wirft es wie `messageText`. */
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Die Vorschau im Drucker-Wizard: nach der Wahl einer Zeile zeigt der
3
+ * Bildschirm ein Beispiel so, wie es mit dieser Tabelle am Bon steht. Wer
4
+ * Zeile 4 (PC437) waehlt, sieht „3,50 EUR“ statt „3,50 €“, bevor er
5
+ * uebernimmt. Gemeinsamer Prueffall mit dem Dart-Zwilling:
6
+ * `fixtures/code-table-preview.json`.
7
+ */
8
+ import { type CodeTableId } from './code-tables.js';
9
+ /**
10
+ * Das Beispiel mit den Ersetzungen der Tabelle, Zeilen durch `\n` getrennt:
11
+ * fehlt der Tabelle ein Zeichen, stehen seine Ersatzbuchstaben da
12
+ * (`pc437` -> „Käsekrainer 3,50 EUR“, `replacement` -> „Kaesekrainer 3,50 EUR“).
13
+ * Eine unbekannte Kennung wird gemeldet.
14
+ */
15
+ export declare function codeTablePreviewText(table: CodeTableId): string;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.codeTablePreviewText = codeTablePreviewText;
4
+ /**
5
+ * Die Vorschau im Drucker-Wizard: nach der Wahl einer Zeile zeigt der
6
+ * Bildschirm ein Beispiel so, wie es mit dieser Tabelle am Bon steht. Wer
7
+ * Zeile 4 (PC437) waehlt, sieht „3,50 EUR“ statt „3,50 €“, bevor er
8
+ * uebernimmt. Gemeinsamer Prueffall mit dem Dart-Zwilling:
9
+ * `fixtures/code-table-preview.json`.
10
+ */
11
+ const code_tables_js_1 = require("./code-tables.js");
12
+ const printable_js_1 = require("./printable.js");
13
+ /** Das Beispiel: Umlaut, €, °. */
14
+ const BEISPIEL = ['Käsekrainer 3,50 €', 'Tee 80°'];
15
+ /**
16
+ * Das Beispiel mit den Ersetzungen der Tabelle, Zeilen durch `\n` getrennt:
17
+ * fehlt der Tabelle ein Zeichen, stehen seine Ersatzbuchstaben da
18
+ * (`pc437` -> „Käsekrainer 3,50 EUR“, `replacement` -> „Kaesekrainer 3,50 EUR“).
19
+ * Eine unbekannte Kennung wird gemeldet.
20
+ */
21
+ function codeTablePreviewText(table) {
22
+ (0, code_tables_js_1.codeTableById)(table);
23
+ return BEISPIEL.map((zeile) => (0, printable_js_1.escPosPrintableText)(zeile, table)).join('\n');
24
+ }
@@ -2,4 +2,5 @@ export { type PosPaperSize, type PosAlign, type PosFont, type PosCutMode, type P
2
2
  export { type CodeTableId, type CodeTable, CODE_TABLES, codeTableById, codeTableFromSetting, encodeForCodeTable, } from './code-tables.js';
3
3
  export { type QrModuleSize, type QrSizing, QR_MODULE_SIZE_CAP, QR_QUIET_ZONE_MODULES, QR_MIN_MODULE_DOTS, QR_EXCEPTION_MODULE_DOTS, QR_MAX_MODULE_DOTS, QR_PRINT_WIDTH_DOTS, qrModuleCount, qrFitsInVersion, computeQrSizing, qrSizingFor, } from './qr-groesse.js';
4
4
  export { escPosPrintableText } from './printable.js';
5
+ export { codeTablePreviewText } from './code-table-preview.js';
5
6
  export { type UsbEndpointLike, type UsbAlternateLike, type UsbInterfaceLike, type UsbConfigurationLike, type UsbTransferOutResultLike, type UsbWriterLike, type UsbIdentityLike, type UsbDeviceLike, type UsbPrinterEndpoint, type UsbPrinterConnection, USB_VENDOR_EPSON, USB_CLASS_PRINTER, UsbTimeoutError, usbDeviceKey, usbFindPrinterEndpoint, usbWriteAll, usbConnectPrinter, usbPrint, usbDisconnect, } from './webusb.js';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.usbDisconnect = exports.usbPrint = exports.usbConnectPrinter = exports.usbWriteAll = exports.usbFindPrinterEndpoint = exports.usbDeviceKey = exports.UsbTimeoutError = exports.USB_CLASS_PRINTER = exports.USB_VENDOR_EPSON = exports.escPosPrintableText = exports.qrSizingFor = exports.computeQrSizing = exports.qrFitsInVersion = exports.qrModuleCount = exports.QR_PRINT_WIDTH_DOTS = exports.QR_MAX_MODULE_DOTS = exports.QR_EXCEPTION_MODULE_DOTS = exports.QR_MIN_MODULE_DOTS = exports.QR_QUIET_ZONE_MODULES = exports.QR_MODULE_SIZE_CAP = exports.encodeForCodeTable = exports.codeTableFromSetting = exports.codeTableById = exports.CODE_TABLES = exports.wrapText = exports.escPosWrapLines = exports.escPosMaxCharsPerLine = exports.qrCodeBytes = exports.encodeEscPosText = exports.escPosRasterImage = exports.rasterRowsBase64 = exports.rasterRowsBytes = exports.qrRasterDots = exports.escPosQrRaster = exports.escPosQrCode = exports.escPosRow = exports.escPosHr = exports.escPosCut = exports.escPosFeed = exports.escPosEmptyLines = exports.escPosText = exports.escPosSetStyles = exports.escPosSetGlobalFont = exports.escPosSetGlobalCodeTable = exports.escPosReset = exports.escPosBytes = exports.createEscPosDocument = void 0;
3
+ exports.usbDisconnect = exports.usbPrint = exports.usbConnectPrinter = exports.usbWriteAll = exports.usbFindPrinterEndpoint = exports.usbDeviceKey = exports.UsbTimeoutError = exports.USB_CLASS_PRINTER = exports.USB_VENDOR_EPSON = exports.codeTablePreviewText = exports.escPosPrintableText = exports.qrSizingFor = exports.computeQrSizing = exports.qrFitsInVersion = exports.qrModuleCount = exports.QR_PRINT_WIDTH_DOTS = exports.QR_MAX_MODULE_DOTS = exports.QR_EXCEPTION_MODULE_DOTS = exports.QR_MIN_MODULE_DOTS = exports.QR_QUIET_ZONE_MODULES = exports.QR_MODULE_SIZE_CAP = exports.encodeForCodeTable = exports.codeTableFromSetting = exports.codeTableById = exports.CODE_TABLES = exports.wrapText = exports.escPosWrapLines = exports.escPosMaxCharsPerLine = exports.qrCodeBytes = exports.encodeEscPosText = exports.escPosRasterImage = exports.rasterRowsBase64 = exports.rasterRowsBytes = exports.qrRasterDots = exports.escPosQrRaster = exports.escPosQrCode = exports.escPosRow = exports.escPosHr = exports.escPosCut = exports.escPosFeed = exports.escPosEmptyLines = exports.escPosText = exports.escPosSetStyles = exports.escPosSetGlobalFont = exports.escPosSetGlobalCodeTable = exports.escPosReset = exports.escPosBytes = exports.createEscPosDocument = void 0;
4
4
  var escpos_js_1 = require("./escpos.js");
5
5
  Object.defineProperty(exports, "createEscPosDocument", { enumerable: true, get: function () { return escpos_js_1.createEscPosDocument; } });
6
6
  Object.defineProperty(exports, "escPosBytes", { enumerable: true, get: function () { return escpos_js_1.escPosBytes; } });
@@ -43,6 +43,8 @@ Object.defineProperty(exports, "computeQrSizing", { enumerable: true, get: funct
43
43
  Object.defineProperty(exports, "qrSizingFor", { enumerable: true, get: function () { return qr_groesse_js_1.qrSizingFor; } });
44
44
  var printable_js_1 = require("./printable.js");
45
45
  Object.defineProperty(exports, "escPosPrintableText", { enumerable: true, get: function () { return printable_js_1.escPosPrintableText; } });
46
+ var code_table_preview_js_1 = require("./code-table-preview.js");
47
+ Object.defineProperty(exports, "codeTablePreviewText", { enumerable: true, get: function () { return code_table_preview_js_1.codeTablePreviewText; } });
46
48
  var webusb_js_1 = require("./webusb.js");
47
49
  Object.defineProperty(exports, "USB_VENDOR_EPSON", { enumerable: true, get: function () { return webusb_js_1.USB_VENDOR_EPSON; } });
48
50
  Object.defineProperty(exports, "USB_CLASS_PRINTER", { enumerable: true, get: function () { return webusb_js_1.USB_CLASS_PRINTER; } });
@@ -5,8 +5,14 @@
5
5
  * Oben steht die Vorlage-Zeile als Rasterbild -- ein Bild druckt jeder
6
6
  * Drucker gleich, egal welche Tabelle er gerade hat. Darunter je Tabelle des
7
7
  * Katalogs eine Zeile mit ihrer Nummer (gross), umgeschaltet mit `ESC t n`
8
- * und mit den Bytes dieser Tabelle. Die erste Zeile, die aussieht wie die
9
- * Vorlage, ist die richtige; Zeile 6 (Ersatzbuchstaben) passt immer.
8
+ * und mit den Bytes dieser Tabelle. Richtig ist die Zeile ohne falsches
9
+ * Zeichen; eine Luecke (Zeichen fehlt der Tabelle) ist in Ordnung, bei
10
+ * mehreren die mit den wenigsten Luecken, sonst Zeile 6 (Ersatzbuchstaben).
11
+ * Nicht „die erste Zeile mit richtigen Umlauten“: ein Drucker mit nur PC437
12
+ * druckt Zeile 2 und 3 mit richtigen Umlauten, aber falschem € und §.
13
+ *
14
+ * Alles ausserhalb der Testzeilen steht mit Ersatzbuchstaben (reines ASCII),
15
+ * auch die Anleitung: „Lücke“ aus dem Katalog steht am Blatt als „Luecke“.
10
16
  *
11
17
  * Bildschirm und Papier zeigen dasselbe Blatt: `codeTableTestSheet` liefert
12
18
  * es im Zeilenmodell des Beleg-Blatts (`ReceiptSheet`), `codeTableTestSheetBytes`
@@ -93,7 +93,9 @@ function blattBauen(options) {
93
93
  bloecke.push(zeile(einzug + t));
94
94
  bloecke.push(zeile(einzug + nurAscii((0, texte_js_1.labelText)('codetable.replacement_note'))));
95
95
  bloecke.push(doppelt);
96
+ bloecke.push(...zeilen((0, texte_js_1.labelText)('codetable.instruction_title'), true));
96
97
  bloecke.push(...zeilen((0, texte_js_1.messageText)('codetable.instruction')));
98
+ bloecke.push(...zeilen((0, texte_js_1.messageText)('codetable.instruction_none', { number: ersatz.number })));
97
99
  bloecke.push(doppelt);
98
100
  return {
99
101
  blatt: {
@@ -4,4 +4,4 @@
4
4
  * Client-Version, Nachtrag §6). Ein Test haelt sie gleich mit `package.json`;
5
5
  * beim Anheben der Version beide Stellen aendern.
6
6
  */
7
- export declare const PACKAGE_VERSION = "1.1.0";
7
+ export declare const PACKAGE_VERSION = "1.1.1";
@@ -7,4 +7,4 @@ exports.PACKAGE_VERSION = void 0;
7
7
  * Client-Version, Nachtrag §6). Ein Test haelt sie gleich mit `package.json`;
8
8
  * beim Anheben der Version beide Stellen aendern.
9
9
  */
10
- exports.PACKAGE_VERSION = '1.1.0';
10
+ exports.PACKAGE_VERSION = '1.1.1';
@@ -470,10 +470,17 @@ declare const MELDUNGEN_ROH: {
470
470
  readonly text: "Nichts gespeichert.";
471
471
  };
472
472
  readonly 'codetable.question': {
473
- readonly text: "Welche Zeile sieht auf dem Papier aus wie oben?";
473
+ readonly text: "In welcher Zeile steht kein falsches Zeichen?";
474
+ };
475
+ readonly 'codetable.question_hint': {
476
+ readonly text: "Lücken sind in Ordnung.";
474
477
  };
475
478
  readonly 'codetable.instruction': {
476
- readonly text: "Die Nummer der ersten Zeile, die genau wie oben aussieht, in der Kasse antippen.";
479
+ readonly text: "Die Zeile, in der KEIN falsches Zeichen steht. Eine Lücke ist in Ordnung. Passen mehrere, die mit den wenigsten Lücken.";
480
+ };
481
+ readonly 'codetable.instruction_none': {
482
+ readonly text: "Passt keine: {number}.";
483
+ readonly placeholders: readonly ["number"];
477
484
  };
478
485
  readonly 'bluetooth.off': {
479
486
  readonly text: "Bluetooth ist ausgeschaltet. Bitte einschalten und erneut suchen.";
@@ -974,7 +981,7 @@ declare const BESCHRIFTUNGEN_ROH: {
974
981
  readonly text: "ZEICHENSATZ-TEST";
975
982
  };
976
983
  readonly 'codetable.reference': {
977
- readonly text: "So muss jede Zeile aussehen:";
984
+ readonly text: "So sehen die Zeichen richtig aus";
978
985
  };
979
986
  readonly 'codetable.replacement_note': {
980
987
  readonly text: "(Ersatz, passt immer)";
@@ -996,6 +1003,18 @@ declare const BESCHRIFTUNGEN_ROH: {
996
1003
  readonly text: "Zeichensatz: Nr. {number}";
997
1004
  readonly placeholders: readonly ["number"];
998
1005
  };
1006
+ readonly 'codetable.instruction_title': {
1007
+ readonly text: "Welche Zeile nehmen?";
1008
+ };
1009
+ readonly 'codetable.preview_title': {
1010
+ readonly text: "So steht es dann am Bon:";
1011
+ };
1012
+ readonly 'codetable.apply': {
1013
+ readonly text: "Übernehmen";
1014
+ };
1015
+ readonly 'codetable.other_row': {
1016
+ readonly text: "Andere Zeile";
1017
+ };
999
1018
  };
1000
1019
  export type LabelKey = keyof typeof BESCHRIFTUNGEN_ROH;
1001
1020
  export declare const LABELS: Record<LabelKey, TextEntry>;
@@ -246,9 +246,17 @@ const MELDUNGEN_ROH = {
246
246
  // damit niemand einen halb eingerichteten Drucker vermutet.
247
247
  'print.wizard_cancelled': { text: 'Nichts gespeichert.' },
248
248
  // Zeichensatz-Test im Drucker-Wizard: das Testblatt nennt die Anleitung,
249
- // der Bildschirm stellt die Frage daneben.
250
- 'codetable.question': { text: 'Welche Zeile sieht auf dem Papier aus wie oben?' },
251
- 'codetable.instruction': { text: 'Die Nummer der ersten Zeile, die genau wie oben aussieht, in der Kasse antippen.' },
249
+ // der Bildschirm stellt die Frage daneben. Die Regel ist „kein falsches
250
+ // Zeichen“, nicht „erste Zeile“ und nicht „Umlaute richtig“: ein Drucker
251
+ // mit nur PC437 druckt Zeile 2 und 3 mit richtigen Umlauten, aber falschem
252
+ // € und § (╒, ⌡); richtig ist dort Zeile 4, mit Luecken fuer € und §.
253
+ // Am Papier steht „Lücke“ als „Luecke“ (Ersatzbuchstaben wie jeder Text
254
+ // ausserhalb der Testzeilen), am Bildschirm mit Umlaut.
255
+ 'codetable.question': { text: 'In welcher Zeile steht kein falsches Zeichen?' },
256
+ 'codetable.question_hint': { text: 'Lücken sind in Ordnung.' },
257
+ 'codetable.instruction': { text: 'Die Zeile, in der KEIN falsches Zeichen steht. Eine Lücke ist in Ordnung. Passen mehrere, die mit den wenigsten Lücken.' },
258
+ // `{number}` ist die Ersatz-Zeile (6), die immer passt.
259
+ 'codetable.instruction_none': { text: 'Passt keine: {number}.', placeholders: ['number'] },
252
260
  'bluetooth.off': { text: 'Bluetooth ist ausgeschaltet. Bitte einschalten und erneut suchen.', only: ['app'] },
253
261
  'bluetooth.permission_missing': { text: 'Bitte die Freigabe in den Geräte-Einstellungen erteilen.', only: ['app'] },
254
262
  'bluetooth.search_failed': { text: 'Die Suche ist fehlgeschlagen: {reason}', placeholders: ['reason'], only: ['app'] },
@@ -561,17 +569,25 @@ const BESCHRIFTUNGEN_ROH = {
561
569
  'cancellation.payment_remainder': { text: 'Rest {amount}', placeholders: ['amount'] },
562
570
  'cancellation.difference': { text: 'Differenz' },
563
571
  // --- Zeichensatz-Test (Testblatt und Drucker & Lade) ----------------------
564
- // Das Testblatt druckt diese Texte; sie bleiben reines ASCII bis auf die
565
- // Knoepfe am Bildschirm. `{chars}` sind die fehlenden Zeichen einer Zeile
572
+ // Das Testblatt druckt diese Texte mit Ersatzbuchstaben (reines ASCII);
573
+ // die Knoepfe stehen nur am Bildschirm. `{chars}` sind die fehlenden Zeichen einer Zeile
566
574
  // („€“ bzw. „€ §“), `{number}` die gewaehlte Zeile (1-6).
567
575
  'codetable.title': { text: 'ZEICHENSATZ-TEST' },
568
- 'codetable.reference': { text: 'So muss jede Zeile aussehen:' },
576
+ // Genau 32 Spalten: mit Doppelpunkt waeren es 33, die Ueberschrift braeche um.
577
+ 'codetable.reference': { text: 'So sehen die Zeichen richtig aus' },
569
578
  'codetable.replacement_note': { text: '(Ersatz, passt immer)' },
570
579
  'codetable.missing': { text: 'ohne {chars}', placeholders: ['chars'] },
571
580
  'codetable.print_again': { text: 'Nochmal drucken' },
572
581
  'codetable.not_checked': { text: 'Umlaute noch nicht geprüft' },
573
582
  'codetable.check': { text: 'Umlaute prüfen' },
574
583
  'codetable.current': { text: 'Zeichensatz: Nr. {number}', placeholders: ['number'] },
584
+ // Ueberschrift der Anleitung am Testblatt.
585
+ 'codetable.instruction_title': { text: 'Welche Zeile nehmen?' },
586
+ // Nach der Wahl: das Beispiel so, wie es mit der Zeile am Bon steht
587
+ // (`codeTablePreviewText`), dann uebernehmen oder zurueck zur Frage.
588
+ 'codetable.preview_title': { text: 'So steht es dann am Bon:' },
589
+ 'codetable.apply': { text: 'Übernehmen' },
590
+ 'codetable.other_row': { text: 'Andere Zeile' },
575
591
  };
576
592
  export const LABELS = BESCHRIFTUNGEN_ROH;
577
593
  /** Die Beschriftung zum Schluessel, Platzhalter ersetzt; fehlt ein Wert, wirft es wie `messageText`. */
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Die Vorschau im Drucker-Wizard: nach der Wahl einer Zeile zeigt der
3
+ * Bildschirm ein Beispiel so, wie es mit dieser Tabelle am Bon steht. Wer
4
+ * Zeile 4 (PC437) waehlt, sieht „3,50 EUR“ statt „3,50 €“, bevor er
5
+ * uebernimmt. Gemeinsamer Prueffall mit dem Dart-Zwilling:
6
+ * `fixtures/code-table-preview.json`.
7
+ */
8
+ import { type CodeTableId } from './code-tables.js';
9
+ /**
10
+ * Das Beispiel mit den Ersetzungen der Tabelle, Zeilen durch `\n` getrennt:
11
+ * fehlt der Tabelle ein Zeichen, stehen seine Ersatzbuchstaben da
12
+ * (`pc437` -> „Käsekrainer 3,50 EUR“, `replacement` -> „Kaesekrainer 3,50 EUR“).
13
+ * Eine unbekannte Kennung wird gemeldet.
14
+ */
15
+ export declare function codeTablePreviewText(table: CodeTableId): string;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Die Vorschau im Drucker-Wizard: nach der Wahl einer Zeile zeigt der
3
+ * Bildschirm ein Beispiel so, wie es mit dieser Tabelle am Bon steht. Wer
4
+ * Zeile 4 (PC437) waehlt, sieht „3,50 EUR“ statt „3,50 €“, bevor er
5
+ * uebernimmt. Gemeinsamer Prueffall mit dem Dart-Zwilling:
6
+ * `fixtures/code-table-preview.json`.
7
+ */
8
+ import { codeTableById } from './code-tables.js';
9
+ import { escPosPrintableText } from './printable.js';
10
+ /** Das Beispiel: Umlaut, €, °. */
11
+ const BEISPIEL = ['Käsekrainer 3,50 €', 'Tee 80°'];
12
+ /**
13
+ * Das Beispiel mit den Ersetzungen der Tabelle, Zeilen durch `\n` getrennt:
14
+ * fehlt der Tabelle ein Zeichen, stehen seine Ersatzbuchstaben da
15
+ * (`pc437` -> „Käsekrainer 3,50 EUR“, `replacement` -> „Kaesekrainer 3,50 EUR“).
16
+ * Eine unbekannte Kennung wird gemeldet.
17
+ */
18
+ export function codeTablePreviewText(table) {
19
+ codeTableById(table);
20
+ return BEISPIEL.map((zeile) => escPosPrintableText(zeile, table)).join('\n');
21
+ }
@@ -2,4 +2,5 @@ export { type PosPaperSize, type PosAlign, type PosFont, type PosCutMode, type P
2
2
  export { type CodeTableId, type CodeTable, CODE_TABLES, codeTableById, codeTableFromSetting, encodeForCodeTable, } from './code-tables.js';
3
3
  export { type QrModuleSize, type QrSizing, QR_MODULE_SIZE_CAP, QR_QUIET_ZONE_MODULES, QR_MIN_MODULE_DOTS, QR_EXCEPTION_MODULE_DOTS, QR_MAX_MODULE_DOTS, QR_PRINT_WIDTH_DOTS, qrModuleCount, qrFitsInVersion, computeQrSizing, qrSizingFor, } from './qr-groesse.js';
4
4
  export { escPosPrintableText } from './printable.js';
5
+ export { codeTablePreviewText } from './code-table-preview.js';
5
6
  export { type UsbEndpointLike, type UsbAlternateLike, type UsbInterfaceLike, type UsbConfigurationLike, type UsbTransferOutResultLike, type UsbWriterLike, type UsbIdentityLike, type UsbDeviceLike, type UsbPrinterEndpoint, type UsbPrinterConnection, USB_VENDOR_EPSON, USB_CLASS_PRINTER, UsbTimeoutError, usbDeviceKey, usbFindPrinterEndpoint, usbWriteAll, usbConnectPrinter, usbPrint, usbDisconnect, } from './webusb.js';
@@ -2,4 +2,5 @@ export { createEscPosDocument, escPosBytes, escPosReset, escPosSetGlobalCodeTabl
2
2
  export { CODE_TABLES, codeTableById, codeTableFromSetting, encodeForCodeTable, } from './code-tables.js';
3
3
  export { QR_MODULE_SIZE_CAP, QR_QUIET_ZONE_MODULES, QR_MIN_MODULE_DOTS, QR_EXCEPTION_MODULE_DOTS, QR_MAX_MODULE_DOTS, QR_PRINT_WIDTH_DOTS, qrModuleCount, qrFitsInVersion, computeQrSizing, qrSizingFor, } from './qr-groesse.js';
4
4
  export { escPosPrintableText } from './printable.js';
5
+ export { codeTablePreviewText } from './code-table-preview.js';
5
6
  export { USB_VENDOR_EPSON, USB_CLASS_PRINTER, UsbTimeoutError, usbDeviceKey, usbFindPrinterEndpoint, usbWriteAll, usbConnectPrinter, usbPrint, usbDisconnect, } from './webusb.js';
@@ -5,8 +5,14 @@
5
5
  * Oben steht die Vorlage-Zeile als Rasterbild -- ein Bild druckt jeder
6
6
  * Drucker gleich, egal welche Tabelle er gerade hat. Darunter je Tabelle des
7
7
  * Katalogs eine Zeile mit ihrer Nummer (gross), umgeschaltet mit `ESC t n`
8
- * und mit den Bytes dieser Tabelle. Die erste Zeile, die aussieht wie die
9
- * Vorlage, ist die richtige; Zeile 6 (Ersatzbuchstaben) passt immer.
8
+ * und mit den Bytes dieser Tabelle. Richtig ist die Zeile ohne falsches
9
+ * Zeichen; eine Luecke (Zeichen fehlt der Tabelle) ist in Ordnung, bei
10
+ * mehreren die mit den wenigsten Luecken, sonst Zeile 6 (Ersatzbuchstaben).
11
+ * Nicht „die erste Zeile mit richtigen Umlauten“: ein Drucker mit nur PC437
12
+ * druckt Zeile 2 und 3 mit richtigen Umlauten, aber falschem € und §.
13
+ *
14
+ * Alles ausserhalb der Testzeilen steht mit Ersatzbuchstaben (reines ASCII),
15
+ * auch die Anleitung: „Lücke“ aus dem Katalog steht am Blatt als „Luecke“.
10
16
  *
11
17
  * Bildschirm und Papier zeigen dasselbe Blatt: `codeTableTestSheet` liefert
12
18
  * es im Zeilenmodell des Beleg-Blatts (`ReceiptSheet`), `codeTableTestSheetBytes`
@@ -87,7 +87,9 @@ function blattBauen(options) {
87
87
  bloecke.push(zeile(einzug + t));
88
88
  bloecke.push(zeile(einzug + nurAscii(labelText('codetable.replacement_note'))));
89
89
  bloecke.push(doppelt);
90
+ bloecke.push(...zeilen(labelText('codetable.instruction_title'), true));
90
91
  bloecke.push(...zeilen(messageText('codetable.instruction')));
92
+ bloecke.push(...zeilen(messageText('codetable.instruction_none', { number: ersatz.number })));
91
93
  bloecke.push(doppelt);
92
94
  return {
93
95
  blatt: {
@@ -4,4 +4,4 @@
4
4
  * Client-Version, Nachtrag §6). Ein Test haelt sie gleich mit `package.json`;
5
5
  * beim Anheben der Version beide Stellen aendern.
6
6
  */
7
- export declare const PACKAGE_VERSION = "1.1.0";
7
+ export declare const PACKAGE_VERSION = "1.1.1";
@@ -4,4 +4,4 @@
4
4
  * Client-Version, Nachtrag §6). Ein Test haelt sie gleich mit `package.json`;
5
5
  * beim Anheben der Version beide Stellen aendern.
6
6
  */
7
- export const PACKAGE_VERSION = '1.1.0';
7
+ export const PACKAGE_VERSION = '1.1.1';
@@ -0,0 +1,14 @@
1
+ {
2
+ "sample": [
3
+ "Käsekrainer 3,50 €",
4
+ "Tee 80°"
5
+ ],
6
+ "tables": {
7
+ "wpc1252": "Käsekrainer 3,50 €\nTee 80°",
8
+ "pc858": "Käsekrainer 3,50 €\nTee 80°",
9
+ "pc850": "Käsekrainer 3,50 EUR\nTee 80°",
10
+ "pc437": "Käsekrainer 3,50 EUR\nTee 80°",
11
+ "iso8859_15": "Käsekrainer 3,50 €\nTee 80°",
12
+ "replacement": "Kaesekrainer 3,50 EUR\nTee 80Grad"
13
+ }
14
+ }
@@ -32,7 +32,7 @@
32
32
  },
33
33
  {
34
34
  "kind": "line",
35
- "text": "So muss jede Zeile aussehen: ",
35
+ "text": "So sehen die Zeichen richtig aus",
36
36
  "bold": false,
37
37
  "blank": false
38
38
  },
@@ -116,19 +116,37 @@
116
116
  },
117
117
  {
118
118
  "kind": "line",
119
- "text": "Die Nummer der ersten Zeile, die",
119
+ "text": "Welche Zeile nehmen? ",
120
+ "bold": true,
121
+ "blank": false
122
+ },
123
+ {
124
+ "kind": "line",
125
+ "text": "Die Zeile, in der KEIN falsches ",
126
+ "bold": false,
127
+ "blank": false
128
+ },
129
+ {
130
+ "kind": "line",
131
+ "text": "Zeichen steht. Eine Luecke ist ",
132
+ "bold": false,
133
+ "blank": false
134
+ },
135
+ {
136
+ "kind": "line",
137
+ "text": "in Ordnung. Passen mehrere, die ",
120
138
  "bold": false,
121
139
  "blank": false
122
140
  },
123
141
  {
124
142
  "kind": "line",
125
- "text": "genau wie oben aussieht, in der ",
143
+ "text": "mit den wenigsten Luecken. ",
126
144
  "bold": false,
127
145
  "blank": false
128
146
  },
129
147
  {
130
148
  "kind": "line",
131
- "text": "Kasse antippen. ",
149
+ "text": "Passt keine: 6. ",
132
150
  "bold": false,
133
151
  "blank": false
134
152
  },
@@ -2,58 +2,61 @@
2
2
  3d3d3d3d3d3d3d3d3d3d3d3d0a1b45011c2e20202020202020205a4549434845
3
3
  4e5341545a2d544553540a1b45001c2e2020204b61737365204b45434b2d3120
4
4
  2033302e30392e2031343a30350a1c2e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d
5
- 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d0a1c2e536f206d757373206a65646520
6
- 5a65696c6520617573736568656e3a0a1c2e1d76300030001800000000000000
7
- 0000000000000000000000000000000000000000000000000000000000000000
8
- 0000000000000000000000000000000000000000000000000000019800019800
9
- 0198000000000000000000000000000000000000000000000000000000000000
10
- 0000000000000000000001980001980001980000000000000000000000000000
11
- 0000000000000000000000000000000000000000000000000000000000000000
12
- 0000000000000000000000000000000000000000000000000000000000000000
13
- 0001980001980001980000600000f00002040001f800007c0000f80000f00000
14
- 000000000000000000000000000000000001980001980001980000f00001f800
15
- 070e00039c0000fc0001f80001f8000000000000000000000000000000000000
16
- 0000000000000000000000f000030c00070e00030c0001c00001800001080000
17
- 000000000000000000000000000000000000000000000000000000f000030c00
18
- 070e00030c000380000180000108000000000000000000000000000000000000
19
- 0003f80001f800030c00019800070e00070e0003300003000001c00001980000
20
- 0000000000000000000000000000000000039c00039c00030c00019800060600
21
- 070e0003600007f00001e00000f0000000000000000000000000000000000000
22
- 00000c00030c00030c00019800060600070e0003600007f00003380000000000
23
- 0000000000000000000000000000000000000c00070e00030c00019c00060600
24
- 070e00037000030000031c000000000000000000000000000000000000000000
25
- 0001fc00060600030c00030c00060600070e0003380007e000030c0000000000
26
- 000000000000000000000000000000000003fc00060600030c0003fc00060600
27
- 070e00031c000fe000038c000000000000000000000000000000000000000000
28
- 00070c00060600030c0003fc00070600070e0003060003000001ec0000000000
29
- 0000000000000000000000000000000000060c00070e00030c00070e00070e00
30
- 070e000306000380000078000000000000000000000000000000000000000000
31
- 00060c00030c00030c00060600030c00030c0003060001800000180000000000
32
- 000000000000000000000000000000000003bc00039c0003fc0006060003fc00
33
- 03fc0003ce0001fc00001c000000000000000000000000000000000000000000
34
- 0003fc0001f80001fc000e070001f80001f80003fc0000fc00001c0000000000
35
- 0000000000000000000000000000000000000000000000000000000000000000
36
- 00000000000000000001f8000000000000000000000000000000000000000000
37
- 0000000000000000000000000000000000000000000000000001f00000000000
38
- 0000000000000000000000000000000000000000000000000000000000000000
39
- 0000000000000000000000000000000000000000000000000000000000000000
40
- 0000000000000000000000000000000000000000000000000000000000000000
41
- 0000000000000000000000000000000000000000000000000000000000000000
42
- 00000000000000000000000000000000000000000000000000001c2e2d2d2d2d
43
- 2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a1b4501
44
- 1d21111c2e311b45001d21001c2e1b7410207c20e420f620fc20c420d620dc20
45
- df208020a720b00a1b45011d21111c2e321b45001d21001c2e1b7413207c2084
46
- 20942081208e2099209a20e120d520f520f80a1b45011d21111c2e331b45001d
47
- 21001c2e1b7402207c208420942081208e2099209a20e1202020f520f80a1b45
48
- 011d21111c2e341b45001d21001c2e1b7400207c208420942081208e2099209a
49
- 20e12020202020f80a1b45011d21111c2e351b45001d21001c2e1b7428207c20
50
- e420f620fc20c420d620dc20df20a420a720b00a1c2e2d2d2d2d2d2d2d2d2d2d
51
- 2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a1b45011d21111c2e36
52
- 1b45001d21001c2e1b7400207c206165206f65207565204165204f6520556520
53
- 7373204555520a1c2e20202020205061722e20477261640a1c2e202020202028
54
- 45727361747a2c20706173737420696d6d6572290a1c2e3d3d3d3d3d3d3d3d3d
55
- 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d0a1c2e446965204e75
56
- 6d6d6572206465722065727374656e205a65696c652c206469650a1c2e67656e
57
- 617520776965206f62656e2061757373696568742c20696e206465720a1c2e4b
58
- 6173736520616e74697070656e2e0a1c2e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d
59
- 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d0a1b74100a0a0a0a0a1d5630
5
+ 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d0a1c2e536f20736568656e2064696520
6
+ 5a65696368656e2072696368746967206175730a1c2e1d763000300018000000
7
+ 0000000000000000000000000000000000000000000000000000000000000000
8
+ 0000000000000000000000000000000000000000000000000000000000000198
9
+ 0001980001980000000000000000000000000000000000000000000000000000
10
+ 0000000000000000000000000000019800019800019800000000000000000000
11
+ 0000000000000000000000000000000000000000000000000000000000000000
12
+ 0000000000000000000000000000000000000000000000000000000000000000
13
+ 000000000001980001980001980000600000f00002040001f800007c0000f800
14
+ 00f00000000000000000000000000000000000000001980001980001980000f0
15
+ 0001f800070e00039c0000fc0001f80001f80000000000000000000000000000
16
+ 000000000000000000000000000000f000030c00070e00030c0001c000018000
17
+ 01080000000000000000000000000000000000000000000000000000000000f0
18
+ 00030c00070e00030c0003800001800001080000000000000000000000000000
19
+ 000000000003f80001f800030c00019800070e00070e0003300003000001c000
20
+ 019800000000000000000000000000000000000000039c00039c00030c000198
21
+ 00060600070e0003600007f00001e00000f00000000000000000000000000000
22
+ 0000000000000c00030c00030c00019800060600070e0003600007f000033800
23
+ 000000000000000000000000000000000000000000000c00070e00030c00019c
24
+ 00060600070e00037000030000031c0000000000000000000000000000000000
25
+ 000000000001fc00060600030c00030c00060600070e0003380007e000030c00
26
+ 00000000000000000000000000000000000000000003fc00060600030c0003fc
27
+ 00060600070e00031c000fe000038c0000000000000000000000000000000000
28
+ 0000000000070c00060600030c0003fc00070600070e0003060003000001ec00
29
+ 000000000000000000000000000000000000000000060c00070e00030c00070e
30
+ 00070e00070e0003060003800000780000000000000000000000000000000000
31
+ 0000000000060c00030c00030c00060600030c00030c00030600018000001800
32
+ 00000000000000000000000000000000000000000003bc00039c0003fc000606
33
+ 0003fc0003fc0003ce0001fc00001c0000000000000000000000000000000000
34
+ 000000000003fc0001f80001fc000e070001f80001f80003fc0000fc00001c00
35
+ 0000000000000000000000000000000000000000000000000000000000000000
36
+ 0000000000000000000000000001f80000000000000000000000000000000000
37
+ 000000000000000000000000000000000000000000000000000000000001f000
38
+ 0000000000000000000000000000000000000000000000000000000000000000
39
+ 0000000000000000000000000000000000000000000000000000000000000000
40
+ 0000000000000000000000000000000000000000000000000000000000000000
41
+ 0000000000000000000000000000000000000000000000000000000000000000
42
+ 0000000000000000000000000000000000000000000000000000000000001c2e
43
+ 2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
44
+ 0a1b45011d21111c2e311b45001d21001c2e1b7410207c20e420f620fc20c420
45
+ d620dc20df208020a720b00a1b45011d21111c2e321b45001d21001c2e1b7413
46
+ 207c208420942081208e2099209a20e120d520f520f80a1b45011d21111c2e33
47
+ 1b45001d21001c2e1b7402207c208420942081208e2099209a20e1202020f520
48
+ f80a1b45011d21111c2e341b45001d21001c2e1b7400207c208420942081208e
49
+ 2099209a20e12020202020f80a1b45011d21111c2e351b45001d21001c2e1b74
50
+ 28207c20e420f620fc20c420d620dc20df20a420a720b00a1c2e2d2d2d2d2d2d
51
+ 2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a1b45011d21
52
+ 111c2e361b45001d21001c2e1b7400207c206165206f65207565204165204f65
53
+ 205565207373204555520a1c2e20202020205061722e20477261640a1c2e2020
54
+ 2020202845727361747a2c20706173737420696d6d6572290a1c2e3d3d3d3d3d
55
+ 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d0a1b45011c
56
+ 2e57656c636865205a65696c65206e65686d656e3f0a1b45001c2e446965205a
57
+ 65696c652c20696e20646572204b45494e2066616c73636865730a1c2e5a6569
58
+ 6368656e2073746568742e2045696e65204c7565636b65206973740a1c2e696e
59
+ 204f72646e756e672e2050617373656e206d6568726572652c206469650a1c2e
60
+ 6d69742064656e2077656e69677374656e204c7565636b656e2e0a1c2e506173
61
+ 7374206b65696e653a20362e0a1c2e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d
62
+ 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d0a1b74100a0a0a0a0a1d5630
@@ -2,59 +2,62 @@
2
2
  3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d0a1b45011c2e20202020202020205a45
3
3
  494348454e5341545a2d544553540a1b45001c2e2020204b61737365204b4543
4
4
  4b2d31202033302e30392e2031343a30350a1c2e3d3d3d3d3d3d3d3d3d3d3d3d
5
- 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d0a1c2e536f206d757373206a
6
- 656465205a65696c6520617573736568656e3a0a1c2e1d763000300018000000
7
- 0000000000000000000000000000000000000000000000000000000000000000
8
- 0000000000000000000000000000000000000000000000000000000000000198
9
- 0001980001980000000000000000000000000000000000000000000000000000
10
- 0000000000000000000000000000019800019800019800000000000000000000
11
- 0000000000000000000000000000000000000000000000000000000000000000
12
- 0000000000000000000000000000000000000000000000000000000000000000
13
- 000000000001980001980001980000600000f00002040001f800007c0000f800
14
- 00f00000000000000000000000000000000000000001980001980001980000f0
15
- 0001f800070e00039c0000fc0001f80001f80000000000000000000000000000
16
- 000000000000000000000000000000f000030c00070e00030c0001c000018000
17
- 01080000000000000000000000000000000000000000000000000000000000f0
18
- 00030c00070e00030c0003800001800001080000000000000000000000000000
19
- 000000000003f80001f800030c00019800070e00070e0003300003000001c000
20
- 019800000000000000000000000000000000000000039c00039c00030c000198
21
- 00060600070e0003600007f00001e00000f00000000000000000000000000000
22
- 0000000000000c00030c00030c00019800060600070e0003600007f000033800
23
- 000000000000000000000000000000000000000000000c00070e00030c00019c
24
- 00060600070e00037000030000031c0000000000000000000000000000000000
25
- 000000000001fc00060600030c00030c00060600070e0003380007e000030c00
26
- 00000000000000000000000000000000000000000003fc00060600030c0003fc
27
- 00060600070e00031c000fe000038c0000000000000000000000000000000000
28
- 0000000000070c00060600030c0003fc00070600070e0003060003000001ec00
29
- 000000000000000000000000000000000000000000060c00070e00030c00070e
30
- 00070e00070e0003060003800000780000000000000000000000000000000000
31
- 0000000000060c00030c00030c00060600030c00030c00030600018000001800
32
- 00000000000000000000000000000000000000000003bc00039c0003fc000606
33
- 0003fc0003fc0003ce0001fc00001c0000000000000000000000000000000000
34
- 000000000003fc0001f80001fc000e070001f80001f80003fc0000fc00001c00
35
- 0000000000000000000000000000000000000000000000000000000000000000
36
- 0000000000000000000000000001f80000000000000000000000000000000000
37
- 000000000000000000000000000000000000000000000000000000000001f000
38
- 0000000000000000000000000000000000000000000000000000000000000000
39
- 0000000000000000000000000000000000000000000000000000000000000000
40
- 0000000000000000000000000000000000000000000000000000000000000000
41
- 0000000000000000000000000000000000000000000000000000000000000000
42
- 0000000000000000000000000000000000000000000000000000000000001c2e
43
- 2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
44
- 0a1b45011d21111c2e311b45001d21001c2e1b7410207c20e420f620fc20c420
45
- d620dc20df208020a720b00a1b45011d21111c2e321b45001d21001c2e1b7413
46
- 207c208420942081208e2099209a20e120d520f520f80a1b45011d21111c2e33
47
- 1b45001d21001c2e1b7402207c208420942081208e2099209a20e1202020f520
48
- f80a1b45011d21111c2e341b45001d21001c2e1b7400207c208420942081208e
49
- 2099209a20e12020202020f80a1b45011d21111c2e351b45001d21001c2e1b74
50
- 28207c20e420f620fc20c420d620dc20df20a420a720b00a1c2e2d2d2d2d2d2d
51
- 2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a1b45011d21
52
- 111c2e361b45001d21001c2e1b7400207c206165206f65207565204165204f65
53
- 205565207373204555520a1c2e20202020205061722e20477261640a1c2e2020
54
- 2020202845727361747a2c20706173737420696d6d6572290a1c2e3d3d3d3d3d
55
- 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d0a1c2e4469
56
- 65204e756d6d6572206465722065727374656e205a65696c652c206469650a1c
57
- 2e67656e617520776965206f62656e2061757373696568742c20696e20646572
58
- 0a1c2e4b6173736520616e74697070656e2e0a1c2e3d3d3d3d3d3d3d3d3d3d3d
59
- 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d0a1b74101d4c00000a0a0a
60
- 0a0a1d5630
5
+ 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d0a1c2e536f20736568656e20
6
+ 646965205a65696368656e2072696368746967206175730a1c2e1d7630003000
7
+ 1800000000000000000000000000000000000000000000000000000000000000
8
+ 0000000000000000000000000000000000000000000000000000000000000000
9
+ 0000019800019800019800000000000000000000000000000000000000000000
10
+ 0000000000000000000000000000000000000198000198000198000000000000
11
+ 0000000000000000000000000000000000000000000000000000000000000000
12
+ 0000000000000000000000000000000000000000000000000000000000000000
13
+ 00000000000000000001980001980001980000600000f00002040001f800007c
14
+ 0000f80000f00000000000000000000000000000000000000001980001980001
15
+ 980000f00001f800070e00039c0000fc0001f80001f800000000000000000000
16
+ 00000000000000000000000000000000000000f000030c00070e00030c0001c0
17
+ 0001800001080000000000000000000000000000000000000000000000000000
18
+ 000000f000030c00070e00030c00038000018000010800000000000000000000
19
+ 00000000000000000003f80001f800030c00019800070e00070e000330000300
20
+ 0001c000019800000000000000000000000000000000000000039c00039c0003
21
+ 0c00019800060600070e0003600007f00001e00000f000000000000000000000
22
+ 000000000000000000000c00030c00030c00019800060600070e0003600007f0
23
+ 00033800000000000000000000000000000000000000000000000c00070e0003
24
+ 0c00019c00060600070e00037000030000031c00000000000000000000000000
25
+ 00000000000000000001fc00060600030c00030c00060600070e0003380007e0
26
+ 00030c0000000000000000000000000000000000000000000003fc0006060003
27
+ 0c0003fc00060600070e00031c000fe000038c00000000000000000000000000
28
+ 000000000000000000070c00060600030c0003fc00070600070e000306000300
29
+ 0001ec00000000000000000000000000000000000000000000060c00070e0003
30
+ 0c00070e00070e00070e00030600038000007800000000000000000000000000
31
+ 000000000000000000060c00030c00030c00060600030c00030c000306000180
32
+ 0000180000000000000000000000000000000000000000000003bc00039c0003
33
+ fc0006060003fc0003fc0003ce0001fc00001c00000000000000000000000000
34
+ 00000000000000000003fc0001f80001fc000e070001f80001f80003fc0000fc
35
+ 00001c0000000000000000000000000000000000000000000000000000000000
36
+ 000000000000000000000000000000000001f800000000000000000000000000
37
+ 0000000000000000000000000000000000000000000000000000000000000000
38
+ 0001f00000000000000000000000000000000000000000000000000000000000
39
+ 0000000000000000000000000000000000000000000000000000000000000000
40
+ 0000000000000000000000000000000000000000000000000000000000000000
41
+ 0000000000000000000000000000000000000000000000000000000000000000
42
+ 0000000000000000000000000000000000000000000000000000000000000000
43
+ 00001c2e2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
44
+ 2d2d2d2d0a1b45011d21111c2e311b45001d21001c2e1b7410207c20e420f620
45
+ fc20c420d620dc20df208020a720b00a1b45011d21111c2e321b45001d21001c
46
+ 2e1b7413207c208420942081208e2099209a20e120d520f520f80a1b45011d21
47
+ 111c2e331b45001d21001c2e1b7402207c208420942081208e2099209a20e120
48
+ 2020f520f80a1b45011d21111c2e341b45001d21001c2e1b7400207c20842094
49
+ 2081208e2099209a20e12020202020f80a1b45011d21111c2e351b45001d2100
50
+ 1c2e1b7428207c20e420f620fc20c420d620dc20df20a420a720b00a1c2e2d2d
51
+ 2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a1b
52
+ 45011d21111c2e361b45001d21001c2e1b7400207c206165206f652075652041
53
+ 65204f65205565207373204555520a1c2e20202020205061722e20477261640a
54
+ 1c2e20202020202845727361747a2c20706173737420696d6d6572290a1c2e3d
55
+ 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d0a
56
+ 1b45011c2e57656c636865205a65696c65206e65686d656e3f0a1b45001c2e44
57
+ 6965205a65696c652c20696e20646572204b45494e2066616c73636865730a1c
58
+ 2e5a65696368656e2073746568742e2045696e65204c7565636b65206973740a
59
+ 1c2e696e204f72646e756e672e2050617373656e206d6568726572652c206469
60
+ 650a1c2e6d69742064656e2077656e69677374656e204c7565636b656e2e0a1c
61
+ 2e5061737374206b65696e653a20362e0a1c2e3d3d3d3d3d3d3d3d3d3d3d3d3d
62
+ 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d0a1b74101d4c00000a0a0a0a0a
63
+ 1d5630
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.0",
2
+ "version": "1.1.1",
3
3
  "measuredOn": {
4
4
  "tid": "3600335",
5
5
  "hpsVersion": "1.10.0",
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "title": "Kasseneck Rechnungs-API",
4
4
  "version": 2,
5
- "package": "1.1.0",
5
+ "package": "1.1.1",
6
6
  "endpoints": {
7
7
  "createCustomer": {
8
8
  "request": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.0",
2
+ "version": "1.1.1",
3
3
  "languages": [
4
4
  "de",
5
5
  "en"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.0",
2
+ "version": "1.1.1",
3
3
  "messages": {
4
4
  "network.no_connection": {
5
5
  "text": "Keine Verbindung zum Server. Bitte die Internetverbindung prüfen und erneut versuchen."
@@ -553,10 +553,19 @@
553
553
  "text": "Nichts gespeichert."
554
554
  },
555
555
  "codetable.question": {
556
- "text": "Welche Zeile sieht auf dem Papier aus wie oben?"
556
+ "text": "In welcher Zeile steht kein falsches Zeichen?"
557
+ },
558
+ "codetable.question_hint": {
559
+ "text": "Lücken sind in Ordnung."
557
560
  },
558
561
  "codetable.instruction": {
559
- "text": "Die Nummer der ersten Zeile, die genau wie oben aussieht, in der Kasse antippen."
562
+ "text": "Die Zeile, in der KEIN falsches Zeichen steht. Eine Lücke ist in Ordnung. Passen mehrere, die mit den wenigsten Lücken."
563
+ },
564
+ "codetable.instruction_none": {
565
+ "text": "Passt keine: {number}.",
566
+ "placeholders": [
567
+ "number"
568
+ ]
560
569
  },
561
570
  "bluetooth.off": {
562
571
  "text": "Bluetooth ist ausgeschaltet. Bitte einschalten und erneut suchen.",
@@ -1030,7 +1039,7 @@
1030
1039
  "text": "ZEICHENSATZ-TEST"
1031
1040
  },
1032
1041
  "codetable.reference": {
1033
- "text": "So muss jede Zeile aussehen:"
1042
+ "text": "So sehen die Zeichen richtig aus"
1034
1043
  },
1035
1044
  "codetable.replacement_note": {
1036
1045
  "text": "(Ersatz, passt immer)"
@@ -1055,6 +1064,18 @@
1055
1064
  "placeholders": [
1056
1065
  "number"
1057
1066
  ]
1067
+ },
1068
+ "codetable.instruction_title": {
1069
+ "text": "Welche Zeile nehmen?"
1070
+ },
1071
+ "codetable.preview_title": {
1072
+ "text": "So steht es dann am Bon:"
1073
+ },
1074
+ "codetable.apply": {
1075
+ "text": "Übernehmen"
1076
+ },
1077
+ "codetable.other_row": {
1078
+ "text": "Andere Zeile"
1058
1079
  }
1059
1080
  }
1060
1081
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.0",
2
+ "version": "1.1.1",
3
3
  "baseUrls": {
4
4
  "public": "https://api.kasseneck.at/v3",
5
5
  "pos": "https://kasse.kasseneck.at/api/v3"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kreiseck/kasseneck-api",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Austrian fiscal cash register (RKSV) client for JavaScript and TypeScript: signed receipts, cancellations, card payments, receipt printing (ESC/POS), invoices. RKSV-Registrierkasse für JavaScript und TypeScript.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Kreiseck",