@kreiseck/kasseneck-api 0.9.2 → 0.9.4

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,40 @@ 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
+ ## 0.9.4
8
+
9
+ ### `qrModus` faengt bei `auto` an — sonst stellte die Vorgabe den Altbestand um
10
+
11
+ **Anlass:** 0.9.3 gab `qrModus` die harte Vorgabe `raster`. Die Browser-Kasse
12
+ druckt den Signatur-QR aber seit jeher ueber den nativen ESC/POS-Befehl; jedes
13
+ Geraet, das nie durch den Drucker-Wizard laeuft, haette damit ploetzlich ein
14
+ Rasterbild gedruckt — ueber BLE mehrere Sekunden je Bon, und niemand haette
15
+ etwas umgestellt.
16
+
17
+ - **`QR_MODUS` fuehrt jetzt `auto` als ersten Wert**, und
18
+ `KASSE_GERAET_STANDARD.qrModus` steht darauf. `auto` heisst *unbestimmt*: an
19
+ diesem Geraet hat noch niemand am Papier entschieden, jede Kasse bleibt bei
20
+ ihrer bisherigen Praxis (Browser-Kasse ESC/POS, App Rasterbild). Nur ein
21
+ ausdruecklich gesetzter Wert aendert etwas.
22
+ - Wer `KasseQrModus` erschoepfend auswertet, bekommt einen dritten Fall.
23
+
24
+ ## 0.9.3
25
+
26
+ ### `qrModus` am Geraet: mit welchem Befehl der Signatur-QR auf den Bon kommt
27
+
28
+ **Anlass:** Der Drucker-Wizard laesst zwei Probedrucke machen — einen QR als
29
+ Rasterbild, einen ueber den nativen ESC/POS-Befehl — und fragt, welcher lesbar
30
+ war. Diese Antwort musste bisher nirgends hin: die Kassen druckten fest im
31
+ Rastermodus. An Geraeten, die GS v 0 nicht koennen, kam damit ein Bon ohne
32
+ lesbaren QR heraus, und das ist nach § 132a BAO keine Belegerteilung — der
33
+ Ausfall faellt am Tresen niemandem auf.
34
+
35
+ - `QR_MODUS` (`raster` | `escpos`) als Laufzeitliste und Typ `KasseQrModus`.
36
+ - `KasseSettingsGeraet.qrModus`, Vorgabe `raster` — der bisherige Weg bleibt
37
+ damit fuer jedes bestehende Geraet unveraendert.
38
+ - **Am Geraet und nicht am Betrieb:** welchen Befehl ein Thermodrucker
39
+ versteht, entscheidet das Modell an dieser einen Kasse.
40
+
7
41
  ## 0.9.2
8
42
 
9
43
  ### Sechzehn Saetze: einen Beleg weitergeben, und der Drucker-Wizard
@@ -3,7 +3,7 @@
3
3
  * Rabattverteilung. Die Aufrufe heissen 1:1 wie die Backend-Functions
4
4
  * (die Rewrites-Waechter der Web-App leiten daraus ab).
5
5
  */
