@kreiseck/kasseneck-api 0.13.2 → 0.15.0

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 (195) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/README.md +96 -5
  3. package/dist/cjs/client/aufrufe.d.ts +1 -1
  4. package/dist/cjs/client/aufrufe.js +11 -0
  5. package/dist/cjs/client/receipts.d.ts +7 -0
  6. package/dist/cjs/client/receipts.js +1 -0
  7. package/dist/cjs/kasse/drucker.d.ts +5 -0
  8. package/dist/cjs/kasse/drucker.js +9 -0
  9. package/dist/cjs/kasse/settings.js +5 -2
  10. package/dist/cjs/printing/escpos.d.ts +38 -4
  11. package/dist/cjs/printing/escpos.js +87 -15
  12. package/dist/cjs/printing/index.d.ts +2 -2
  13. package/dist/cjs/printing/index.js +5 -1
  14. package/dist/cjs/printing/qr-groesse.d.ts +26 -21
  15. package/dist/cjs/printing/qr-groesse.js +22 -8
  16. package/dist/cjs/react/index.d.ts +53 -0
  17. package/dist/cjs/react/index.js +81 -0
  18. package/dist/cjs/receipt/bild.d.ts +14 -0
  19. package/dist/cjs/receipt/bild.js +65 -0
  20. package/dist/cjs/receipt/blatt.d.ts +107 -0
  21. package/dist/cjs/receipt/blatt.js +137 -0
  22. package/dist/cjs/receipt/epos.d.ts +19 -8
  23. package/dist/cjs/receipt/epos.js +39 -20
  24. package/dist/cjs/receipt/grid.d.ts +1 -1
  25. package/dist/cjs/receipt/grid.js +9 -1
  26. package/dist/cjs/receipt/index.d.ts +4 -2
  27. package/dist/cjs/receipt/index.js +17 -1
  28. package/dist/cjs/receipt/layout-escpos.d.ts +31 -3
  29. package/dist/cjs/receipt/layout-escpos.js +58 -18
  30. package/dist/cjs/rechnung/api.d.ts +43 -0
  31. package/dist/cjs/rechnung/api.js +35 -0
  32. package/dist/cjs/rechnung/auth.d.ts +21 -0
  33. package/dist/cjs/rechnung/auth.js +36 -0
  34. package/dist/cjs/rechnung/endpunkte.d.ts +48 -0
  35. package/dist/cjs/rechnung/endpunkte.js +129 -0
  36. package/dist/cjs/rechnung/fehler.d.ts +21 -0
  37. package/dist/cjs/rechnung/fehler.js +44 -0
  38. package/dist/cjs/rechnung/index.d.ts +18 -0
  39. package/dist/cjs/rechnung/index.js +52 -0
  40. package/dist/cjs/rechnung/typen.d.ts +224 -0
  41. package/dist/cjs/rechnung/typen.js +9 -0
  42. package/dist/cjs/rechnung/vertrag.d.ts +98 -0
  43. package/dist/cjs/rechnung/vertrag.js +191 -0
  44. package/dist/esm/client/aufrufe.d.ts +1 -1
  45. package/dist/esm/client/aufrufe.js +11 -0
  46. package/dist/esm/client/receipts.d.ts +7 -0
  47. package/dist/esm/client/receipts.js +1 -0
  48. package/dist/esm/kasse/drucker.d.ts +5 -0
  49. package/dist/esm/kasse/drucker.js +9 -0
  50. package/dist/esm/kasse/settings.js +5 -2
  51. package/dist/esm/printing/escpos.d.ts +38 -4
  52. package/dist/esm/printing/escpos.js +84 -15
  53. package/dist/esm/printing/index.d.ts +2 -2
  54. package/dist/esm/printing/index.js +2 -2
  55. package/dist/esm/printing/qr-groesse.d.ts +26 -21
  56. package/dist/esm/printing/qr-groesse.js +21 -8
  57. package/dist/esm/react/index.d.ts +53 -0
  58. package/dist/esm/react/index.js +80 -1
  59. package/dist/esm/receipt/bild.d.ts +14 -0
  60. package/dist/esm/receipt/bild.js +62 -0
  61. package/dist/esm/receipt/blatt.d.ts +107 -0
  62. package/dist/esm/receipt/blatt.js +128 -0
  63. package/dist/esm/receipt/epos.d.ts +19 -8
  64. package/dist/esm/receipt/epos.js +40 -22
  65. package/dist/esm/receipt/grid.d.ts +1 -1
  66. package/dist/esm/receipt/grid.js +9 -1
  67. package/dist/esm/receipt/index.d.ts +4 -2
  68. package/dist/esm/receipt/index.js +4 -2
  69. package/dist/esm/receipt/layout-escpos.d.ts +31 -3
  70. package/dist/esm/receipt/layout-escpos.js +58 -20
  71. package/dist/esm/rechnung/api.d.ts +43 -0
  72. package/dist/esm/rechnung/api.js +32 -0
  73. package/dist/esm/rechnung/auth.d.ts +21 -0
  74. package/dist/esm/rechnung/auth.js +33 -0
  75. package/dist/esm/rechnung/endpunkte.d.ts +48 -0
  76. package/dist/esm/rechnung/endpunkte.js +116 -0
  77. package/dist/esm/rechnung/fehler.d.ts +21 -0
  78. package/dist/esm/rechnung/fehler.js +39 -0
  79. package/dist/esm/rechnung/index.d.ts +18 -0
  80. package/dist/esm/rechnung/index.js +17 -0
  81. package/dist/esm/rechnung/typen.d.ts +224 -0
  82. package/dist/esm/rechnung/typen.js +8 -0
  83. package/dist/esm/rechnung/vertrag.d.ts +98 -0
  84. package/dist/esm/rechnung/vertrag.js +188 -0
  85. package/fixtures/erwartet/karte-eigener.blatt32.json +159 -0
  86. package/fixtures/erwartet/karte-eigener.blatt48.json +159 -0
  87. package/fixtures/erwartet/karte-gptom-ios.blatt32.json +231 -0
  88. package/fixtures/erwartet/karte-gptom-ios.blatt48.json +231 -0
  89. package/fixtures/erwartet/karte-gptom.blatt32.json +231 -0
  90. package/fixtures/erwartet/karte-gptom.blatt48.json +231 -0
  91. package/fixtures/erwartet/karte-hobex-cloud.blatt32.json +201 -0
  92. package/fixtures/erwartet/karte-hobex-cloud.blatt48.json +201 -0
  93. package/fixtures/erwartet/karte-hobex-hps.blatt32.json +225 -0
  94. package/fixtures/erwartet/karte-hobex-hps.blatt48.json +225 -0
  95. package/fixtures/erwartet/karte-mypos.blatt32.json +255 -0
  96. package/fixtures/erwartet/karte-mypos.blatt48.json +243 -0
  97. package/fixtures/erwartet/karte-stripe-eps.blatt32.json +195 -0
  98. package/fixtures/erwartet/karte-stripe-eps.blatt48.json +195 -0
  99. package/fixtures/erwartet/karte-stripe.blatt32.json +213 -0
  100. package/fixtures/erwartet/karte-stripe.blatt48.json +213 -0
  101. package/fixtures/erwartet/karte-sumup.blatt32.json +219 -0
  102. package/fixtures/erwartet/karte-sumup.blatt48.json +207 -0
  103. package/fixtures/erwartet/langer-artikelname.blatt32.json +177 -0
  104. package/fixtures/erwartet/langer-artikelname.blatt48.json +171 -0
  105. package/fixtures/erwartet/logo-probe-hoch.raster32.txt +120 -0
  106. package/fixtures/erwartet/logo-probe.raster32.txt +54 -0
  107. package/fixtures/erwartet/null-ausfall.blatt32.json +207 -0
  108. package/fixtures/erwartet/null-ausfall.blatt48.json +189 -0
  109. package/fixtures/erwartet/null-ausfall.grid32.txt +2 -0
  110. package/fixtures/erwartet/null-ausfall.grid48.txt +2 -0
  111. package/fixtures/erwartet/null-jahr.blatt32.json +213 -0
  112. package/fixtures/erwartet/null-jahr.blatt48.json +189 -0
  113. package/fixtures/erwartet/null-jahr.grid32.txt +2 -0
  114. package/fixtures/erwartet/null-jahr.grid48.txt +2 -0
  115. package/fixtures/erwartet/null-monat.blatt32.json +207 -0
  116. package/fixtures/erwartet/null-monat.blatt48.json +189 -0
  117. package/fixtures/erwartet/null-monat.grid32.txt +2 -0
  118. package/fixtures/erwartet/null-monat.grid48.txt +2 -0
  119. package/fixtures/erwartet/null-pruef.blatt32.json +207 -0
  120. package/fixtures/erwartet/null-pruef.blatt48.json +189 -0
  121. package/fixtures/erwartet/null-pruef.grid32.txt +2 -0
  122. package/fixtures/erwartet/null-pruef.grid48.txt +2 -0
  123. package/fixtures/erwartet/null-schluss.blatt32.json +207 -0
  124. package/fixtures/erwartet/null-schluss.blatt48.json +189 -0
  125. package/fixtures/erwartet/null-schluss.grid32.txt +2 -0
  126. package/fixtures/erwartet/null-schluss.grid48.txt +2 -0
  127. package/fixtures/erwartet/null-start.blatt32.json +207 -0
  128. package/fixtures/erwartet/null-start.blatt48.json +189 -0
  129. package/fixtures/erwartet/null-start.grid32.txt +2 -0
  130. package/fixtures/erwartet/null-start.grid48.txt +2 -0
  131. package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt32.json +213 -0
  132. package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt48.json +207 -0
  133. package/fixtures/erwartet/rabatt-einfach.blatt32.json +183 -0
  134. package/fixtures/erwartet/rabatt-einfach.blatt48.json +177 -0
  135. package/fixtures/erwartet/rabatt-trinkgeld.blatt32.json +213 -0
  136. package/fixtures/erwartet/rabatt-trinkgeld.blatt48.json +207 -0
  137. package/fixtures/erwartet/rabatt-wertgutschein.blatt32.json +219 -0
  138. package/fixtures/erwartet/rabatt-wertgutschein.blatt48.json +213 -0
  139. package/fixtures/erwartet/rabattzeilen.blatt32.json +201 -0
  140. package/fixtures/erwartet/rabattzeilen.blatt48.json +195 -0
  141. package/fixtures/erwartet/signaturausfall-verkauf.blatt32.json +195 -0
  142. package/fixtures/erwartet/signaturausfall-verkauf.blatt48.json +183 -0
  143. package/fixtures/erwartet/storno-rabatt.blatt32.json +249 -0
  144. package/fixtures/erwartet/storno-rabatt.blatt48.json +237 -0
  145. package/fixtures/erwartet/storno-rabatt.grid32.txt +2 -0
  146. package/fixtures/erwartet/storno-rabatt.grid48.txt +2 -0
  147. package/fixtures/erwartet/storno-teil.blatt32.json +207 -0
  148. package/fixtures/erwartet/storno-teil.blatt48.json +201 -0
  149. package/fixtures/erwartet/storno-teil.grid32.txt +2 -0
  150. package/fixtures/erwartet/storno-teil.grid48.txt +2 -0
  151. package/fixtures/erwartet/storno-voll.blatt32.json +219 -0
  152. package/fixtures/erwartet/storno-voll.blatt48.json +213 -0
  153. package/fixtures/erwartet/storno-voll.grid32.txt +2 -0
  154. package/fixtures/erwartet/storno-voll.grid48.txt +2 -0
  155. package/fixtures/erwartet/testkasse-verkauf.blatt32.json +225 -0
  156. package/fixtures/erwartet/testkasse-verkauf.blatt48.json +219 -0
  157. package/fixtures/erwartet/testkasse-verkauf.grid32.txt +5 -1
  158. package/fixtures/erwartet/testkasse-verkauf.grid48.txt +5 -1
  159. package/fixtures/erwartet/testsignatur-verkauf.blatt32.json +237 -0
  160. package/fixtures/erwartet/testsignatur-verkauf.blatt48.json +219 -0
  161. package/fixtures/erwartet/testsignatur-verkauf.grid32.txt +5 -1
  162. package/fixtures/erwartet/testsignatur-verkauf.grid48.txt +5 -1
  163. package/fixtures/erwartet/training.blatt32.json +237 -0
  164. package/fixtures/erwartet/training.blatt48.json +219 -0
  165. package/fixtures/erwartet/training.grid32.txt +2 -0
  166. package/fixtures/erwartet/training.grid48.txt +2 -0
  167. package/fixtures/erwartet/verkauf-bar.blatt32.json +177 -0
  168. package/fixtures/erwartet/verkauf-bar.blatt48.json +171 -0
  169. package/fixtures/erwartet/verkauf-karte.blatt32.json +177 -0
  170. package/fixtures/erwartet/verkauf-karte.blatt48.json +171 -0
  171. package/fixtures/erwartet/verkauf-kleinunternehmer.blatt32.json +183 -0
  172. package/fixtures/erwartet/verkauf-kleinunternehmer.blatt48.json +177 -0
  173. package/fixtures/hobex-hps-codes.json +1 -1
  174. package/fixtures/kasse-settings-standard.json +1 -1
  175. package/fixtures/kasse-texte.json +1 -1
  176. package/fixtures/manifest.json +109 -43
  177. package/fixtures/oberflaeche.json +87 -1
  178. package/fixtures/rechnung-api-beispiele/credit-fehler-grund.json +24 -0
  179. package/fixtures/rechnung-api-beispiele/credit-ok.json +20 -0
  180. package/fixtures/rechnung-api-beispiele/customer-fehler-uid.json +25 -0
  181. package/fixtures/rechnung-api-beispiele/customer-get-fehler-beide.json +15 -0
  182. package/fixtures/rechnung-api-beispiele/customer-ok.json +20 -0
  183. package/fixtures/rechnung-api-beispiele/customer-search-fehler-leer.json +14 -0
  184. package/fixtures/rechnung-api-beispiele/issue-brutto-20.json +27 -0
  185. package/fixtures/rechnung-api-beispiele/issue-fehler-cent.json +26 -0
  186. package/fixtures/rechnung-api-beispiele/issue-fehler-menge.json +26 -0
  187. package/fixtures/rechnung-api-beispiele/issue-fehler-negativ.json +26 -0
  188. package/fixtures/rechnung-api-beispiele/issue-fehler-satz.json +26 -0
  189. package/fixtures/rechnung-api-beispiele/issue-fehler-unbekannt.json +27 -0
  190. package/fixtures/rechnung-api-beispiele/issue-gemischt.json +33 -0
  191. package/fixtures/rechnung-api-beispiele/issue-kleinunternehmer.json +27 -0
  192. package/fixtures/rechnung-api-beispiele/issue-netto-20.json +28 -0
  193. package/fixtures/rechnung-api-beispiele/issue-rabatt.json +28 -0
  194. package/fixtures/rechnung-api.schema.json +672 -0
  195. package/package.json +12 -1
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Der Vertrag der Rechnungs-API — als Daten, nicht als Prosa.
3
+ *
4
+ * Aus dieser Datei entstehen drei Dinge, damit sie nicht auseinanderlaufen
5
+ * koennen:
6
+ *
7
+ * 1. `fixtures/rechnung-api.schema.json` (`npm run fixtures:rechnung`) — das
8
+ * Backend liest es aus dem vendorierten Paket und vergleicht es in beide
9
+ * Richtungen mit seiner eigenen Pruefung; der Dart-Zwilling zieht es byteweise.
10
+ * 2. Die Listen unter `rechnung` in `fixtures/oberflaeche.json` (Codes, Gruende,
11
+ * Enums) — ueber denselben Namensraum-Scan wie der Partner-Teil.
12
+ * 3. Die TypeScript-Typen in `typen.ts`.
13
+ *
14
+ * Nach aussen spricht die Schnittstelle Englisch: Feldnamen, Codes, Gruende.
15
+ * Deutsch bleibt, was ein Mensch liest (`message`, der Aufdruck eines Grundes).
16
+ *
17
+ * Beschrieben wird die Anfrage. Was der Server daraus macht — Rechnungsdatum,
18
+ * Nummer, Summen — ist bewusst **nicht** setzbar.
19
+ */
20
+ export const RECHNUNG_VERTRAG_VERSION = 1;
21
+ export const RECHNUNG_AUFRUFE = [
22
+ 'createCustomer',
23
+ 'getCustomer',
24
+ 'updateCustomer',
25
+ 'searchCustomers',
26
+ 'issueInvoice',
27
+ 'cancelInvoice',
28
+ 'createCreditNote',
29
+ 'getInvoice',
30
+ 'listInvoices',
31
+ 'getInvoicePdf',
32
+ 'getInvoiceXml',
33
+ ];
34
+ /**
35
+ * Stabile Fehlercodes. Das Fremdsystem verzweigt am Code, der Text darf sich
36
+ * aendern. `validation` traegt zusaetzlich `errors: [{ field, message }]`.
37
+ */
38
+ export const INVOICE_ERROR_CODES = [
39
+ 'validation',
40
+ 'idempotency_conflict',
41
+ 'module_inactive',
42
+ 'customer_not_found',
43
+ 'customer_exists',
44
+ 'short_code_taken',
45
+ 'short_code_immutable',
46
+ 'recipient_required',
47
+ 'invoice_requirements_missing',
48
+ 'invoice_not_found',
49
+ 'invoice_ambiguous',
50
+ 'not_cancellable',
51
+ 'partial_credit_exists',
52
+ 'credit_exceeds_invoice',
53
+ 'einvoice_incomplete',
54
+ ];
55
+ /** Gruende einer Gutschrift. Der Server druckt den deutschen Anzeigetext. */
56
+ export const CREDIT_NOTE_REASONS = [
57
+ 'cancellation',
58
+ 'price_reduction',
59
+ 'return',
60
+ 'incorrect_invoice',
61
+ 'other',
62
+ ];
63
+ export const TAX_SCHEMES = ['normal', 'smallBusiness', 'reverseCharge', 'igLieferung', 'exportThirdCountry'];
64
+ export const PRICE_MODES = ['net', 'gross'];
65
+ export const VAT_RATES = [0, 10, 13, 20];
66
+ export const CUSTOMER_TYPES = ['private', 'company'];
67
+ export const INVOICE_LIST_STATUS = ['final', 'paid', 'cancelled', 'open', 'overdue'];
68
+ export const DOC_TYPES = ['RE', 'GU'];
69
+ export const EINVOICE_FORMATS = ['ubl', 'cii'];
70
+ const text = (max, pflicht = false, extra = {}) => ({ typ: 'string', pflicht, max, ...(pflicht && extra.min === undefined ? { min: 1 } : {}), ...extra });
71
+ const idempotencyKey = (pflicht) => ({ typ: 'string', pflicht, min: 1, max: 120 });
72
+ const id = { typ: 'string', pflicht: false, min: 1, max: 128 };
73
+ const idPflicht = { typ: 'string', pflicht: true, min: 1, max: 128 };
74
+ const datum = (pflicht = false) => ({ typ: 'string', pflicht, min: 10, max: 10, format: 'date' });
75
+ const limit = { typ: 'integer', pflicht: false, min: 1, max: 100 };
76
+ const cursor = { typ: 'string', pflicht: false, min: 1, max: 500 };
77
+ /** Kunde, wie das Fremdsystem ihn schickt. `vatId` ist die UID-Nummer. */
78
+ export const KUNDE_FELDER = Object.freeze({
79
+ type: { typ: 'enum', pflicht: true, werte: CUSTOMER_TYPES },
80
+ name: text(200, true),
81
+ legalForm: text(40),
82
+ email: text(254, false, { format: 'email' }),
83
+ phone: text(40, false, { format: 'phone' }),
84
+ street: text(200),
85
+ houseNumber: text(20),
86
+ zip: text(10),
87
+ city: text(100),
88
+ country: text(2, true, { min: 2, format: 'country' }),
89
+ vatId: text(20, false, { format: 'vatId' }),
90
+ shortCode: text(8, false, { format: 'shortCode' }),
91
+ isAuthority: { typ: 'boolean', pflicht: false },
92
+ note: text(1000),
93
+ externalId: { typ: 'string', pflicht: false, min: 1, max: 120 },
94
+ });
95
+ /** Beim Aendern ist jedes Kundenfeld optional. */
96
+ const KUNDE_PATCH = Object.freeze(Object.fromEntries(Object.entries(KUNDE_FELDER).map(([name, feld]) => [name, { ...feld, pflicht: false }])));
97
+ /** Eine Rechnungs- oder Gutschriftsposition. Preise in ganzen Cent. */
98
+ export const POSITION_FELDER = Object.freeze({
99
+ description: text(300, true),
100
+ subtitle: text(1000),
101
+ quantity: { typ: 'number', pflicht: true, min: 0, exklusivMin: true, max: 1_000_000, nachkomma: 3 },
102
+ unit: text(20),
103
+ unitPriceCents: { typ: 'integer', pflicht: true, min: 0, max: 100_000_000 },
104
+ vatRate: { typ: 'enum', pflicht: true, werte: VAT_RATES },
105
+ discountPct: { typ: 'number', pflicht: false, min: 0, max: 100, nachkomma: 2 },
106
+ });
107
+ const positionen = { typ: 'list', pflicht: true, min: 1, max: 500, eintrag: { typ: 'object', pflicht: true, felder: POSITION_FELDER } };
108
+ export const RECHNUNG_ANFRAGEN = Object.freeze({
109
+ createCustomer: {
110
+ customer: { typ: 'object', pflicht: true, felder: KUNDE_FELDER },
111
+ idempotencyKey: idempotencyKey(false),
112
+ },
113
+ getCustomer: {
114
+ customerId: id,
115
+ externalId: { typ: 'string', pflicht: false, min: 1, max: 120 },
116
+ },
117
+ updateCustomer: {
118
+ customerId: idPflicht,
119
+ customer: { typ: 'object', pflicht: true, felder: KUNDE_PATCH },
120
+ },
121
+ searchCustomers: {
122
+ externalId: { typ: 'string', pflicht: false, min: 1, max: 120 },
123
+ vatId: text(20),
124
+ email: text(254),
125
+ name: text(200),
126
+ limit,
127
+ cursor,
128
+ },
129
+ issueInvoice: {
130
+ idempotencyKey: idempotencyKey(true),
131
+ customerId: id,
132
+ taxScheme: { typ: 'enum', pflicht: true, werte: TAX_SCHEMES },
133
+ priceMode: { typ: 'enum', pflicht: true, werte: PRICE_MODES },
134
+ serviceStart: datum(true),
135
+ serviceEnd: datum(),
136
+ paymentTermDays: { typ: 'integer', pflicht: false, min: 0, max: 365 },
137
+ orderReference: text(200),
138
+ intro: text(2000),
139
+ note: text(2000),
140
+ paymentReference: text(140),
141
+ girocode: { typ: 'boolean', pflicht: false },
142
+ tracking: { typ: 'boolean', pflicht: false },
143
+ items: positionen,
144
+ metadata: { typ: 'map', pflicht: false, maxSchluessel: 20, schluesselMuster: '^[a-zA-Z0-9_]{1,40}$', wertMax: 500 },
145
+ },
146
+ cancelInvoice: {
147
+ idempotencyKey: idempotencyKey(true),
148
+ invoiceId: idPflicht,
149
+ reason: { typ: 'enum', pflicht: true, werte: CREDIT_NOTE_REASONS },
150
+ note: text(2000),
151
+ },
152
+ createCreditNote: {
153
+ idempotencyKey: idempotencyKey(true),
154
+ invoiceId: idPflicht,
155
+ reason: { typ: 'enum', pflicht: true, werte: CREDIT_NOTE_REASONS },
156
+ note: text(2000),
157
+ items: positionen,
158
+ },
159
+ getInvoice: {
160
+ invoiceId: id,
161
+ number: { typ: 'string', pflicht: false, min: 1, max: 100 },
162
+ },
163
+ listInvoices: {
164
+ from: datum(),
165
+ to: datum(),
166
+ status: { typ: 'enum', pflicht: false, werte: INVOICE_LIST_STATUS },
167
+ docType: { typ: 'enum', pflicht: false, werte: DOC_TYPES },
168
+ customerId: id,
169
+ limit,
170
+ cursor,
171
+ },
172
+ getInvoicePdf: {
173
+ invoiceId: idPflicht,
174
+ },
175
+ getInvoiceXml: {
176
+ invoiceId: idPflicht,
177
+ format: { typ: 'enum', pflicht: false, werte: EINVOICE_FORMATS },
178
+ },
179
+ });
180
+ /** Genau eines dieser Felder muss gesetzt sein (je Aufruf, je Gruppe). */
181
+ export const RECHNUNG_GENAU_EINS = Object.freeze({
182
+ getCustomer: [['customerId', 'externalId']],
183
+ getInvoice: [['invoiceId', 'number']],
184
+ });
185
+ /** Mindestens eines dieser Felder muss gesetzt sein (je Aufruf, je Gruppe). */
186
+ export const RECHNUNG_MINDESTENS_EINS = Object.freeze({
187
+ searchCustomers: [['externalId', 'vatId', 'email', 'name']],
188
+ });
@@ -0,0 +1,159 @@
1
+ {
2
+ "zeichen": 32,
3
+ "bloecke": [
4
+ {
5
+ "art": "logo",
6
+ "breiteAnteil": 0.62,
7
+ "hoeheZeilen": 3.968
8
+ },
9
+ {
10
+ "art": "zeile",
11
+ "text": " ",
12
+ "fett": false,
13
+ "leer": true
14
+ },
15
+ {
16
+ "art": "zeile",
17
+ "text": " Bäckerei Muster ",
18
+ "fett": true,
19
+ "leer": false
20
+ },
21
+ {
22
+ "art": "zeile",
23
+ "text": " Hauptplatz 1 ",
24
+ "fett": false,
25
+ "leer": false
26
+ },
27
+ {
28
+ "art": "zeile",
29
+ "text": " 4830 Hallstatt ",
30
+ "fett": false,
31
+ "leer": false
32
+ },
33
+ {
34
+ "art": "zeile",
35
+ "text": " ATU12345678 ",
36
+ "fett": false,
37
+ "leer": false
38
+ },
39
+ {
40
+ "art": "zeile",
41
+ "text": " +43 6134 12345 ",
42
+ "fett": false,
43
+ "leer": false
44
+ },
45
+ {
46
+ "art": "zeile",
47
+ "text": " ",
48
+ "fett": false,
49
+ "leer": true
50
+ },
51
+ {
52
+ "art": "zeile",
53
+ "text": "Datum: 13.08.2026 10:15:30",
54
+ "fett": false,
55
+ "leer": false
56
+ },
57
+ {
58
+ "art": "zeile",
59
+ "text": "Kassen-ID: KASSE1",
60
+ "fett": false,
61
+ "leer": false
62
+ },
63
+ {
64
+ "art": "zeile",
65
+ "text": "Beleg-ID: AT0-KASSE1-66",
66
+ "fett": false,
67
+ "leer": false
68
+ },
69
+ {
70
+ "art": "zeile",
71
+ "text": " ",
72
+ "fett": false,
73
+ "leer": true
74
+ },
75
+ {
76
+ "art": "zeile",
77
+ "text": "1 x Behandlung 120,00 A",
78
+ "fett": false,
79
+ "leer": false
80
+ },
81
+ {
82
+ "art": "zeile",
83
+ "text": " ",
84
+ "fett": false,
85
+ "leer": true
86
+ },
87
+ {
88
+ "art": "zeile",
89
+ "text": "MwSt% MwSt Netto Brutto",
90
+ "fett": false,
91
+ "leer": false
92
+ },
93
+ {
94
+ "art": "zeile",
95
+ "text": "A 20% 20,00 100,00 120,00",
96
+ "fett": false,
97
+ "leer": false
98
+ },
99
+ {
100
+ "art": "zeile",
101
+ "text": "--------------------------------",
102
+ "fett": false,
103
+ "leer": false
104
+ },
105
+ {
106
+ "art": "zeile",
107
+ "text": "Gesamt: 120,00 €",
108
+ "fett": false,
109
+ "leer": false
110
+ },
111
+ {
112
+ "art": "zeile",
113
+ "text": "Zahlungsart: Kartenzahlung",
114
+ "fett": false,
115
+ "leer": false
116
+ },
117
+ {
118
+ "art": "zeile",
119
+ "text": " ",
120
+ "fett": false,
121
+ "leer": true
122
+ },
123
+ {
124
+ "art": "qr",
125
+ "nutzlast": "_R1-AT1_KASSE1_AT0-KASSE1-66_2026-08-13T10:15:30_120,00_0,00_0,00_0,00_0,00_UMSATZ_VORGAENGER_6F0404F0_SIGNATUR",
126
+ "breiteAnteil": 0.828125
127
+ },
128
+ {
129
+ "art": "zeile",
130
+ "text": " ",
131
+ "fett": false,
132
+ "leer": true
133
+ },
134
+ {
135
+ "art": "zeile",
136
+ "text": " Vielen Dank für Ihren Einkauf ",
137
+ "fett": false,
138
+ "leer": false
139
+ },
140
+ {
141
+ "art": "zeile",
142
+ "text": " www.baeckerei-muster.at ",
143
+ "fett": false,
144
+ "leer": false
145
+ },
146
+ {
147
+ "art": "zeile",
148
+ "text": " ",
149
+ "fett": false,
150
+ "leer": true
151
+ },
152
+ {
153
+ "art": "zeile",
154
+ "text": " erstellt mit Kasseneck ",
155
+ "fett": false,
156
+ "leer": false
157
+ }
158
+ ]
159
+ }
@@ -0,0 +1,159 @@
1
+ {
2
+ "zeichen": 48,
3
+ "bloecke": [
4
+ {
5
+ "art": "logo",
6
+ "breiteAnteil": 0.5208333333333334,
7
+ "hoeheZeilen": 5
8
+ },
9
+ {
10
+ "art": "zeile",
11
+ "text": " ",
12
+ "fett": false,
13
+ "leer": true
14
+ },
15
+ {
16
+ "art": "zeile",
17
+ "text": " Bäckerei Muster ",
18
+ "fett": true,
19
+ "leer": false
20
+ },
21
+ {
22
+ "art": "zeile",
23
+ "text": " Hauptplatz 1 ",
24
+ "fett": false,
25
+ "leer": false
26
+ },
27
+ {
28
+ "art": "zeile",
29
+ "text": " 4830 Hallstatt ",
30
+ "fett": false,
31
+ "leer": false
32
+ },
33
+ {
34
+ "art": "zeile",
35
+ "text": " ATU12345678 ",
36
+ "fett": false,
37
+ "leer": false
38
+ },
39
+ {
40
+ "art": "zeile",
41
+ "text": " +43 6134 12345 ",
42
+ "fett": false,
43
+ "leer": false
44
+ },
45
+ {
46
+ "art": "zeile",
47
+ "text": " ",
48
+ "fett": false,
49
+ "leer": true
50
+ },
51
+ {
52
+ "art": "zeile",
53
+ "text": "Datum: 13.08.2026 10:15:30",
54
+ "fett": false,
55
+ "leer": false
56
+ },
57
+ {
58
+ "art": "zeile",
59
+ "text": "Kassen-ID: KASSE1",
60
+ "fett": false,
61
+ "leer": false
62
+ },
63
+ {
64
+ "art": "zeile",
65
+ "text": "Beleg-ID: AT0-KASSE1-66",
66
+ "fett": false,
67
+ "leer": false
68
+ },
69
+ {
70
+ "art": "zeile",
71
+ "text": " ",
72
+ "fett": false,
73
+ "leer": true
74
+ },
75
+ {
76
+ "art": "zeile",
77
+ "text": "1 x Behandlung 120,00 A",
78
+ "fett": false,
79
+ "leer": false
80
+ },
81
+ {
82
+ "art": "zeile",
83
+ "text": " ",
84
+ "fett": false,
85
+ "leer": true
86
+ },
87
+ {
88
+ "art": "zeile",
89
+ "text": "MwSt% MwSt Netto Brutto",
90
+ "fett": false,
91
+ "leer": false
92
+ },
93
+ {
94
+ "art": "zeile",
95
+ "text": "A 20% 20,00 100,00 120,00",
96
+ "fett": false,
97
+ "leer": false
98
+ },
99
+ {
100
+ "art": "zeile",
101
+ "text": "------------------------------------------------",
102
+ "fett": false,
103
+ "leer": false
104
+ },
105
+ {
106
+ "art": "zeile",
107
+ "text": "Gesamt: 120,00 €",
108
+ "fett": false,
109
+ "leer": false
110
+ },
111
+ {
112
+ "art": "zeile",
113
+ "text": "Zahlungsart: Kartenzahlung",
114
+ "fett": false,
115
+ "leer": false
116
+ },
117
+ {
118
+ "art": "zeile",
119
+ "text": " ",
120
+ "fett": false,
121
+ "leer": true
122
+ },
123
+ {
124
+ "art": "qr",
125
+ "nutzlast": "_R1-AT1_KASSE1_AT0-KASSE1-66_2026-08-13T10:15:30_120,00_0,00_0,00_0,00_0,00_UMSATZ_VORGAENGER_6F0404F0_SIGNATUR",
126
+ "breiteAnteil": 0.5520833333333334
127
+ },
128
+ {
129
+ "art": "zeile",
130
+ "text": " ",
131
+ "fett": false,
132
+ "leer": true
133
+ },
134
+ {
135
+ "art": "zeile",
136
+ "text": " Vielen Dank für Ihren Einkauf ",
137
+ "fett": false,
138
+ "leer": false
139
+ },
140
+ {
141
+ "art": "zeile",
142
+ "text": " www.baeckerei-muster.at ",
143
+ "fett": false,
144
+ "leer": false
145
+ },
146
+ {
147
+ "art": "zeile",
148
+ "text": " ",
149
+ "fett": false,
150
+ "leer": true
151
+ },
152
+ {
153
+ "art": "zeile",
154
+ "text": " erstellt mit Kasseneck ",
155
+ "fett": false,
156
+ "leer": false
157
+ }
158
+ ]
159
+ }