@kreiseck/kasseneck-api 0.6.9 → 0.6.45

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.
Files changed (103) hide show
  1. package/README.md +21 -0
  2. package/dist/cjs/client/aufrufe.d.ts +21 -0
  3. package/dist/cjs/client/aufrufe.js +34 -0
  4. package/dist/cjs/client/cashregisters.d.ts +2 -2
  5. package/dist/cjs/client/index.d.ts +2 -1
  6. package/dist/cjs/client/index.js +3 -1
  7. package/dist/cjs/client/receipts.d.ts +31 -12
  8. package/dist/cjs/client/receipts.js +51 -0
  9. package/dist/cjs/client/reports.d.ts +3 -3
  10. package/dist/cjs/client/status.d.ts +3 -3
  11. package/dist/cjs/index.d.ts +2 -2
  12. package/dist/cjs/index.js +4 -2
  13. package/dist/cjs/kasse/artikel.d.ts +3 -3
  14. package/dist/cjs/kasse/client.d.ts +4 -4
  15. package/dist/cjs/kasse/drucker.d.ts +4 -4
  16. package/dist/cjs/kasse/index.d.ts +1 -1
  17. package/dist/cjs/kasse/index.js +30 -1
  18. package/dist/cjs/kasse/settings.d.ts +113 -26
  19. package/dist/cjs/kasse/settings.js +91 -9
  20. package/dist/cjs/models/index.d.ts +1 -1
  21. package/dist/cjs/models/index.js +3 -1
  22. package/dist/cjs/models/receipt-item.d.ts +41 -0
  23. package/dist/cjs/models/receipt-item.js +41 -1
  24. package/dist/cjs/models/receipt.d.ts +7 -0
  25. package/dist/cjs/models/receipt.js +2 -0
  26. package/dist/cjs/payments/hobex.d.ts +3 -3
  27. package/dist/cjs/payments/stripe.d.ts +3 -3
  28. package/dist/cjs/printing/escpos.js +7 -0
  29. package/dist/cjs/react/index.js +11 -1
  30. package/dist/cjs/receipt/discount.js +1 -1
  31. package/dist/cjs/receipt/layout-escpos.js +9 -4
  32. package/dist/cjs/receipt/layout.d.ts +6 -3
  33. package/dist/cjs/receipt/layout.js +166 -14
  34. package/dist/cjs/register/index.d.ts +1 -1
  35. package/dist/cjs/register/index.js +2 -1
  36. package/dist/cjs/register/pairing.d.ts +17 -0
  37. package/dist/cjs/register/pairing.js +28 -3
  38. package/dist/cjs/register/session.d.ts +3 -3
  39. package/dist/esm/client/aufrufe.d.ts +21 -0
  40. package/dist/esm/client/aufrufe.js +31 -0
  41. package/dist/esm/client/cashregisters.d.ts +2 -2
  42. package/dist/esm/client/index.d.ts +2 -1
  43. package/dist/esm/client/index.js +1 -0
  44. package/dist/esm/client/receipts.d.ts +31 -12
  45. package/dist/esm/client/receipts.js +51 -0
  46. package/dist/esm/client/reports.d.ts +3 -3
  47. package/dist/esm/client/status.d.ts +3 -3
  48. package/dist/esm/index.d.ts +2 -2
  49. package/dist/esm/index.js +2 -2
  50. package/dist/esm/kasse/artikel.d.ts +3 -3
  51. package/dist/esm/kasse/client.d.ts +4 -4
  52. package/dist/esm/kasse/drucker.d.ts +4 -4
  53. package/dist/esm/kasse/index.d.ts +1 -1
  54. package/dist/esm/kasse/index.js +3 -1
  55. package/dist/esm/kasse/settings.d.ts +113 -26
  56. package/dist/esm/kasse/settings.js +90 -8
  57. package/dist/esm/models/index.d.ts +1 -1
  58. package/dist/esm/models/index.js +1 -1
  59. package/dist/esm/models/receipt-item.d.ts +41 -0
  60. package/dist/esm/models/receipt-item.js +39 -1
  61. package/dist/esm/models/receipt.d.ts +7 -0
  62. package/dist/esm/models/receipt.js +2 -0
  63. package/dist/esm/payments/hobex.d.ts +3 -3
  64. package/dist/esm/payments/stripe.d.ts +3 -3
  65. package/dist/esm/printing/escpos.js +7 -0
  66. package/dist/esm/react/index.js +11 -1
  67. package/dist/esm/receipt/discount.js +1 -1
  68. package/dist/esm/receipt/layout-escpos.js +9 -4
  69. package/dist/esm/receipt/layout.d.ts +6 -3
  70. package/dist/esm/receipt/layout.js +167 -15
  71. package/dist/esm/register/index.d.ts +1 -1
  72. package/dist/esm/register/index.js +1 -1
  73. package/dist/esm/register/pairing.d.ts +17 -0
  74. package/dist/esm/register/pairing.js +27 -3
  75. package/dist/esm/register/session.d.ts +3 -3
  76. package/fixtures/belege/rabatt-chef-trinkgeld.json +89 -0
  77. package/fixtures/belege/rabatt-einfach.json +50 -0
  78. package/fixtures/belege/rabatt-trinkgeld.json +75 -0
  79. package/fixtures/belege/rabatt-wertgutschein.json +70 -0
  80. package/fixtures/belege/rabattzeilen.json +5 -3
  81. package/fixtures/belege/storno-rabatt.json +68 -0
  82. package/fixtures/erwartet/rabatt-chef-trinkgeld.grid32.txt +31 -0
  83. package/fixtures/erwartet/rabatt-chef-trinkgeld.grid48.txt +30 -0
  84. package/fixtures/erwartet/rabatt-chef-trinkgeld.lines.json +317 -0
  85. package/fixtures/erwartet/rabatt-einfach.grid32.txt +26 -0
  86. package/fixtures/erwartet/rabatt-einfach.grid48.txt +25 -0
  87. package/fixtures/erwartet/rabatt-einfach.lines.json +250 -0
  88. package/fixtures/erwartet/rabatt-trinkgeld.grid32.txt +31 -0
  89. package/fixtures/erwartet/rabatt-trinkgeld.grid48.txt +30 -0
  90. package/fixtures/erwartet/rabatt-trinkgeld.lines.json +336 -0
  91. package/fixtures/erwartet/rabatt-wertgutschein.grid32.txt +32 -0
  92. package/fixtures/erwartet/rabatt-wertgutschein.grid48.txt +31 -0
  93. package/fixtures/erwartet/rabatt-wertgutschein.lines.json +330 -0
  94. package/fixtures/erwartet/rabattzeilen.grid32.txt +4 -2
  95. package/fixtures/erwartet/rabattzeilen.grid48.txt +4 -2
  96. package/fixtures/erwartet/rabattzeilen.lines.json +18 -8
  97. package/fixtures/erwartet/storno-rabatt.grid32.txt +34 -0
  98. package/fixtures/erwartet/storno-rabatt.grid48.txt +32 -0
  99. package/fixtures/erwartet/storno-rabatt.lines.json +317 -0
  100. package/fixtures/kasse-settings-standard.json +44 -5
  101. package/fixtures/manifest.json +34 -4
  102. package/fixtures/oberflaeche.json +216 -0
  103. package/package.json +3 -2