6
- export { type KasseStil, type KasseSchrift, type KasseWasserzeichen, type KasseMenge, type KasseTgModus, type KasseKassierenModus, type KasseKartenanbieter, KARTENANBIETER, type KasseBelegAusgabe, type KasseTastenAktion, type KasseTastenkarte, KASSE_TASTEN_AKTIONEN, KASSE_TASTEN_STANDARD, type KasseLayout, type KasseKatpos, type KasseHoehe, type KasseDruckerArt, type KasseTerminalVia, type KasseTerminalArt, type KassePapier, type KasseZeichensatz, type KasseSchnitt, type KasseLadeAuto, type KasseLogoGroesse, type KasseSchriftEinst, type KasseKachelstil, type KasseAutoAbMin, type KasseRabatt, type KasseWzSeite, type KasseWzStaerke, type KasseLogoSkala, type KasseWzSkala, type KasseFertigSekunden, type Schalterkarte, type KasseSettingsBetrieb, type KasseSettingsGeraet, type KasseSettings, KASSE_BETRIEB_STANDARD, KASSE_GERAET_STANDARD, mergeKasseSettings, STIL, SCHRIFT, WASSERZEICHEN, MENGE, TG_MODUS, KASSIEREN_MODUS, BELEG_AUSGABE, LAYOUT, KATPOS, HOEHE, DRUCKER_ART, TERMINAL_VIA, TERMINAL_ART, PAPIER, ZEICHENSATZ, SCHNITT, LADE_AUTO, TASTEN_AKTIONEN, LOGO_GROESSE, SCHRIFT_EINST, KACHELSTIL, AUTO_AB_MIN, RABATT, WZ_SEITE, WZ_STAERKE, LOGO_SKALA, WZ_SKALA, FERTIG_SEKUNDEN, } from './settings.js';
6
+ export { type KasseStil, type KasseSchrift, type KasseWasserzeichen, type KasseMenge, type KasseTgModus, type KasseKassierenModus, type KasseKartenanbieter, KARTENANBIETER, type KasseBelegAusgabe, type KasseTastenAktion, type KasseTastenkarte, KASSE_TASTEN_AKTIONEN, KASSE_TASTEN_STANDARD, type KasseLayout, type KasseKatpos, type KasseHoehe, type KasseDruckerArt, type KasseTerminalVia, type KasseTerminalArt, type KassePapier, type KasseZeichensatz, type KasseSchnitt, type KasseLadeAuto, type KasseQrModus, type KasseLogoGroesse, type KasseSchriftEinst, type KasseKachelstil, type KasseAutoAbMin, type KasseRabatt, type KasseWzSeite, type KasseWzStaerke, type KasseLogoSkala, type KasseWzSkala, type KasseFertigSekunden, type Schalterkarte, type KasseSettingsBetrieb, type KasseSettingsGeraet, type KasseSettings, KASSE_BETRIEB_STANDARD, KASSE_GERAET_STANDARD, mergeKasseSettings, STIL, SCHRIFT, WASSERZEICHEN, MENGE, TG_MODUS, KASSIEREN_MODUS, BELEG_AUSGABE, LAYOUT, KATPOS, HOEHE, DRUCKER_ART, TERMINAL_VIA, TERMINAL_ART, PAPIER, ZEICHENSATZ, SCHNITT, LADE_AUTO, QR_MODUS, TASTEN_AKTIONEN, LOGO_GROESSE, SCHRIFT_EINST, KACHELSTIL, AUTO_AB_MIN, RABATT, WZ_SEITE, WZ_STAERKE, LOGO_SKALA, WZ_SKALA, FERTIG_SEKUNDEN, } from './settings.js';
7
7
  export { type ArticleGroup, type ArticleGroupPayload, fromArticleGroupPayload, type KasseArtikel, type KasseArtikelPayload, fromKasseArtikelPayload, listMyArticleGroups, listMyArticles, type Mengenregel, type MengenVorgabe, mengenregelFuerEinheit, mengenVorgabe, mengeErlaubt, } from './artikel.js';
8
8
  export { getKasseSettings, setMyKasseSettings, setMyRegisterDeviceSettings } from './client.js';
9
9
  export { verteileRabatt } from '../receipt/discount.js';
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPrintJob = exports.createPrintJob = exports.listMyPrinters = exports.receiptsScopeOf = exports.cancelScopeOf = exports.verteileRabatt = exports.setMyRegisterDeviceSettings = exports.setMyKasseSettings = exports.getKasseSettings = exports.mengeErlaubt = exports.mengenVorgabe = exports.mengenregelFuerEinheit = exports.listMyArticles = exports.listMyArticleGroups = exports.fromKasseArtikelPayload = exports.fromArticleGroupPayload = exports.FERTIG_SEKUNDEN = exports.WZ_SKALA = exports.LOGO_SKALA = exports.WZ_STAERKE = exports.WZ_SEITE = exports.RABATT = exports.AUTO_AB_MIN = exports.KACHELSTIL = exports.SCHRIFT_EINST = exports.LOGO_GROESSE = exports.TASTEN_AKTIONEN = exports.LADE_AUTO = exports.SCHNITT = exports.ZEICHENSATZ = exports.PAPIER = exports.TERMINAL_ART = exports.TERMINAL_VIA = exports.DRUCKER_ART = exports.HOEHE = exports.KATPOS = exports.LAYOUT = exports.BELEG_AUSGABE = exports.KASSIEREN_MODUS = exports.TG_MODUS = exports.MENGE = exports.WASSERZEICHEN = exports.SCHRIFT = exports.STIL = exports.mergeKasseSettings = exports.KASSE_GERAET_STANDARD = exports.KASSE_BETRIEB_STANDARD = exports.KASSE_TASTEN_STANDARD = exports.KASSE_TASTEN_AKTIONEN = exports.KARTENANBIETER = void 0;
4
- exports.belegMailFehler = exports.BELEG_MAIL_FEHLER = exports.meldungGiltFuer = exports.meldung = exports.FEHLERREGELN = exports.MELDUNGEN = exports.listMyTipRecipients = void 0;
3
+ exports.createPrintJob = exports.listMyPrinters = exports.receiptsScopeOf = exports.cancelScopeOf = exports.verteileRabatt = exports.setMyRegisterDeviceSettings = exports.setMyKasseSettings = exports.getKasseSettings = exports.mengeErlaubt = exports.mengenVorgabe = exports.mengenregelFuerEinheit = exports.listMyArticles = exports.listMyArticleGroups = exports.fromKasseArtikelPayload = exports.fromArticleGroupPayload = exports.FERTIG_SEKUNDEN = exports.WZ_SKALA = exports.LOGO_SKALA = exports.WZ_STAERKE = exports.WZ_SEITE = exports.RABATT = exports.AUTO_AB_MIN = exports.KACHELSTIL = exports.SCHRIFT_EINST = exports.LOGO_GROESSE = exports.TASTEN_AKTIONEN = exports.QR_MODUS = exports.LADE_AUTO = exports.SCHNITT = exports.ZEICHENSATZ = exports.PAPIER = exports.TERMINAL_ART = exports.TERMINAL_VIA = exports.DRUCKER_ART = exports.HOEHE = exports.KATPOS = exports.LAYOUT = exports.BELEG_AUSGABE = exports.KASSIEREN_MODUS = exports.TG_MODUS = exports.MENGE = exports.WASSERZEICHEN = exports.SCHRIFT = exports.STIL = exports.mergeKasseSettings = exports.KASSE_GERAET_STANDARD = exports.KASSE_BETRIEB_STANDARD = exports.KASSE_TASTEN_STANDARD = exports.KASSE_TASTEN_AKTIONEN = exports.KARTENANBIETER = void 0;
4
+ exports.belegMailFehler = exports.BELEG_MAIL_FEHLER = exports.meldungGiltFuer = exports.meldung = exports.FEHLERREGELN = exports.MELDUNGEN = exports.listMyTipRecipients = exports.getPrintJob = void 0;
5
5
  /**
6
6
  * Kachel-Kasse: Einstellungen, Artikelgruppen/Artikel fuer Kacheln,
7
7
  * Rabattverteilung. Die Aufrufe heissen 1:1 wie die Backend-Functions
@@ -32,6 +32,7 @@ Object.defineProperty(exports, "PAPIER", { enumerable: true, get: function () {
32
32
  Object.defineProperty(exports, "ZEICHENSATZ", { enumerable: true, get: function () { return settings_js_1.ZEICHENSATZ; } });
33
33
  Object.defineProperty(exports, "SCHNITT", { enumerable: true, get: function () { return settings_js_1.SCHNITT; } });
34
34
  Object.defineProperty(exports, "LADE_AUTO", { enumerable: true, get: function () { return settings_js_1.LADE_AUTO; } });
35
+ Object.defineProperty(exports, "QR_MODUS", { enumerable: true, get: function () { return settings_js_1.QR_MODUS; } });
35
36
  Object.defineProperty(exports, "TASTEN_AKTIONEN", { enumerable: true, get: function () { return settings_js_1.TASTEN_AKTIONEN; } });
36
37
  Object.defineProperty(exports, "LOGO_GROESSE", { enumerable: true, get: function () { return settings_js_1.LOGO_GROESSE; } });
37
38
  Object.defineProperty(exports, "SCHRIFT_EINST", { enumerable: true, get: function () { return settings_js_1.SCHRIFT_EINST; } });
@@ -50,6 +50,29 @@ export declare const SCHNITT: readonly ["partial", "full", "none"];
50
50
  export type KasseSchnitt = typeof SCHNITT[number];
51
51
  export declare const LADE_AUTO: readonly ["bar", "immer", "nie"];
52
52
  export type KasseLadeAuto = typeof LADE_AUTO[number];
53
+ /**
54
+ * Mit welchem Befehl der Signatur-QR auf den Bon kommt.
55
+ *
56
+ * `raster` = der QR wird als Bild gerastert (GS v 0) und geht darum durch jeden
57
+ * Drucker, der Bilder kann. `escpos` = der native QR-Befehl (GS ( k) — schaerfer
58
+ * und schneller, aber aeltere Geraete drucken dann gar keinen QR oder
59
+ * Zeichensalat.
60
+ *
61
+ * `auto` ist die Vorgabe und heisst **unbestimmt**: an diesem Geraet hat noch
62
+ * niemand am Papier entschieden. Jede Kasse bleibt dann bei ihrer bisherigen
63
+ * Praxis — die Browser-Kasse beim ESC/POS-Befehl, die App beim Rasterbild.
64
+ * Eine harte Vorgabe waere hier eine stille Umstellung des Altbestands
65
+ * gewesen: jedes Geraet, das nie durch den Drucker-Wizard lief, druckte
66
+ * ploetzlich anders, und ueber BLE kostet ein Rasterbild mehrere Sekunden je
67
+ * Bon. Nur ein ausdruecklich gesetzter Wert aendert etwas.
68
+ *
69
+ * **Eine Geraete-Einstellung, keine des Betriebs:** derselbe Bon kommt an einer
70
+ * Kasse sauber heraus und an der Nebenkasse nicht. Und sie ist nicht
71
+ * kosmetisch — nach § 132a BAO ist der QR Teil des Belegs; wer den falschen
72
+ * Modus stehen laesst, erteilt Belege ohne lesbare Signatur.
73
+ */
74
+ export declare const QR_MODUS: readonly ["auto", "raster", "escpos"];
75
+ export type KasseQrModus = typeof QR_MODUS[number];
53
76
  /** Groesse des Kuerzel-Logos in der Kopfzeile der Kasse. */