@@ -38,6 +38,11 @@ import { KASSE_BETRIEB_STANDARD, KASSE_GERAET_STANDARD, mergeKasseSettings, } fr
38
38
  * es auch halten.
39
39
  */
40
40
  const ohneAnmeldung = () => ({ headers: {}, params: {} });
41
+ /** Alle Rechte-Schluessel, die dieses Paket kennt — die Zwillinge pruefen dagegen. */
42
+ export const REGISTER_PERMS = [
43
+ 'sell', 'cancel', 'articles', 'layout', 'reports', 'takeover',
44
+ 'cancelScope', 'receiptsScope', 'drawer', 'discount', 'tipAssign',
45
+ ];
41
46
  /** Reichweite lesen, mit der Migration des Backends (register-auth.js). */
42
47
  export function cancelScopeOf(perms) {
43
48
  if (!perms)
@@ -62,10 +67,10 @@ export function receiptsScopeOf(perms) {
62
67
  * [PairedRegisterDevice]).
63
68
  */
64
69
  export async function pairRegisterDevice(options) {
65
- const { code, label, client, geo, ...verbindung } = options;
70
+ const { code, label, client, geo, takeover, ...verbindung } = options;
66
71
  pflicht('pairRegisterDevice', 'code', code);
67
72
  // Der Code ist das Geheimnis dieses Aufrufs — siehe Modulkommentar.
68
- const daten = await transportFuer(verbindung)('pairRegisterDevice', { code, label, client, geo: geo ?? undefined }, undefined, [code]);
73
+ const daten = await transportFuer(verbindung)('pairRegisterDevice', { code, label, client, geo: geo ?? undefined, takeover: takeover === true ? true : undefined }, undefined, [code]);
69
74
  return {
70
75
  deviceId: pflichtfeld('pairRegisterDevice', daten, 'deviceId'),
71
76
  deviceSecret: pflichtfeld('pairRegisterDevice', daten, 'deviceSecret'),
@@ -126,7 +131,26 @@ export async function listRegisterUsersForDevice(options) {
126
131
  };
127
132
  const bd = daten?.betriebsdaten;
128
133
  const betriebsdaten = bd && typeof bd === 'object' ? fromReceiptCompanyPayload(bd) : null;
129
- return { users, policy: regel(daten?.policy), loginMode: daten?.loginMode === 'pin' ? 'pin' : 'auswahl', settings, betriebsdaten, standortsperre: daten?.standortsperre === true };
134
+ return {
135
+ users,
136
+ policy: regel(daten?.policy),
137
+ loginMode: daten?.loginMode === 'pin' ? 'pin' : 'auswahl',
138
+ settings,
139
+ betriebsdaten,
140
+ standortsperre: daten?.standortsperre === true,
141
+ // 0.6.27 ergaenzte nur den TYP — hier fiel das Feld beim Zusammenbau
142
+ // stumm weg, und die Kasse sah nie eine Sperre. Fehlt es (aelteres
143
+ // Backend), bleibt es undefined: dann gilt bereit.
144
+ kasse: kasseBereit(daten?.kasse),
145
+ };
146
+ }
147
+ function kasseBereit(wert) {
148
+ if (typeof wert !== 'object' || wert === null || Array.isArray(wert))
149
+ return undefined;
150
+ const roh = wert;
151
+ if (typeof roh['bereit'] !== 'boolean')
152
+ return undefined;
153
+ return { bereit: roh['bereit'], grund: typeof roh['grund'] === 'string' ? roh['grund'] : null };
130
154
  }
131
155
  /** Die Regel aus der Antwort — oder `null`, wenn keine brauchbare kommt. */
132
156
  function regel(wert) {
@@ -1,4 +1,4 @@
1
- import type { KasseneckTransport } from '../client/transport.js';
1
+ import type { InternerTransport } from '../client/aufrufe.js';
2
2
  /**
3
3
  * Die beiden Aufrufe der **laufenden** Kassen-Sitzung. Anders als die drei in
4
4
  * pairing.ts haben sie eine Identitaet: sie laufen ueber `registerUserAuth`
@@ -23,7 +23,7 @@ import type { KasseneckTransport } from '../client/transport.js';
23
23
  * beendet — bitte neu anmelden.") — dann hilft nur eine neue Anmeldung ueber
24
24
  * `registerUserLogin`.
25
25
  */
26
- export declare function renewRegisterSession(rufen: KasseneckTransport): Promise<number>;
26
+ export declare function renewRegisterSession(rufen: InternerTransport): Promise<number>;
27
27
  /**
28
28
  * Sitzung beenden und den Lizenzplatz sofort freigeben — der regulaere Weg des
29
29
  * Abmeldens.
@@ -34,4 +34,4 @@ export declare function renewRegisterSession(rufen: KasseneckTransport): Promise
34
34
  * einer harmlosen Vertragsaenderung — ausgerechnet beim Abmelden, dem Aufruf,
35
35
  * der auch dann durchgehen soll, wenn sonst nichts mehr geht.
36
36
  */
37
- export declare function endRegisterSession(rufen: KasseneckTransport): Promise<void>;
37
+ export declare function endRegisterSession(rufen: InternerTransport): Promise<void>;
@@ -0,0 +1,89 @@
1
+ {
2
+ "company": {
3
+ "companyName": "Bäckerei Muster",
4
+ "street": "Hauptplatz 1",
5
+ "zip": "4830",
6
+ "city": "Hallstatt",
7
+ "phone": "+43 6134 12345",
8
+ "uid": "ATU12345678",
9
+ "taxnr": "",
10
+ "isSmallBusiness": false,
11
+ "footer1": "Vielen Dank für Ihren Einkauf",
12
+ "footer2": "www.baeckerei-muster.at",
13
+ "thanksMessage": [],
14
+ "showKreiseckLogo": false
15
+ },
16
+ "receipt": {
17
+ "receiptId": "AT0-KASSE1-82",
18
+ "cashregisterId": "KASSE1",
19
+ "timeStamp": "2026-08-13T10:15:30",
20
+ "items": [
21
+ {
22
+ "name": "Semmel",
23
+ "quantity": 4,
24
+ "unitPriceCents": 79,
25
+ "vatRate": 10
26
+ },
27
+ {
28
+ "name": "Kaffee klein",
29
+ "quantity": 1,
30
+ "unitPriceCents": 280,
31
+ "vatRate": 20
32
+ },
33
+ {
34
+ "name": "Rabatt 10 %",
35
+ "quantity": 1,
36
+ "unitPriceCents": -32,
37
+ "vatRate": 10,
38
+ "kind": "discount"
39
+ },
40
+ {
41
+ "name": "Rabatt 10 %",
42
+ "quantity": 1,
43
+ "unitPriceCents": -28,
44
+ "vatRate": 20,
45
+ "kind": "discount"
46
+ },
47
+ {
48
+ "name": "Trinkgeld",
49
+ "quantity": 1,
50
+ "unitPriceCents": 106,
51
+ "vatRate": 10,
52
+ "kind": "tip",
53
+ "recipient": {
54
+ "registerUserId": "ru2",
55
+ "name": "Chef",
56
+ "owner": true
57
+ },
58
+ "paymentMethod": "cash"
59
+ },
60
+ {
61
+ "name": "Trinkgeld",
62
+ "quantity": 1,
63
+ "unitPriceCents": 94,
64
+ "vatRate": 20,
65
+ "kind": "tip",
66
+ "recipient": {
67
+ "registerUserId": "ru2",
68
+ "name": "Chef",
69
+ "owner": true
70
+ },
71
+ "paymentMethod": "cash"
72
+ }
73
+ ],
74
+ "vouchers": [],
75
+ "paymentMethod": "cash",
76
+ "turnoverCounterAES256ICM": "UMSATZ",
77
+ "signaturePreviousReceipt": "VORGAENGER",
78
+ "certificateSerialNumber": "6F0404F0",
79
+ "receiptType": "standard",
80
+ "sig": "eyJhbGciOiJFUzI1NiJ9.QVQx.SIGNATURWERT",
81
+ "qr": "_R1-AT1_KASSE1_AT0-KASSE1-42_2026-08-13T10:15:30_5,00_2,70_0,00_0,00_0,00_UMSATZ_VORGAENGER_6F0404F0_SIGNATUR",
82
+ "fullReceiptId": "VOLL",
83
+ "customerDetails": [],
84
+ "legalMessage": []
85
+ },
86
+ "options": {
87
+ "paperSize": "mm80"
88
+ }
89
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "company": {
3
+ "companyName": "Bäckerei Muster",
4
+ "street": "Hauptplatz 1",
5
+ "zip": "4830",
6
+ "city": "Hallstatt",
7
+ "phone": "+43 6134 12345",
8
+ "uid": "ATU12345678",
9
+ "taxnr": "",
10
+ "isSmallBusiness": false,
11
+ "footer1": "Vielen Dank für Ihren Einkauf",
12
+ "footer2": "www.baeckerei-muster.at",
13
+ "thanksMessage": [],
14
+ "showKreiseckLogo": false
15
+ },
16
+ "receipt": {
17
+ "receiptId": "AT0-KASSE1-83",
18
+ "cashregisterId": "KASSE1",
19
+ "timeStamp": "2026-08-13T10:15:30",
20
+ "items": [
21
+ {
22
+ "name": "Maniküre klassisch",
23
+ "quantity": 1,
24
+ "unitPriceCents": 2900,
25
+ "vatRate": 20
26
+ },
27
+ {
28
+ "name": "Rabatt 15 %",
29
+ "quantity": 1,
30
+ "unitPriceCents": -435,
31
+ "vatRate": 20,
32
+ "kind": "discount"
33
+ }
34
+ ],
35
+ "vouchers": [],
36
+ "paymentMethod": "cash",
37
+ "turnoverCounterAES256ICM": "UMSATZ",
38
+ "signaturePreviousReceipt": "VORGAENGER",
39
+ "certificateSerialNumber": "6F0404F0",
40
+ "receiptType": "standard",
41
+ "sig": "eyJhbGciOiJFUzI1NiJ9.QVQx.SIGNATURWERT",
42
+ "qr": "_R1-AT1_KASSE1_AT0-KASSE1-42_2026-08-13T10:15:30_5,00_2,70_0,00_0,00_0,00_UMSATZ_VORGAENGER_6F0404F0_SIGNATUR",
43
+ "fullReceiptId": "VOLL",
44
+ "customerDetails": [],
45
+ "legalMessage": []
46
+ },
47
+ "options": {
48
+ "paperSize": "mm80"
49
+ }
50
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "company": {
3
+ "companyName": "Bäckerei Muster",
4
+ "street": "Hauptplatz 1",
5
+ "zip": "4830",
6
+ "city": "Hallstatt",
7
+ "phone": "+43 6134 12345",
8
+ "uid": "ATU12345678",
9
+ "taxnr": "",
10
+ "isSmallBusiness": false,
11
+ "footer1": "Vielen Dank für Ihren Einkauf",
12
+ "footer2": "www.baeckerei-muster.at",
13
+ "thanksMessage": [],
14
+ "showKreiseckLogo": false
15
+ },
16
+ "receipt": {
17
+ "receiptId": "AT0-KASSE1-62",
18
+ "cashregisterId": "KASSE1",
19
+ "timeStamp": "2026-08-13T10:15:30",
20
+ "items": [
21
+ {
22
+ "name": "Semmel",
23
+ "quantity": 4,
24
+ "unitPriceCents": 79,
25
+ "vatRate": 10
26
+ },
27
+ {
28
+ "name": "Kaffee klein",
29
+ "quantity": 1,
30
+ "unitPriceCents": 280,
31
+ "vatRate": 20
32
+ },
33
+ {
34
+ "name": "Rabatt 10 %",
35
+ "quantity": 1,
36
+ "unitPriceCents": -32,
37
+ "vatRate": 10,
38
+ "kind": "discount"
39
+ },
40
+ {
41
+ "name": "Rabatt 10 %",
42
+ "quantity": 1,
43
+ "unitPriceCents": -28,
44
+ "vatRate": 20,
45
+ "kind": "discount"
46
+ },
47
+ {
48
+ "name": "Trinkgeld Personal",
49
+ "quantity": 1,
50
+ "unitPriceCents": 100,
51
+ "vatRate": 0,
52
+ "kind": "tip",
53
+ "recipient": {
54
+ "registerUserId": "ru1",
55
+ "name": "Anna"
56
+ },
57
+ "paymentMethod": "cash"
58
+ }
59
+ ],
60
+ "vouchers": [],
61
+ "paymentMethod": "cash",
62
+ "turnoverCounterAES256ICM": "UMSATZ",
63
+ "signaturePreviousReceipt": "VORGAENGER",
64
+ "certificateSerialNumber": "6F0404F0",
65
+ "receiptType": "standard",
66
+ "sig": "eyJhbGciOiJFUzI1NiJ9.QVQx.SIGNATURWERT",
67
+ "qr": "_R1-AT1_KASSE1_AT0-KASSE1-42_2026-08-13T10:15:30_5,00_2,70_0,00_0,00_0,00_UMSATZ_VORGAENGER_6F0404F0_SIGNATUR",
68
+ "fullReceiptId": "VOLL",
69
+ "customerDetails": [],
70
+ "legalMessage": []
71
+ },
72
+ "options": {
73
+ "paperSize": "mm80"
74
+ }
75
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "company": {
3
+ "companyName": "Bäckerei Muster",
4
+ "street": "Hauptplatz 1",
5
+ "zip": "4830",
6
+ "city": "Hallstatt",
7
+ "phone": "+43 6134 12345",
8
+ "uid": "ATU12345678",
9
+ "taxnr": "",
10
+ "isSmallBusiness": false,
11
+ "footer1": "Vielen Dank für Ihren Einkauf",
12
+ "footer2": "www.baeckerei-muster.at",
13
+ "thanksMessage": [],
14
+ "showKreiseckLogo": false
15
+ },
16
+ "receipt": {
17
+ "receiptId": "AT0-KASSE1-58",
18
+ "cashregisterId": "KASSE1",
19
+ "timeStamp": "2026-08-13T10:15:30",
20
+ "items": [
21
+ {
22
+ "name": "Semmel",
23
+ "quantity": 4,
24
+ "unitPriceCents": 79,
25
+ "vatRate": 10
26
+ },
27
+ {
28
+ "name": "Kaffee klein",
29
+ "quantity": 1,
30
+ "unitPriceCents": 280,
31
+ "vatRate": 20
32
+ },
33
+ {
34
+ "name": "Rabatt 10 %",
35
+ "quantity": 1,
36
+ "unitPriceCents": -32,
37
+ "vatRate": 10,
38
+ "kind": "discount"
39
+ },
40
+ {
41
+ "name": "Rabatt 10 %",
42
+ "quantity": 1,
43
+ "unitPriceCents": -28,
44
+ "vatRate": 20,
45
+ "kind": "discount"
46
+ }
47
+ ],
48
+ "vouchers": [
49
+ {
50
+ "type": "value",
51
+ "action": "redeem",
52
+ "valueCents": 300,
53
+ "code": "GS-1"
54
+ }
55
+ ],
56
+ "paymentMethod": "cash",
57
+ "turnoverCounterAES256ICM": "UMSATZ",
58
+ "signaturePreviousReceipt": "VORGAENGER",
59
+ "certificateSerialNumber": "6F0404F0",
60
+ "receiptType": "standard",
61
+ "sig": "eyJhbGciOiJFUzI1NiJ9.QVQx.SIGNATURWERT",
62
+ "qr": "_R1-AT1_KASSE1_AT0-KASSE1-42_2026-08-13T10:15:30_5,00_2,70_0,00_0,00_0,00_UMSATZ_VORGAENGER_6F0404F0_SIGNATUR",
63
+ "fullReceiptId": "VOLL",
64
+ "customerDetails": [],
65
+ "legalMessage": []
66
+ },
67
+ "options": {
68
+ "paperSize": "mm80"
69
+ }
70
+ }
@@ -34,13 +34,15 @@
34
34
  "name": "Rabatt 10 %",
35
35
  "quantity": 1,
36
36
  "unitPriceCents": -32,
37
- "vatRate": 10
37
+ "vatRate": 10,
38
+ "kind": "discount"
38
39
  },
39
40
  {
40
41
  "name": "Rabatt 10 %",
41
42
  "quantity": 1,
42
43
  "unitPriceCents": -28,
43
- "vatRate": 20
44
+ "vatRate": 20,
45
+ "kind": "discount"
44
46
  }
45
47
  ],
46
48
  "vouchers": [],
@@ -58,4 +60,4 @@
58
60
  "options": {
59
61
  "paperSize": "mm80"
60
62
  }
61
- }
63
+ }
@@ -0,0 +1,68 @@
1
+ {
2
+ "company": {
3
+ "companyName": "Bäckerei Muster",
4
+ "street": "Hauptplatz 1",
5
+ "zip": "4830",
6
+ "city": "Hallstatt",
7
+ "phone": "+43 6134 12345",
8
+ "uid": "ATU12345678",
9
+ "taxnr": "",
10
+ "isSmallBusiness": false,
11
+ "footer1": "Vielen Dank für Ihren Einkauf",
12
+ "footer2": "www.baeckerei-muster.at",
13
+ "thanksMessage": [],
14
+ "showKreiseckLogo": false
15
+ },
16
+ "receipt": {
17
+ "receiptId": "AT0-KASSE1-58",
18
+ "cashregisterId": "KASSE1",
19
+ "timeStamp": "2026-08-13T10:15:30",
20
+ "items": [
21
+ {
22
+ "name": "Semmel",
23
+ "quantity": 4,
24
+ "unitPriceCents": -79,
25
+ "vatRate": 10
26
+ },
27
+ {
28
+ "name": "Kaffee klein",
29
+ "quantity": 1,
30
+ "unitPriceCents": -280,
31
+ "vatRate": 20
32
+ },
33
+ {
34
+ "name": "Rabatt 10 %",
35
+ "quantity": 1,
36
+ "unitPriceCents": 32,
37
+ "vatRate": 10,
38
+ "kind": "discount"
39
+ },
40
+ {
41
+ "name": "Rabatt 10 %",
42
+ "quantity": 1,
43
+ "unitPriceCents": 28,
44
+ "vatRate": 20,
45
+ "kind": "discount"
46
+ }
47
+ ],
48
+ "vouchers": [],
49
+ "paymentMethod": "cash",
50
+ "turnoverCounterAES256ICM": "UMSATZ",
51
+ "signaturePreviousReceipt": "VORGAENGER",
52
+ "certificateSerialNumber": "6F0404F0",
53
+ "receiptType": "cancellation",
54
+ "sig": "eyJhbGciOiJFUzI1NiJ9.QVQx.SIGNATURWERT",
55
+ "qr": "_R1-AT1_KASSE1_AT0-KASSE1-42_2026-08-13T10:15:30_5,00_2,70_0,00_0,00_0,00_UMSATZ_VORGAENGER_6F0404F0_SIGNATUR",
56
+ "fullReceiptId": "VOLL",
57
+ "customerDetails": [],
58
+ "legalMessage": [],
59
+ "cancellationOf": {
60
+ "receiptId": "AT0-KASSE1-55",
61
+ "fullReceiptId": null
62
+ },
63
+ "cancellationReason": "fehleingabe"
64
+ },
65
+ "options": {
66
+ "paperSize": "mm80"
67
+ }
68
+ }
@@ -0,0 +1,31 @@
1
+ Bäckerei Muster
2
+ Hauptplatz 1
3
+ 4830 Hallstatt
4
+ ATU12345678
5
+ +43 6134 12345
6
+
7
+ Datum: 13.08.2026 10:15:30
8
+ Kassen-ID: KASSE1
9
+ Beleg-ID: AT0-KASSE1-82
10
+
11
+ 4 x Semmel 3,16 B
12
+ je 0,79
13
+ 1 x Kaffee klein 2,80 A
14
+ --------------------------------
15
+ Zwischensumme 5,96
16
+ Rabatt 10 % -0,60 *
17
+ * davon -0,28 A, -0,32 B
18
+ Trinkgeld 2,00 *
19
+ * davon 0,94 A, 1,06 B
20
+
21
+ MwSt% MwSt Netto Brutto
22
+ B 10% 0,35 3,55 3,90
23
+ A 20% 0,58 2,88 3,46
24
+ --------------------------------
25
+ Gesamt: 7,36 €
26
+ Zahlungsart: Barzahlung
27
+
28
+ [QR-Code]
29
+
30
+ Vielen Dank für Ihren Einkauf
31
+ www.baeckerei-muster.at
@@ -0,0 +1,30 @@
1
+ Bäckerei Muster
2
+ Hauptplatz 1
3
+ 4830 Hallstatt
4
+ ATU12345678
5
+ +43 6134 12345
6
+
7
+ Datum: 13.08.2026 10:15:30
8
+ Kassen-ID: KASSE1
9
+ Beleg-ID: AT0-KASSE1-82
10
+
11
+ 4 x Semmel je 0,79 3,16 B
12
+ 1 x Kaffee klein 2,80 A
13
+ ------------------------------------------------
14
+ Zwischensumme 5,96
15
+ Rabatt 10 % -0,60 *
16
+ * davon -0,28 A, -0,32 B
17
+ Trinkgeld 2,00 *
18
+ * davon 0,94 A, 1,06 B
19
+
20
+ MwSt% MwSt Netto Brutto
21
+ B 10% 0,35 3,55 3,90
22
+ A 20% 0,58 2,88 3,46
23
+ ------------------------------------------------
24
+ Gesamt: 7,36 €
25
+ Zahlungsart: Barzahlung
26
+
27
+ [QR-Code]
28
+
29
+ Vielen Dank für Ihren Einkauf
30
+ www.baeckerei-muster.at