54
77
  export declare const LOGO_GROESSE: readonly ["S", "M", "L"];
55
78
  export type KasseLogoGroesse = typeof LOGO_GROESSE[number];
@@ -176,6 +199,8 @@ export interface KasseSettingsGeraet {
176
199
  papier: KassePapier;
177
200
  zeichensatz: KasseZeichensatz;
178
201
  schnitt: KasseSchnitt;
202
+ /** Befehl fuer den Signatur-QR auf dem Bon; 'auto' = unbestimmt, der Drucker-Wizard probiert beide aus. */
203
+ qrModus: KasseQrModus;
179
204
  ladeAn: boolean;
180
205
  ladeAuto: KasseLadeAuto;
181
206
  terminalIp: string;
@@ -9,7 +9,7 @@
9
9
  * bewusst AUS, bis die Buchung geklaert ist (Spec kachel-kasse § 9).
10
10
  */
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.KASSE_GERAET_STANDARD = exports.KASSE_BETRIEB_STANDARD = exports.KASSE_TASTEN_STANDARD = exports.TASTEN_AKTIONEN = exports.KASSE_TASTEN_AKTIONEN = exports.FERTIG_SEKUNDEN = exports.WZ_SKALA = exports.LOGO_SKALA = exports.WZ_STAERKE = exports.WZ_SEITE = exports.RABATT = exports.AUTO_AB_MIN = exports.KACHELSTIL = exports.SCHRIFT_EINST = exports.LOGO_GROESSE = exports.LADE_AUTO = exports.SCHNITT = exports.ZEICHENSATZ = exports.PAPIER = exports.TERMINAL_ART = exports.TERMINAL_VIA = exports.DRUCKER_ART = exports.HOEHE = exports.KATPOS = exports.LAYOUT = exports.BELEG_AUSGABE = exports.KARTENANBIETER = exports.KASSIEREN_MODUS = exports.TG_MODUS = exports.MENGE = exports.WASSERZEICHEN = exports.SCHRIFT = exports.STIL = void 0;
12
+ exports.KASSE_GERAET_STANDARD = exports.KASSE_BETRIEB_STANDARD = exports.KASSE_TASTEN_STANDARD = exports.TASTEN_AKTIONEN = exports.KASSE_TASTEN_AKTIONEN = exports.FERTIG_SEKUNDEN = exports.WZ_SKALA = exports.LOGO_SKALA = exports.WZ_STAERKE = exports.WZ_SEITE = exports.RABATT = exports.AUTO_AB_MIN = exports.KACHELSTIL = exports.SCHRIFT_EINST = exports.LOGO_GROESSE = exports.QR_MODUS = exports.LADE_AUTO = exports.SCHNITT = exports.ZEICHENSATZ = exports.PAPIER = exports.TERMINAL_ART = exports.TERMINAL_VIA = exports.DRUCKER_ART = exports.HOEHE = exports.KATPOS = exports.LAYOUT = exports.BELEG_AUSGABE = exports.KARTENANBIETER = exports.KASSIEREN_MODUS = exports.TG_MODUS = exports.MENGE = exports.WASSERZEICHEN = exports.SCHRIFT = exports.STIL = void 0;
13
13
  exports.mergeKasseSettings = mergeKasseSettings;
14
14
  /*
15
15
  * Jedes Enum steht als Liste zur Laufzeit da, der Typ leitet sich daraus ab
@@ -42,6 +42,28 @@ exports.PAPIER = ['mm58', 'mm80'];
42
42
  exports.ZEICHENSATZ = ['CP1252', 'CP437'];
43
43
  exports.SCHNITT = ['partial', 'full', 'none'];
44
44
  exports.LADE_AUTO = ['bar', 'immer', 'nie'];
45
+ /**
46
+ * Mit welchem Befehl der Signatur-QR auf den Bon kommt.
47
+ *
48
+ * `raster` = der QR wird als Bild gerastert (GS v 0) und geht darum durch jeden
49
+ * Drucker, der Bilder kann. `escpos` = der native QR-Befehl (GS ( k) — schaerfer
50
+ * und schneller, aber aeltere Geraete drucken dann gar keinen QR oder
51
+ * Zeichensalat.
52
+ *
53
+ * `auto` ist die Vorgabe und heisst **unbestimmt**: an diesem Geraet hat noch
54
+ * niemand am Papier entschieden. Jede Kasse bleibt dann bei ihrer bisherigen
55
+ * Praxis — die Browser-Kasse beim ESC/POS-Befehl, die App beim Rasterbild.
56
+ * Eine harte Vorgabe waere hier eine stille Umstellung des Altbestands
57
+ * gewesen: jedes Geraet, das nie durch den Drucker-Wizard lief, druckte
58
+ * ploetzlich anders, und ueber BLE kostet ein Rasterbild mehrere Sekunden je
59
+ * Bon. Nur ein ausdruecklich gesetzter Wert aendert etwas.
60
+ *
61
+ * **Eine Geraete-Einstellung, keine des Betriebs:** derselbe Bon kommt an einer
62
+ * Kasse sauber heraus und an der Nebenkasse nicht. Und sie ist nicht
63
+ * kosmetisch — nach § 132a BAO ist der QR Teil des Belegs; wer den falschen
64
+ * Modus stehen laesst, erteilt Belege ohne lesbare Signatur.
65
+ */
66
+ exports.QR_MODUS = ['auto', 'raster', 'escpos'];
45
67
  /*
46
68
  * Auch die uebrigen Wertemengen der Einstellungen stehen jetzt als Liste da —
47
69
  * vorher waren sie nur als Union am Feld ausgeschrieben. Ein Zwilling konnte
@@ -115,7 +137,7 @@ exports.KASSE_GERAET_STANDARD = Object.freeze({
115
137
  tasten: { ...exports.KASSE_TASTEN_STANDARD },
116
138
  druckerAn: false, druckerArt: 'sdp', druckerIp: '', druckerPort: 9100, druckerBt: '', druckerName: '', druckerId: '', druckerDevid: 'local_printer',
117
139
  connectDruckerId: '',
118
- papier: 'mm80', zeichensatz: 'CP1252', schnitt: 'partial',
140
+ papier: 'mm80', zeichensatz: 'CP1252', schnitt: 'partial', qrModus: 'auto',
119
141
  ladeAn: false, ladeAuto: 'bar',
120
142
  terminalIp: '', terminalPort: 8080, terminalVia: 'direkt',
121
143
  terminalArt: 'keins', terminalTid: '', tastenMarken: true,
@@ -3,7 +3,7 @@
3
3
  * Rabattverteilung. Die Aufrufe heissen 1:1 wie die Backend-Functions
4
4
  * (die Rewrites-Waechter der Web-App leiten daraus ab).
5
5
  */
6
- export { type KasseStil, type KasseSchrift, type KasseWasserzeichen, type KasseMenge, type KasseTgModus, type KasseKassierenModus, type KasseKartenanbieter, KARTENANBIETER, type KasseBelegAusgabe, type KasseTastenAktion, type KasseTastenkarte, KASSE_TASTEN_AKTIONEN, KASSE_TASTEN_STANDARD, type KasseLayout, type KasseKatpos, type KasseHoehe, type KasseDruckerArt, type KasseTerminalVia, type KasseTerminalArt, type KassePapier, type KasseZeichensatz, type KasseSchnitt, type KasseLadeAuto, type KasseLogoGroesse, type KasseSchriftEinst, type KasseKachelstil, type KasseAutoAbMin, type KasseRabatt, type KasseWzSeite, type KasseWzStaerke, type KasseLogoSkala, type KasseWzSkala, type KasseFertigSekunden, type Schalterkarte, type KasseSettingsBetrieb, type KasseSettingsGeraet, type KasseSettings, KASSE_BETRIEB_STANDARD, KASSE_GERAET_STANDARD, mergeKasseSettings, STIL, SCHRIFT, WASSERZEICHEN, MENGE, TG_MODUS, KASSIEREN_MODUS, BELEG_AUSGABE, LAYOUT, KATPOS, HOEHE, DRUCKER_ART, TERMINAL_VIA, TERMINAL_ART, PAPIER, ZEICHENSATZ, SCHNITT, LADE_AUTO, TASTEN_AKTIONEN, LOGO_GROESSE, SCHRIFT_EINST, KACHELSTIL, AUTO_AB_MIN, RABATT, WZ_SEITE, WZ_STAERKE, LOGO_SKALA, WZ_SKALA, FERTIG_SEKUNDEN, } from './settings.js';
6
+ export { type KasseStil, type KasseSchrift, type KasseWasserzeichen, type KasseMenge, type KasseTgModus, type KasseKassierenModus, type KasseKartenanbieter, KARTENANBIETER, type KasseBelegAusgabe, type KasseTastenAktion, type KasseTastenkarte, KASSE_TASTEN_AKTIONEN, KASSE_TASTEN_STANDARD, type KasseLayout, type KasseKatpos, type KasseHoehe, type KasseDruckerArt, type KasseTerminalVia, type KasseTerminalArt, type KassePapier, type KasseZeichensatz, type KasseSchnitt, type KasseLadeAuto, type KasseQrModus, type KasseLogoGroesse, type KasseSchriftEinst, type KasseKachelstil, type KasseAutoAbMin, type KasseRabatt, type KasseWzSeite, type KasseWzStaerke, type KasseLogoSkala, type KasseWzSkala, type KasseFertigSekunden, type Schalterkarte, type KasseSettingsBetrieb, type KasseSettingsGeraet, type KasseSettings, KASSE_BETRIEB_STANDARD, KASSE_GERAET_STANDARD, mergeKasseSettings, STIL, SCHRIFT, WASSERZEICHEN, MENGE, TG_MODUS, KASSIEREN_MODUS, BELEG_AUSGABE, LAYOUT, KATPOS, HOEHE, DRUCKER_ART, TERMINAL_VIA, TERMINAL_ART, PAPIER, ZEICHENSATZ, SCHNITT, LADE_AUTO, QR_MODUS, TASTEN_AKTIONEN, LOGO_GROESSE, SCHRIFT_EINST, KACHELSTIL, AUTO_AB_MIN, RABATT, WZ_SEITE, WZ_STAERKE, LOGO_SKALA, WZ_SKALA, FERTIG_SEKUNDEN, } from './settings.js';
7
7
  export { type ArticleGroup, type ArticleGroupPayload, fromArticleGroupPayload, type KasseArtikel, type KasseArtikelPayload, fromKasseArtikelPayload, listMyArticleGroups, listMyArticles, type Mengenregel, type MengenVorgabe, mengenregelFuerEinheit, mengenVorgabe, mengeErlaubt, } from './artikel.js';
8
8
  export { getKasseSettings, setMyKasseSettings, setMyRegisterDeviceSettings } from './client.js';
9
9
  export { verteileRabatt } from '../receipt/discount.js';
@@ -5,7 +5,7 @@
5
5
  */
6
6
  export { KARTENANBIETER, KASSE_TASTEN_AKTIONEN, KASSE_TASTEN_STANDARD, KASSE_BETRIEB_STANDARD, KASSE_GERAET_STANDARD, mergeKasseSettings,
7
7
  // Die Enums als Laufzeitlisten — dieselben Werte, die die Typen oben tragen.
8
- STIL, SCHRIFT, WASSERZEICHEN, MENGE, TG_MODUS, KASSIEREN_MODUS, BELEG_AUSGABE, LAYOUT, KATPOS, HOEHE, DRUCKER_ART, TERMINAL_VIA, TERMINAL_ART, PAPIER, ZEICHENSATZ, SCHNITT, LADE_AUTO, TASTEN_AKTIONEN, LOGO_GROESSE, SCHRIFT_EINST, KACHELSTIL, AUTO_AB_MIN, RABATT, WZ_SEITE, WZ_STAERKE, LOGO_SKALA, WZ_SKALA, FERTIG_SEKUNDEN, } from './settings.js';
8
+ STIL, SCHRIFT, WASSERZEICHEN, MENGE, TG_MODUS, KASSIEREN_MODUS, BELEG_AUSGABE, LAYOUT, KATPOS, HOEHE, DRUCKER_ART, TERMINAL_VIA, TERMINAL_ART, PAPIER, ZEICHENSATZ, SCHNITT, LADE_AUTO, QR_MODUS, TASTEN_AKTIONEN, LOGO_GROESSE, SCHRIFT_EINST, KACHELSTIL, AUTO_AB_MIN, RABATT, WZ_SEITE, WZ_STAERKE, LOGO_SKALA, WZ_SKALA, FERTIG_SEKUNDEN, } from './settings.js';
9
9
  export { fromArticleGroupPayload, fromKasseArtikelPayload, listMyArticleGroups, listMyArticles, mengenregelFuerEinheit, mengenVorgabe, mengeErlaubt, } from './artikel.js';
10
10
  export { getKasseSettings, setMyKasseSettings, setMyRegisterDeviceSettings } from './client.js';
11
11
  export { verteileRabatt } from '../receipt/discount.js';
@@ -50,6 +50,29 @@ export declare const SCHNITT: readonly ["partial", "full", "none"];
50
50
  export type KasseSchnitt = typeof SCHNITT[number];
51
51
  export declare const LADE_AUTO: readonly ["bar", "immer", "nie"];
52
52
  export type KasseLadeAuto = typeof LADE_AUTO[number];
53
+ /**
54
+ * Mit welchem Befehl der Signatur-QR auf den Bon kommt.
55
+ *
56
+ * `raster` = der QR wird als Bild gerastert (GS v 0) und geht darum durch jeden
57
+ * Drucker, der Bilder kann. `escpos` = der native QR-Befehl (GS ( k) — schaerfer
58
+ * und schneller, aber aeltere Geraete drucken dann gar keinen QR oder
59
+ * Zeichensalat.
60
+ *
61
+ * `auto` ist die Vorgabe und heisst **unbestimmt**: an diesem Geraet hat noch
62
+ * niemand am Papier entschieden. Jede Kasse bleibt dann bei ihrer bisherigen
63
+ * Praxis — die Browser-Kasse beim ESC/POS-Befehl, die App beim Rasterbild.
64
+ * Eine harte Vorgabe waere hier eine stille Umstellung des Altbestands
65
+ * gewesen: jedes Geraet, das nie durch den Drucker-Wizard lief, druckte
66
+ * ploetzlich anders, und ueber BLE kostet ein Rasterbild mehrere Sekunden je
67
+ * Bon. Nur ein ausdruecklich gesetzter Wert aendert etwas.
68
+ *
69
+ * **Eine Geraete-Einstellung, keine des Betriebs:** derselbe Bon kommt an einer
70
+ * Kasse sauber heraus und an der Nebenkasse nicht. Und sie ist nicht
71
+ * kosmetisch — nach § 132a BAO ist der QR Teil des Belegs; wer den falschen
72
+ * Modus stehen laesst, erteilt Belege ohne lesbare Signatur.
73
+ */
74
+ export declare const QR_MODUS: readonly ["auto", "raster", "escpos"];
75
+ export type KasseQrModus = typeof QR_MODUS[number];
53
76
  /** Groesse des Kuerzel-Logos in der Kopfzeile der Kasse. */
54
77
  export declare const LOGO_GROESSE: readonly ["S", "M", "L"];
55
78
  export type KasseLogoGroesse = typeof LOGO_GROESSE[number];
@@ -176,6 +199,8 @@ export interface KasseSettingsGeraet {
176
199
  papier: KassePapier;
177
200
  zeichensatz: KasseZeichensatz;
178
201
  schnitt: KasseSchnitt;
202
+ /** Befehl fuer den Signatur-QR auf dem Bon; 'auto' = unbestimmt, der Drucker-Wizard probiert beide aus. */
203
+ qrModus: KasseQrModus;
179
204
  ladeAn: boolean;
180
205
  ladeAuto: KasseLadeAuto;
181
206
  terminalIp: string;
@@ -38,6 +38,28 @@ export const PAPIER = ['mm58', 'mm80'];
38
38
  export const ZEICHENSATZ = ['CP1252', 'CP437'];
39
39
  export const SCHNITT = ['partial', 'full', 'none'];
40
40
  export const LADE_AUTO = ['bar', 'immer', 'nie'];
41
+ /**
42
+ * Mit welchem Befehl der Signatur-QR auf den Bon kommt.
43
+ *
44
+ * `raster` = der QR wird als Bild gerastert (GS v 0) und geht darum durch jeden
45
+ * Drucker, der Bilder kann. `escpos` = der native QR-Befehl (GS ( k) — schaerfer
46
+ * und schneller, aber aeltere Geraete drucken dann gar keinen QR oder
47
+ * Zeichensalat.
48
+ *
49
+ * `auto` ist die Vorgabe und heisst **unbestimmt**: an diesem Geraet hat noch
50
+ * niemand am Papier entschieden. Jede Kasse bleibt dann bei ihrer bisherigen
51
+ * Praxis — die Browser-Kasse beim ESC/POS-Befehl, die App beim Rasterbild.
52
+ * Eine harte Vorgabe waere hier eine stille Umstellung des Altbestands
53
+ * gewesen: jedes Geraet, das nie durch den Drucker-Wizard lief, druckte
54
+ * ploetzlich anders, und ueber BLE kostet ein Rasterbild mehrere Sekunden je
55
+ * Bon. Nur ein ausdruecklich gesetzter Wert aendert etwas.
56
+ *
57
+ * **Eine Geraete-Einstellung, keine des Betriebs:** derselbe Bon kommt an einer
58
+ * Kasse sauber heraus und an der Nebenkasse nicht. Und sie ist nicht
59
+ * kosmetisch — nach § 132a BAO ist der QR Teil des Belegs; wer den falschen
60
+ * Modus stehen laesst, erteilt Belege ohne lesbare Signatur.
61
+ */
62
+ export const QR_MODUS = ['auto', 'raster', 'escpos'];
41
63
  /*
42
64
  * Auch die uebrigen Wertemengen der Einstellungen stehen jetzt als Liste da —
43
65
  * vorher waren sie nur als Union am Feld ausgeschrieben. Ein Zwilling konnte
@@ -111,7 +133,7 @@ export const KASSE_GERAET_STANDARD = Object.freeze({
111
133
  tasten: { ...KASSE_TASTEN_STANDARD },
112
134
  druckerAn: false, druckerArt: 'sdp', druckerIp: '', druckerPort: 9100, druckerBt: '', druckerName: '', druckerId: '', druckerDevid: 'local_printer',
113
135
  connectDruckerId: '',
114
- papier: 'mm80', zeichensatz: 'CP1252', schnitt: 'partial',
136
+ papier: 'mm80', zeichensatz: 'CP1252', schnitt: 'partial', qrModus: 'auto',
115
137
  ladeAn: false, ladeAuto: 'bar',
116
138
  terminalIp: '', terminalPort: 8080, terminalVia: 'direkt',
117
139
  terminalArt: 'keins', terminalTid: '', tastenMarken: true,
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.9.2",
2
+ "version": "0.9.4",
3
3
  "gemessenAn": {
4
4
  "tid": "3600335",
5
5
  "hpsVersion": "1.10.0",
@@ -134,6 +134,7 @@
134
134
  "papier": "mm80",
135
135
  "zeichensatz": "CP1252",
136
136
  "schnitt": "partial",
137
+ "qrModus": "auto",
137
138
  "ladeAn": false,
138
139
  "ladeAuto": "bar",
139
140
  "terminalIp": "",
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.9.2",
2
+ "version": "0.9.4",
3
3
  "meldungen": {
4
4
  "netz.keine_verbindung": {
5
5
  "text": "Keine Verbindung zum Server. Bitte die Internetverbindung prüfen und erneut versuchen."
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.9.2",
2
+ "version": "0.9.4",
3
3
  "aufrufe": [
4
4
  "activateCashregister",
5
5
  "cancelReceipt",
@@ -138,6 +138,11 @@
138
138
  "mm58",
139
139
  "mm80"
140
140
  ],
141
+ "qrModus": [
142
+ "auto",
143
+ "raster",
144
+ "escpos"
145
+ ],
141
146
  "rabatt": [
142
147
  "aus",
143
148
  "an"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kreiseck/kasseneck-api",
3
- "version": "0.9.2",
3
+ "version": "0.9.4",
4
4
  "description": "JavaScript-Zwilling von kasseneck_api (Flutter) fuer das Kasseneck-Backend",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Kreiseck",