@kreiseck/kasseneck-api 0.31.0 → 1.0.0-rc.2

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 (712) hide show
  1. package/CHANGELOG.md +317 -0
  2. package/README.de.md +11 -7
  3. package/README.md +509 -126
  4. package/dist/cjs/client/api.d.ts +7 -6
  5. package/dist/cjs/client/api.js +2 -2
  6. package/dist/cjs/client/aufrufe.d.ts +29 -5
  7. package/dist/cjs/client/aufrufe.js +114 -2
  8. package/dist/cjs/client/auth.d.ts +2 -0
  9. package/dist/cjs/client/auth.js +17 -1
  10. package/dist/cjs/client/cashregisters.d.ts +1 -1
  11. package/dist/cjs/client/cashregisters.js +2 -2
  12. package/dist/cjs/client/errors.d.ts +94 -19
  13. package/dist/cjs/client/errors.js +132 -28
  14. package/dist/cjs/client/fehlercodes.d.ts +9 -0
  15. package/dist/cjs/client/fehlercodes.js +36 -0
  16. package/dist/cjs/client/index.d.ts +5 -5
  17. package/dist/cjs/client/index.js +11 -3
  18. package/dist/cjs/client/receipts.d.ts +131 -124
  19. package/dist/cjs/client/receipts.js +196 -137
  20. package/dist/cjs/client/reports.d.ts +26 -4
  21. package/dist/cjs/client/reports.js +37 -4
  22. package/dist/cjs/client/status.d.ts +3 -3
  23. package/dist/cjs/client/status.js +7 -7
  24. package/dist/cjs/client/transport.d.ts +56 -4
  25. package/dist/cjs/client/transport.js +234 -25
  26. package/dist/cjs/enums/vat-rate.d.ts +2 -2
  27. package/dist/cjs/enums/vat-rate.js +1 -1
  28. package/dist/cjs/index.d.ts +4 -3
  29. package/dist/cjs/index.js +42 -13
  30. package/dist/{esm/rechnung → cjs/invoice}/api.d.ts +18 -17
  31. package/dist/cjs/{rechnung → invoice}/api.js +6 -6
  32. package/dist/{esm/rechnung → cjs/invoice}/auth.d.ts +2 -2
  33. package/dist/cjs/{rechnung → invoice}/auth.js +5 -5
  34. package/dist/{esm/rechnung/rechnen.d.ts → cjs/invoice/calc.d.ts} +27 -27
  35. package/dist/cjs/{rechnung/rechnen.js → invoice/calc.js} +54 -54
  36. package/dist/{esm/rechnung → cjs/invoice}/endpunkte.d.ts +23 -21
  37. package/dist/cjs/{rechnung → invoice}/endpunkte.js +52 -42
  38. package/dist/cjs/invoice/fehler.d.ts +31 -0
  39. package/dist/cjs/invoice/fehler.js +39 -0
  40. package/dist/cjs/invoice/index.d.ts +21 -0
  41. package/dist/cjs/invoice/index.js +86 -0
  42. package/dist/cjs/{rechnung → invoice}/summen.d.ts +12 -12
  43. package/dist/cjs/{rechnung → invoice}/summen.js +14 -14
  44. package/dist/cjs/invoice/texte.d.ts +224 -0
  45. package/dist/cjs/invoice/texte.js +425 -0
  46. package/dist/{esm/rechnung → cjs/invoice}/typen.d.ts +32 -11
  47. package/dist/cjs/{rechnung → invoice}/vertrag.d.ts +97 -71
  48. package/dist/cjs/{rechnung → invoice}/vertrag.js +144 -82
  49. package/dist/cjs/models/cancellation.d.ts +43 -24
  50. package/dist/cjs/models/cancellation.js +94 -46
  51. package/dist/cjs/models/hobex-receipt.d.ts +3 -3
  52. package/dist/cjs/models/hobex-receipt.js +35 -35
  53. package/dist/cjs/models/index.d.ts +6 -5
  54. package/dist/cjs/models/index.js +22 -2
  55. package/dist/cjs/models/payment-errors.d.ts +32 -15
  56. package/dist/cjs/models/payment-errors.js +80 -32
  57. package/dist/cjs/models/receipt-company.d.ts +6 -5
  58. package/dist/cjs/models/receipt-company.js +4 -4
  59. package/dist/cjs/models/receipt-email.d.ts +32 -18
  60. package/dist/cjs/models/receipt-email.js +69 -24
  61. package/dist/cjs/models/receipt-errors.d.ts +39 -0
  62. package/dist/cjs/models/receipt-errors.js +94 -0
  63. package/dist/cjs/models/receipt-item.d.ts +9 -1
  64. package/dist/cjs/models/receipt-item.js +3 -0
  65. package/dist/cjs/models/receipt-summary.d.ts +10 -4
  66. package/dist/cjs/models/receipt-summary.js +10 -4
  67. package/dist/cjs/models/receipt.d.ts +31 -2
  68. package/dist/cjs/models/receipt.js +12 -1
  69. package/dist/cjs/models/voucher.d.ts +7 -6
  70. package/dist/cjs/models/voucher.js +2 -7
  71. package/dist/cjs/partner/ablauf.d.ts +10 -10
  72. package/dist/cjs/partner/ablauf.js +29 -29
  73. package/dist/cjs/partner/api.d.ts +26 -23
  74. package/dist/cjs/partner/api.js +11 -13
  75. package/dist/cjs/partner/auth.d.ts +1 -1
  76. package/dist/cjs/partner/auth.js +2 -2
  77. package/dist/cjs/partner/betrieb.d.ts +7 -7
  78. package/dist/cjs/partner/betrieb.js +10 -10
  79. package/dist/cjs/partner/endpunkte.d.ts +27 -14
  80. package/dist/cjs/partner/endpunkte.js +80 -39
  81. package/dist/cjs/partner/fehler.d.ts +60 -30
  82. package/dist/cjs/partner/fehler.js +99 -43
  83. package/dist/cjs/partner/index.d.ts +13 -12
  84. package/dist/cjs/partner/index.js +35 -22
  85. package/dist/cjs/partner/secret.d.ts +3 -3
  86. package/dist/cjs/partner/secret.js +6 -6
  87. package/dist/cjs/partner/typen.d.ts +129 -71
  88. package/dist/cjs/partner/typen.js +76 -3
  89. package/dist/cjs/partner/webhook-signatur.d.ts +2 -2
  90. package/dist/cjs/partner/webhook-signatur.js +12 -12
  91. package/dist/cjs/partner/webhooks.d.ts +60 -32
  92. package/dist/cjs/partner/webhooks.js +40 -34
  93. package/dist/cjs/payments/hobex.d.ts +11 -3
  94. package/dist/cjs/payments/hobex.js +17 -5
  95. package/dist/cjs/payments/stripe.d.ts +5 -2
  96. package/dist/cjs/payments/stripe.js +10 -5
  97. package/dist/cjs/pos/artikel.d.ts +90 -0
  98. package/dist/cjs/pos/artikel.js +89 -0
  99. package/dist/cjs/pos/client.d.ts +27 -0
  100. package/dist/cjs/pos/client.js +144 -0
  101. package/dist/cjs/pos/drucker.d.ts +86 -0
  102. package/dist/cjs/pos/drucker.js +78 -0
  103. package/dist/cjs/pos/errors.d.ts +36 -0
  104. package/dist/cjs/pos/errors.js +95 -0
  105. package/dist/cjs/pos/index.d.ts +15 -0
  106. package/dist/cjs/pos/index.js +102 -0
  107. package/dist/cjs/pos/settings.d.ts +313 -0
  108. package/dist/cjs/pos/settings.js +376 -0
  109. package/dist/cjs/pos/texte.d.ts +883 -0
  110. package/dist/cjs/pos/texte.js +489 -0
  111. package/dist/cjs/{kasse → pos}/trinkgeld.d.ts +1 -1
  112. package/dist/cjs/{kasse → pos}/trinkgeld.js +2 -2
  113. package/dist/cjs/printing/escpos.d.ts +29 -29
  114. package/dist/cjs/printing/escpos.js +61 -61
  115. package/dist/cjs/printing/index.d.ts +2 -2
  116. package/dist/cjs/printing/index.js +17 -17
  117. package/dist/cjs/printing/qr-groesse.d.ts +38 -38
  118. package/dist/cjs/printing/qr-groesse.js +47 -47
  119. package/dist/cjs/printing/webusb.d.ts +2 -2
  120. package/dist/cjs/printing/webusb.js +4 -4
  121. package/dist/cjs/react/index.d.ts +21 -21
  122. package/dist/cjs/react/index.js +40 -30
  123. package/dist/cjs/receipt/bild.d.ts +4 -4
  124. package/dist/cjs/receipt/bild.js +11 -11
  125. package/dist/cjs/receipt/blatt.d.ts +46 -46
  126. package/dist/cjs/receipt/blatt.js +59 -59
  127. package/dist/cjs/receipt/discount.d.ts +1 -1
  128. package/dist/cjs/receipt/discount.js +8 -8
  129. package/dist/cjs/receipt/due.d.ts +86 -0
  130. package/dist/cjs/receipt/due.js +261 -0
  131. package/dist/cjs/receipt/epos.d.ts +22 -22
  132. package/dist/cjs/receipt/epos.js +45 -45
  133. package/dist/cjs/receipt/grid.d.ts +10 -10
  134. package/dist/cjs/receipt/grid.js +20 -20
  135. package/dist/cjs/receipt/index.d.ts +9 -8
  136. package/dist/cjs/receipt/index.js +26 -23
  137. package/dist/cjs/receipt/layout-escpos.d.ts +24 -24
  138. package/dist/cjs/receipt/layout-escpos.js +49 -49
  139. package/dist/cjs/receipt/layout.d.ts +28 -23
  140. package/dist/cjs/receipt/layout.js +45 -21
  141. package/dist/cjs/receipt/marke-daten.d.ts +8 -8
  142. package/dist/cjs/receipt/marke-daten.js +8 -8
  143. package/dist/cjs/receipt/marke.d.ts +7 -7
  144. package/dist/cjs/receipt/marke.js +10 -10
  145. package/dist/cjs/register/errors.d.ts +61 -0
  146. package/dist/cjs/register/errors.js +112 -0
  147. package/dist/cjs/register/index.d.ts +14 -1
  148. package/dist/cjs/register/index.js +20 -1
  149. package/dist/cjs/register/pairing.d.ts +55 -36
  150. package/dist/cjs/register/pairing.js +33 -29
  151. package/dist/cjs/register/session.d.ts +5 -5
  152. package/dist/cjs/register/session.js +7 -7
  153. package/dist/cjs/stored/draht.d.ts +45 -0
  154. package/dist/cjs/stored/draht.js +220 -0
  155. package/dist/cjs/stored/einstellungen.d.ts +23 -0
  156. package/dist/cjs/stored/einstellungen.js +200 -0
  157. package/dist/cjs/stored/index.d.ts +109 -0
  158. package/dist/cjs/stored/index.js +225 -0
  159. package/dist/cjs/stored/vokabular.d.ts +18 -0
  160. package/dist/cjs/stored/vokabular.js +389 -0
  161. package/dist/cjs/version.d.ts +7 -0
  162. package/dist/cjs/version.js +10 -0
  163. package/dist/cjs/vienna-time.d.ts +1 -1
  164. package/dist/cjs/vienna-time.js +2 -2
  165. package/dist/esm/client/api.d.ts +7 -6
  166. package/dist/esm/client/api.js +4 -4
  167. package/dist/esm/client/aufrufe.d.ts +29 -5
  168. package/dist/esm/client/aufrufe.js +111 -1
  169. package/dist/esm/client/auth.d.ts +2 -0
  170. package/dist/esm/client/auth.js +16 -1
  171. package/dist/esm/client/cashregisters.d.ts +1 -1
  172. package/dist/esm/client/cashregisters.js +2 -2
  173. package/dist/esm/client/errors.d.ts +94 -19
  174. package/dist/esm/client/errors.js +129 -27
  175. package/dist/esm/client/fehlercodes.d.ts +9 -0
  176. package/dist/esm/client/fehlercodes.js +32 -0
  177. package/dist/esm/client/index.d.ts +5 -5
  178. package/dist/esm/client/index.js +5 -5
  179. package/dist/esm/client/receipts.d.ts +131 -124
  180. package/dist/esm/client/receipts.js +195 -140
  181. package/dist/esm/client/reports.d.ts +26 -4
  182. package/dist/esm/client/reports.js +36 -4
  183. package/dist/esm/client/status.d.ts +3 -3
  184. package/dist/esm/client/status.js +7 -7
  185. package/dist/esm/client/transport.d.ts +56 -4
  186. package/dist/esm/client/transport.js +233 -24
  187. package/dist/esm/enums/vat-rate.d.ts +2 -2
  188. package/dist/esm/enums/vat-rate.js +1 -1
  189. package/dist/esm/index.d.ts +4 -3
  190. package/dist/esm/index.js +4 -3
  191. package/dist/{cjs/rechnung → esm/invoice}/api.d.ts +18 -17
  192. package/dist/esm/{rechnung → invoice}/api.js +6 -6
  193. package/dist/{cjs/rechnung → esm/invoice}/auth.d.ts +2 -2
  194. package/dist/esm/{rechnung → invoice}/auth.js +4 -4
  195. package/dist/{cjs/rechnung/rechnen.d.ts → esm/invoice/calc.d.ts} +27 -27
  196. package/dist/esm/{rechnung/rechnen.js → invoice/calc.js} +45 -45
  197. package/dist/{cjs/rechnung → esm/invoice}/endpunkte.d.ts +23 -21
  198. package/dist/esm/{rechnung → invoice}/endpunkte.js +52 -42
  199. package/dist/esm/invoice/fehler.d.ts +31 -0
  200. package/dist/esm/invoice/fehler.js +33 -0
  201. package/dist/esm/invoice/index.d.ts +21 -0
  202. package/dist/esm/invoice/index.js +20 -0
  203. package/dist/esm/{rechnung → invoice}/summen.d.ts +12 -12
  204. package/dist/esm/{rechnung → invoice}/summen.js +12 -12
  205. package/dist/esm/invoice/texte.d.ts +224 -0
  206. package/dist/esm/invoice/texte.js +421 -0
  207. package/dist/{cjs/rechnung → esm/invoice}/typen.d.ts +32 -11
  208. package/dist/esm/{rechnung → invoice}/vertrag.d.ts +97 -71
  209. package/dist/esm/{rechnung → invoice}/vertrag.js +143 -81
  210. package/dist/esm/models/cancellation.d.ts +43 -24
  211. package/dist/esm/models/cancellation.js +90 -45
  212. package/dist/esm/models/hobex-receipt.d.ts +3 -3
  213. package/dist/esm/models/hobex-receipt.js +35 -35
  214. package/dist/esm/models/index.d.ts +6 -5
  215. package/dist/esm/models/index.js +6 -5
  216. package/dist/esm/models/payment-errors.d.ts +32 -15
  217. package/dist/esm/models/payment-errors.js +77 -32
  218. package/dist/esm/models/receipt-company.d.ts +6 -5
  219. package/dist/esm/models/receipt-company.js +4 -4
  220. package/dist/esm/models/receipt-email.d.ts +32 -18
  221. package/dist/esm/models/receipt-email.js +65 -23
  222. package/dist/esm/models/receipt-errors.d.ts +39 -0
  223. package/dist/esm/models/receipt-errors.js +87 -0
  224. package/dist/esm/models/receipt-item.d.ts +9 -1
  225. package/dist/esm/models/receipt-item.js +3 -0
  226. package/dist/esm/models/receipt-summary.d.ts +10 -4
  227. package/dist/esm/models/receipt-summary.js +9 -3
  228. package/dist/esm/models/receipt.d.ts +31 -2
  229. package/dist/esm/models/receipt.js +12 -2
  230. package/dist/esm/models/voucher.d.ts +7 -6
  231. package/dist/esm/models/voucher.js +2 -7
  232. package/dist/esm/partner/ablauf.d.ts +10 -10
  233. package/dist/esm/partner/ablauf.js +27 -27
  234. package/dist/esm/partner/api.d.ts +26 -23
  235. package/dist/esm/partner/api.js +13 -15
  236. package/dist/esm/partner/auth.d.ts +1 -1
  237. package/dist/esm/partner/auth.js +2 -2
  238. package/dist/esm/partner/betrieb.d.ts +7 -7
  239. package/dist/esm/partner/betrieb.js +8 -8
  240. package/dist/esm/partner/endpunkte.d.ts +27 -14
  241. package/dist/esm/partner/endpunkte.js +79 -39
  242. package/dist/esm/partner/fehler.d.ts +60 -30
  243. package/dist/esm/partner/fehler.js +91 -35
  244. package/dist/esm/partner/index.d.ts +13 -12
  245. package/dist/esm/partner/index.js +12 -11
  246. package/dist/esm/partner/secret.d.ts +3 -3
  247. package/dist/esm/partner/secret.js +5 -5
  248. package/dist/esm/partner/typen.d.ts +129 -71
  249. package/dist/esm/partner/typen.js +75 -2
  250. package/dist/esm/partner/webhook-signatur.d.ts +2 -2
  251. package/dist/esm/partner/webhook-signatur.js +12 -12
  252. package/dist/esm/partner/webhooks.d.ts +60 -32
  253. package/dist/esm/partner/webhooks.js +38 -32
  254. package/dist/esm/payments/hobex.d.ts +11 -3
  255. package/dist/esm/payments/hobex.js +18 -6
  256. package/dist/esm/payments/stripe.d.ts +5 -2
  257. package/dist/esm/payments/stripe.js +11 -6
  258. package/dist/esm/pos/artikel.d.ts +90 -0
  259. package/dist/esm/pos/artikel.js +79 -0
  260. package/dist/esm/pos/client.d.ts +27 -0
  261. package/dist/esm/pos/client.js +137 -0
  262. package/dist/esm/pos/drucker.d.ts +86 -0
  263. package/dist/esm/pos/drucker.js +71 -0
  264. package/dist/esm/pos/errors.d.ts +36 -0
  265. package/dist/esm/pos/errors.js +88 -0
  266. package/dist/esm/pos/index.d.ts +15 -0
  267. package/dist/esm/pos/index.js +20 -0
  268. package/dist/esm/pos/settings.d.ts +313 -0
  269. package/dist/esm/pos/settings.js +367 -0
  270. package/dist/esm/pos/texte.d.ts +883 -0
  271. package/dist/esm/pos/texte.js +481 -0
  272. package/dist/esm/{kasse → pos}/trinkgeld.d.ts +1 -1
  273. package/dist/esm/{kasse → pos}/trinkgeld.js +2 -2
  274. package/dist/esm/printing/escpos.d.ts +29 -29
  275. package/dist/esm/printing/escpos.js +56 -56
  276. package/dist/esm/printing/index.d.ts +2 -2
  277. package/dist/esm/printing/index.js +2 -2
  278. package/dist/esm/printing/qr-groesse.d.ts +38 -38
  279. package/dist/esm/printing/qr-groesse.js +42 -42
  280. package/dist/esm/printing/webusb.d.ts +2 -2
  281. package/dist/esm/printing/webusb.js +4 -4
  282. package/dist/esm/react/index.d.ts +21 -21
  283. package/dist/esm/react/index.js +39 -29
  284. package/dist/esm/receipt/bild.d.ts +4 -4
  285. package/dist/esm/receipt/bild.js +11 -11
  286. package/dist/esm/receipt/blatt.d.ts +46 -46
  287. package/dist/esm/receipt/blatt.js +55 -55
  288. package/dist/esm/receipt/discount.d.ts +1 -1
  289. package/dist/esm/receipt/discount.js +7 -7
  290. package/dist/esm/receipt/due.d.ts +86 -0
  291. package/dist/esm/receipt/due.js +257 -0
  292. package/dist/esm/receipt/epos.d.ts +22 -22
  293. package/dist/esm/receipt/epos.js +47 -47
  294. package/dist/esm/receipt/grid.d.ts +10 -10
  295. package/dist/esm/receipt/grid.js +18 -18
  296. package/dist/esm/receipt/index.d.ts +9 -8
  297. package/dist/esm/receipt/index.js +9 -8
  298. package/dist/esm/receipt/layout-escpos.d.ts +24 -24
  299. package/dist/esm/receipt/layout-escpos.js +51 -51
  300. package/dist/esm/receipt/layout.d.ts +28 -23
  301. package/dist/esm/receipt/layout.js +44 -20
  302. package/dist/esm/receipt/marke-daten.d.ts +8 -8
  303. package/dist/esm/receipt/marke-daten.js +7 -7
  304. package/dist/esm/receipt/marke.d.ts +7 -7
  305. package/dist/esm/receipt/marke.js +10 -10
  306. package/dist/esm/register/errors.d.ts +61 -0
  307. package/dist/esm/register/errors.js +104 -0
  308. package/dist/esm/register/index.d.ts +14 -1
  309. package/dist/esm/register/index.js +13 -0
  310. package/dist/esm/register/pairing.d.ts +55 -36
  311. package/dist/esm/register/pairing.js +33 -29
  312. package/dist/esm/register/session.d.ts +5 -5
  313. package/dist/esm/register/session.js +7 -7
  314. package/dist/esm/stored/draht.d.ts +45 -0
  315. package/dist/esm/stored/draht.js +208 -0
  316. package/dist/esm/stored/einstellungen.d.ts +23 -0
  317. package/dist/esm/stored/einstellungen.js +196 -0
  318. package/dist/esm/stored/index.d.ts +109 -0
  319. package/dist/esm/stored/index.js +217 -0
  320. package/dist/esm/stored/vokabular.d.ts +18 -0
  321. package/dist/esm/stored/vokabular.js +386 -0
  322. package/dist/esm/version.d.ts +7 -0
  323. package/dist/esm/version.js +7 -0
  324. package/dist/esm/vienna-time.d.ts +1 -1
  325. package/dist/esm/vienna-time.js +2 -2
  326. package/fixtures/{erwartet/storno-rabatt.lines.json → expected/cancellation-discount.lines.json} +2 -2
  327. package/fixtures/expected/cancellation-discount.sheet32.json +248 -0
  328. package/fixtures/{erwartet/storno-rabatt.blatt48.json → expected/cancellation-discount.sheet48.json} +119 -119
  329. package/fixtures/{erwartet/storno-voll.lines.json → expected/cancellation-full.lines.json} +2 -2
  330. package/fixtures/expected/cancellation-full.sheet32.json +218 -0
  331. package/fixtures/{erwartet/storno-voll.blatt48.json → expected/cancellation-full.sheet48.json} +107 -107
  332. package/fixtures/{erwartet/storno-teil.lines.json → expected/cancellation-partial.lines.json} +2 -2
  333. package/fixtures/expected/cancellation-partial.sheet32.json +206 -0
  334. package/fixtures/{erwartet/storno-teil.blatt48.json → expected/cancellation-partial.sheet48.json} +101 -101
  335. package/fixtures/{erwartet/storno-split-voll.lines.json → expected/cancellation-split-full.lines.json} +2 -2
  336. package/fixtures/expected/cancellation-split-full.sheet32.json +320 -0
  337. package/fixtures/{erwartet/storno-split-voll.blatt48.json → expected/cancellation-split-full.sheet48.json} +158 -158
  338. package/fixtures/{erwartet/storno-split-teil.lines.json → expected/cancellation-split-partial.lines.json} +2 -2
  339. package/fixtures/expected/cancellation-split-partial.sheet32.json +230 -0
  340. package/fixtures/{erwartet/storno-split-teil.blatt48.json → expected/cancellation-split-partial.sheet48.json} +113 -113
  341. package/fixtures/{erwartet/karte-eigener.lines.json → expected/card-custom.lines.json} +1 -1
  342. package/fixtures/expected/card-custom.sheet32.json +158 -0
  343. package/fixtures/{erwartet/karte-eigener.blatt48.json → expected/card-custom.sheet48.json} +80 -80
  344. package/fixtures/{erwartet/karte-gptom-ios.lines.json → expected/card-gptom-ios.lines.json} +1 -1
  345. package/fixtures/expected/card-gptom-ios.sheet32.json +230 -0
  346. package/fixtures/{erwartet/karte-gptom-ios.blatt48.json → expected/card-gptom-ios.sheet48.json} +116 -116
  347. package/fixtures/{erwartet/karte-gptom.lines.json → expected/card-gptom.lines.json} +1 -1
  348. package/fixtures/expected/card-gptom.sheet32.json +230 -0
  349. package/fixtures/{erwartet/karte-gptom.blatt48.json → expected/card-gptom.sheet48.json} +116 -116
  350. package/fixtures/{erwartet/karte-hobex-cloud.lines.json → expected/card-hobex-cloud.lines.json} +1 -1
  351. package/fixtures/expected/card-hobex-cloud.sheet32.json +200 -0
  352. package/fixtures/{erwartet/karte-hobex-cloud.blatt48.json → expected/card-hobex-cloud.sheet48.json} +101 -101
  353. package/fixtures/{erwartet/karte-hobex-hps.lines.json → expected/card-hobex-hps.lines.json} +1 -1
  354. package/fixtures/expected/card-hobex-hps.sheet32.json +224 -0
  355. package/fixtures/{erwartet/karte-hobex-hps.blatt48.json → expected/card-hobex-hps.sheet48.json} +113 -113
  356. package/fixtures/{erwartet/karte-mypos.lines.json → expected/card-mypos.lines.json} +1 -1
  357. package/fixtures/expected/card-mypos.sheet32.json +254 -0
  358. package/fixtures/{erwartet/karte-mypos.blatt48.json → expected/card-mypos.sheet48.json} +122 -122
  359. package/fixtures/{erwartet/karte-stripe-eps.lines.json → expected/card-stripe-eps.lines.json} +1 -1
  360. package/fixtures/expected/card-stripe-eps.sheet32.json +194 -0
  361. package/fixtures/{erwartet/karte-stripe-eps.blatt48.json → expected/card-stripe-eps.sheet48.json} +98 -98
  362. package/fixtures/{erwartet/karte-stripe.lines.json → expected/card-stripe.lines.json} +1 -1
  363. package/fixtures/expected/card-stripe.sheet32.json +212 -0
  364. package/fixtures/{erwartet/karte-stripe.blatt48.json → expected/card-stripe.sheet48.json} +107 -107
  365. package/fixtures/{erwartet/karte-sumup.lines.json → expected/card-sumup.lines.json} +1 -1
  366. package/fixtures/expected/card-sumup.sheet32.json +218 -0
  367. package/fixtures/{erwartet/karte-sumup.blatt48.json → expected/card-sumup.sheet48.json} +104 -104
  368. package/fixtures/{erwartet/rabattzeilen.lines.json → expected/discount-lines.lines.json} +1 -1
  369. package/fixtures/expected/discount-lines.sheet32.json +200 -0
  370. package/fixtures/{erwartet/rabattzeilen.blatt48.json → expected/discount-lines.sheet48.json} +98 -98
  371. package/fixtures/{erwartet/rabatt-chef-trinkgeld.lines.json → expected/discount-owner-tip.lines.json} +1 -1
  372. package/fixtures/expected/discount-owner-tip.sheet32.json +212 -0
  373. package/fixtures/{erwartet/rabatt-chef-trinkgeld.blatt48.json → expected/discount-owner-tip.sheet48.json} +104 -104
  374. package/fixtures/{erwartet/rabatt-einfach.lines.json → expected/discount-simple.lines.json} +1 -1
  375. package/fixtures/expected/discount-simple.sheet32.json +182 -0
  376. package/fixtures/{erwartet/rabatt-einfach.blatt48.json → expected/discount-simple.sheet48.json} +89 -89
  377. package/fixtures/{erwartet/rabatt-trinkgeld.lines.json → expected/discount-tip.lines.json} +1 -1
  378. package/fixtures/expected/discount-tip.sheet32.json +212 -0
  379. package/fixtures/{erwartet/rabatt-trinkgeld.blatt48.json → expected/discount-tip.sheet48.json} +104 -104
  380. package/fixtures/{erwartet/rabatt-wertgutschein.lines.json → expected/discount-value-voucher.lines.json} +1 -1
  381. package/fixtures/expected/discount-value-voucher.sheet32.json +218 -0
  382. package/fixtures/{erwartet/rabatt-wertgutschein.blatt48.json → expected/discount-value-voucher.sheet48.json} +107 -107
  383. package/fixtures/{erwartet/langer-artikelname.lines.json → expected/long-item-name.lines.json} +1 -1
  384. package/fixtures/expected/long-item-name.sheet32.json +176 -0
  385. package/fixtures/{erwartet/langer-artikelname.blatt48.json → expected/long-item-name.sheet48.json} +86 -86
  386. package/fixtures/{erwartet/verkauf-karte.lines.json → expected/sale-card.lines.json} +1 -1
  387. package/fixtures/expected/sale-card.sheet32.json +176 -0
  388. package/fixtures/{erwartet/verkauf-karte.blatt48.json → expected/sale-card.sheet48.json} +86 -86
  389. package/fixtures/{erwartet/verkauf-bar.lines.json → expected/sale-cash.lines.json} +1 -1
  390. package/fixtures/expected/sale-cash.sheet32.json +176 -0
  391. package/fixtures/{erwartet/verkauf-bar.blatt48.json → expected/sale-cash.sheet48.json} +86 -86
  392. package/fixtures/{erwartet/verkauf-kleinunternehmer.lines.json → expected/sale-small-business.lines.json} +1 -1
  393. package/fixtures/expected/sale-small-business.sheet32.json +182 -0
  394. package/fixtures/{erwartet/verkauf-kleinunternehmer.blatt48.json → expected/sale-small-business.sheet48.json} +89 -89
  395. package/fixtures/{erwartet/signaturausfall-verkauf.lines.json → expected/signature-outage-sale.lines.json} +1 -1
  396. package/fixtures/expected/signature-outage-sale.sheet32.json +194 -0
  397. package/fixtures/{erwartet/signaturausfall-verkauf.blatt48.json → expected/signature-outage-sale.sheet48.json} +92 -92
  398. package/fixtures/{erwartet/split-karte-karte-bar.lines.json → expected/split-card-card-cash.lines.json} +1 -1
  399. package/fixtures/expected/split-card-card-cash.sheet32.json +356 -0
  400. package/fixtures/{erwartet/split-karte-karte-bar.blatt48.json → expected/split-card-card-cash.sheet48.json} +170 -170
  401. package/fixtures/{erwartet/split-bar-rueckgeld.lines.json → expected/split-cash-change.lines.json} +1 -1
  402. package/fixtures/expected/split-cash-change.sheet32.json +194 -0
  403. package/fixtures/{erwartet/split-bar-rueckgeld.blatt48.json → expected/split-cash-change.sheet48.json} +92 -92
  404. package/fixtures/{erwartet/split-langer-betrag.lines.json → expected/split-long-amount.lines.json} +1 -1
  405. package/fixtures/expected/split-long-amount.sheet32.json +266 -0
  406. package/fixtures/{erwartet/split-langer-betrag.blatt48.json → expected/split-long-amount.sheet48.json} +131 -131
  407. package/fixtures/{erwartet/split-eine-karte-trinkgeld.lines.json → expected/split-one-card-tip.lines.json} +1 -1
  408. package/fixtures/expected/split-one-card-tip.sheet32.json +242 -0
  409. package/fixtures/{erwartet/split-eine-karte-trinkgeld.blatt48.json → expected/split-one-card-tip.sheet48.json} +113 -113
  410. package/fixtures/{erwartet/split-tischrunde-trinkgeld.lines.json → expected/split-table-round-tip.lines.json} +1 -1
  411. package/fixtures/expected/split-table-round-tip.sheet32.json +470 -0
  412. package/fixtures/{erwartet/split-tischrunde-trinkgeld.blatt48.json → expected/split-table-round-tip.sheet48.json} +218 -218
  413. package/fixtures/{erwartet/split-trinkgeld-karte.lines.json → expected/split-tip-card.lines.json} +1 -1
  414. package/fixtures/expected/split-tip-card.sheet32.json +272 -0
  415. package/fixtures/{erwartet/split-trinkgeld-karte.blatt48.json → expected/split-tip-card.sheet48.json} +128 -128
  416. package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.lines.json → expected/split-two-cards-same-provider.lines.json} +1 -1
  417. package/fixtures/expected/split-two-cards-same-provider.sheet32.json +326 -0
  418. package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.blatt48.json → expected/split-two-cards-same-provider.sheet48.json} +149 -149
  419. package/fixtures/{erwartet/testkasse-verkauf.lines.json → expected/test-cashregister-sale.lines.json} +3 -3
  420. package/fixtures/expected/test-cashregister-sale.sheet32.json +224 -0
  421. package/fixtures/{erwartet/testkasse-verkauf.blatt48.json → expected/test-cashregister-sale.sheet48.json} +110 -110
  422. package/fixtures/{erwartet/testsignatur-verkauf.lines.json → expected/test-signature-sale.lines.json} +3 -3
  423. package/fixtures/expected/test-signature-sale.sheet32.json +236 -0
  424. package/fixtures/{erwartet/testsignatur-verkauf.blatt48.json → expected/test-signature-sale.sheet48.json} +110 -110
  425. package/fixtures/{erwartet → expected}/training.lines.json +2 -2
  426. package/fixtures/expected/training.sheet32.json +236 -0
  427. package/fixtures/{erwartet/training.blatt48.json → expected/training.sheet48.json} +110 -110
  428. package/fixtures/{erwartet/null-jahr.lines.json → expected/zero-annual.lines.json} +2 -2
  429. package/fixtures/expected/zero-annual.sheet32.json +212 -0
  430. package/fixtures/{erwartet/null-jahr.blatt48.json → expected/zero-annual.sheet48.json} +95 -95
  431. package/fixtures/{erwartet/null-schluss.lines.json → expected/zero-final.lines.json} +2 -2
  432. package/fixtures/expected/zero-final.sheet32.json +206 -0
  433. package/fixtures/{erwartet/null-schluss.blatt48.json → expected/zero-final.sheet48.json} +95 -95
  434. package/fixtures/{erwartet/null-pruef.lines.json → expected/zero-manual.lines.json} +2 -2
  435. package/fixtures/expected/zero-manual.sheet32.json +206 -0
  436. package/fixtures/{erwartet/null-pruef.blatt48.json → expected/zero-manual.sheet48.json} +95 -95
  437. package/fixtures/{erwartet/null-monat.lines.json → expected/zero-monthly.lines.json} +2 -2
  438. package/fixtures/expected/zero-monthly.sheet32.json +206 -0
  439. package/fixtures/{erwartet/null-monat.blatt48.json → expected/zero-monthly.sheet48.json} +95 -95
  440. package/fixtures/{erwartet/null-ausfall.lines.json → expected/zero-outage-end.lines.json} +2 -2
  441. package/fixtures/expected/zero-outage-end.sheet32.json +206 -0
  442. package/fixtures/{erwartet/null-ausfall.blatt48.json → expected/zero-outage-end.sheet48.json} +95 -95
  443. package/fixtures/{erwartet/null-start.lines.json → expected/zero-start.lines.json} +2 -2
  444. package/fixtures/expected/zero-start.sheet32.json +206 -0
  445. package/fixtures/{erwartet/null-start.blatt48.json → expected/zero-start.sheet48.json} +95 -95
  446. package/fixtures/hobex-hps-codes.json +12 -12
  447. package/fixtures/invoice-api-examples/brands-ok.json +8 -0
  448. package/fixtures/{rechnung-api-beispiele/credit-fehler-grund.json → invoice-api-examples/credit-error-reason.json} +6 -6
  449. package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/credit-ok.json +6 -6
  450. package/fixtures/{rechnung-api-beispiele/customer-fehler-uid.json → invoice-api-examples/customer-error-vat-id.json} +4 -4
  451. package/fixtures/invoice-api-examples/customer-get-error-both.json +15 -0
  452. package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/customer-ok.json +4 -4
  453. package/fixtures/{rechnung-api-beispiele/customer-search-fehler-leer.json → invoice-api-examples/customer-search-error-empty.json} +4 -4
  454. package/fixtures/{rechnung-api-beispiele/issue-rabatt.json → invoice-api-examples/issue-discount.json} +6 -6
  455. package/fixtures/{rechnung-api-beispiele/issue-englisch.json → invoice-api-examples/issue-english.json} +7 -7
  456. package/fixtures/{rechnung-api-beispiele/issue-fehler-cent.json → invoice-api-examples/issue-error-cent.json} +6 -6
  457. package/fixtures/{rechnung-api-beispiele/issue-fehler-sprache.json → invoice-api-examples/issue-error-language.json} +5 -5
  458. package/fixtures/{rechnung-api-beispiele/issue-fehler-negativ.json → invoice-api-examples/issue-error-negative.json} +6 -6
  459. package/fixtures/{rechnung-api-beispiele/issue-fehler-zahlungsart.json → invoice-api-examples/issue-error-payment-method.json} +8 -6
  460. package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-beide.json → invoice-api-examples/issue-error-price-both.json} +6 -6
  461. package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-fehlt.json → invoice-api-examples/issue-error-price-missing.json} +6 -6
  462. package/fixtures/{rechnung-api-beispiele/issue-fehler-menge.json → invoice-api-examples/issue-error-quantity.json} +6 -6
  463. package/fixtures/{rechnung-api-beispiele/issue-fehler-satz.json → invoice-api-examples/issue-error-rate.json} +6 -6
  464. package/fixtures/{rechnung-api-beispiele/issue-fehler-einheit.json → invoice-api-examples/issue-error-unit.json} +5 -5
  465. package/fixtures/{rechnung-api-beispiele/issue-fehler-unbekannt.json → invoice-api-examples/issue-error-unknown.json} +6 -6
  466. package/fixtures/{rechnung-api-beispiele/issue-brutto-20.json → invoice-api-examples/issue-gross-20.json} +6 -6
  467. package/fixtures/{rechnung-api-beispiele/issue-mikropreis.json → invoice-api-examples/issue-micro-price.json} +6 -6
  468. package/fixtures/{rechnung-api-beispiele/issue-gemischt.json → invoice-api-examples/issue-mixed.json} +6 -6
  469. package/fixtures/{rechnung-api-beispiele/issue-netto-20.json → invoice-api-examples/issue-net-20.json} +6 -6
  470. package/fixtures/{rechnung-api-beispiele/issue-bezahlt.json → invoice-api-examples/issue-paid.json} +7 -7
  471. package/fixtures/{rechnung-api-beispiele/issue-kleinunternehmer.json → invoice-api-examples/issue-small-business.json} +6 -6
  472. package/fixtures/invoice-api-examples/payment-error-on-site.json +17 -0
  473. package/fixtures/invoice-api-examples/payment-error-without-key.json +16 -0
  474. package/fixtures/invoice-api-examples/payment-recorded-later.json +14 -0
  475. package/fixtures/{rechnung-api-beispiele/setup-status-fehler-feld.json → invoice-api-examples/setup-status-error-field.json} +4 -4
  476. package/fixtures/invoice-api-examples/setup-status-ok.json +8 -0
  477. package/fixtures/{rechnung-api.schema.json → invoice-api.schema.json} +24 -24
  478. package/fixtures/{rechnung-rechnen-zufall.json → invoice-calc-random.json} +828 -828
  479. package/fixtures/{rechnung-rechnen.json → invoice-calc.json} +47 -47
  480. package/fixtures/invoice-texts.json +464 -0
  481. package/fixtures/{rechnung-summen.json → invoice-totals.json} +25 -25
  482. package/fixtures/{position-aus-euro.json → item-from-euro.json} +26 -26
  483. package/fixtures/manifest.json +252 -252
  484. package/fixtures/pos-message-cases.json +32 -0
  485. package/fixtures/pos-settings-defaults.json +149 -0
  486. package/fixtures/{kasse-texte.json → pos-texts.json} +416 -416
  487. package/fixtures/receipt-due-generated.json +1218 -0
  488. package/fixtures/{belege/storno-rabatt.json → receipts/cancellation-discount.json} +3 -3
  489. package/fixtures/{belege/storno-voll.json → receipts/cancellation-full.json} +3 -3
  490. package/fixtures/{belege/storno-teil.json → receipts/cancellation-partial.json} +3 -3
  491. package/fixtures/{belege/storno-split-voll.json → receipts/cancellation-split-full.json} +3 -3
  492. package/fixtures/{belege/storno-split-teil.json → receipts/cancellation-split-partial.json} +3 -3
  493. package/fixtures/{belege/karte-eigener.json → receipts/card-custom.json} +2 -2
  494. package/fixtures/{belege/karte-gptom-ios.json → receipts/card-gptom-ios.json} +2 -2
  495. package/fixtures/{belege/karte-gptom.json → receipts/card-gptom.json} +2 -2
  496. package/fixtures/{belege/karte-hobex-cloud.json → receipts/card-hobex-cloud.json} +2 -2
  497. package/fixtures/{belege/karte-hobex-hps.json → receipts/card-hobex-hps.json} +2 -2
  498. package/fixtures/{belege/karte-mypos.json → receipts/card-mypos.json} +2 -2
  499. package/fixtures/{belege/karte-stripe-eps.json → receipts/card-stripe-eps.json} +2 -2
  500. package/fixtures/{belege/karte-stripe.json → receipts/card-stripe.json} +2 -2
  501. package/fixtures/{belege/karte-sumup.json → receipts/card-sumup.json} +2 -2
  502. package/fixtures/{belege/rabattzeilen.json → receipts/discount-lines.json} +2 -2
  503. package/fixtures/{belege/rabatt-chef-trinkgeld.json → receipts/discount-owner-tip.json} +2 -2
  504. package/fixtures/{belege/rabatt-einfach.json → receipts/discount-simple.json} +2 -2
  505. package/fixtures/{belege/rabatt-trinkgeld.json → receipts/discount-tip.json} +2 -2
  506. package/fixtures/{belege/rabatt-wertgutschein.json → receipts/discount-value-voucher.json} +2 -2
  507. package/fixtures/{belege/langer-artikelname.json → receipts/long-item-name.json} +2 -2
  508. package/fixtures/{belege/verkauf-karte.json → receipts/sale-card.json} +2 -2
  509. package/fixtures/{belege/verkauf-bar.json → receipts/sale-cash.json} +2 -2
  510. package/fixtures/{belege/verkauf-kleinunternehmer.json → receipts/sale-small-business.json} +1 -1
  511. package/fixtures/{belege/signaturausfall-verkauf.json → receipts/signature-outage-sale.json} +2 -2
  512. package/fixtures/{belege/split-karte-karte-bar.json → receipts/split-card-card-cash.json} +2 -2
  513. package/fixtures/{belege/split-bar-rueckgeld.json → receipts/split-cash-change.json} +2 -2
  514. package/fixtures/{belege/split-langer-betrag.json → receipts/split-long-amount.json} +2 -2
  515. package/fixtures/{belege/split-eine-karte-trinkgeld.json → receipts/split-one-card-tip.json} +2 -2
  516. package/fixtures/{belege/split-tischrunde-trinkgeld.json → receipts/split-table-round-tip.json} +2 -2
  517. package/fixtures/{belege/split-trinkgeld-karte.json → receipts/split-tip-card.json} +2 -2
  518. package/fixtures/{belege/split-zwei-karten-gleicher-anbieter.json → receipts/split-two-cards-same-provider.json} +2 -2
  519. package/fixtures/{belege/testsignatur-verkauf.json → receipts/test-cashregister-sale.json} +3 -3
  520. package/fixtures/{belege/testkasse-verkauf.json → receipts/test-signature-sale.json} +3 -3
  521. package/fixtures/{belege → receipts}/training.json +2 -2
  522. package/fixtures/{belege/null-jahr.json → receipts/zero-annual.json} +5 -5
  523. package/fixtures/{belege/null-schluss.json → receipts/zero-final.json} +5 -5
  524. package/fixtures/{belege/null-pruef.json → receipts/zero-manual.json} +5 -5
  525. package/fixtures/{belege/null-monat.json → receipts/zero-monthly.json} +5 -5
  526. package/fixtures/{belege/null-ausfall.json → receipts/zero-outage-end.json} +5 -5
  527. package/fixtures/{belege/null-start.json → receipts/zero-start.json} +5 -5
  528. package/fixtures/renames-1.0.json +1490 -0
  529. package/fixtures/{kasse-settings-standard.json → stored/pos-settings-defaults.json} +7 -7
  530. package/fixtures/surface.json +877 -0
  531. package/fixtures/v3/README.md +125 -0
  532. package/fixtures/v3/antworten/belege.json +4738 -0
  533. package/fixtures/v3/antworten/belegmail.json +154 -0
  534. package/fixtures/v3/antworten/kasse-belege.json +4304 -0
  535. package/fixtures/v3/antworten/kasse.json +12716 -0
  536. package/fixtures/v3/antworten/rechnungen.json +1712 -0
  537. package/fixtures/v3/antworten/storno.json +737 -0
  538. package/fixtures/v3/stored/belege.json +502 -0
  539. package/fixtures/v3/stored/kasse.json +3461 -0
  540. package/fixtures/v3/stored/rechnungen.json +750 -0
  541. package/fixtures/v3/v3-vokabular.json +3375 -0
  542. package/fixtures/v3/zahlbetrag-faelle.json +794 -0
  543. package/package.json +32 -18
  544. package/dist/cjs/kasse/artikel.d.ts +0 -83
  545. package/dist/cjs/kasse/artikel.js +0 -79
  546. package/dist/cjs/kasse/client.d.ts +0 -10
  547. package/dist/cjs/kasse/client.js +0 -38
  548. package/dist/cjs/kasse/drucker.d.ts +0 -59
  549. package/dist/cjs/kasse/drucker.js +0 -50
  550. package/dist/cjs/kasse/index.d.ts +0 -13
  551. package/dist/cjs/kasse/index.js +0 -83
  552. package/dist/cjs/kasse/settings.d.ts +0 -229
  553. package/dist/cjs/kasse/settings.js +0 -172
  554. package/dist/cjs/kasse/texte.d.ts +0 -868
  555. package/dist/cjs/kasse/texte.js +0 -474
  556. package/dist/cjs/rechnung/fehler.d.ts +0 -21
  557. package/dist/cjs/rechnung/fehler.js +0 -44
  558. package/dist/cjs/rechnung/index.d.ts +0 -21
  559. package/dist/cjs/rechnung/index.js +0 -82
  560. package/dist/cjs/rechnung/texte.d.ts +0 -222
  561. package/dist/cjs/rechnung/texte.js +0 -425
  562. package/dist/esm/kasse/artikel.d.ts +0 -83
  563. package/dist/esm/kasse/artikel.js +0 -70
  564. package/dist/esm/kasse/client.d.ts +0 -10
  565. package/dist/esm/kasse/client.js +0 -33
  566. package/dist/esm/kasse/drucker.d.ts +0 -59
  567. package/dist/esm/kasse/drucker.js +0 -45
  568. package/dist/esm/kasse/index.d.ts +0 -13
  569. package/dist/esm/kasse/index.js +0 -18
  570. package/dist/esm/kasse/settings.d.ts +0 -229
  571. package/dist/esm/kasse/settings.js +0 -168
  572. package/dist/esm/kasse/texte.d.ts +0 -868
  573. package/dist/esm/kasse/texte.js +0 -466
  574. package/dist/esm/rechnung/fehler.d.ts +0 -21
  575. package/dist/esm/rechnung/fehler.js +0 -39
  576. package/dist/esm/rechnung/index.d.ts +0 -21
  577. package/dist/esm/rechnung/index.js +0 -20
  578. package/dist/esm/rechnung/texte.d.ts +0 -222
  579. package/dist/esm/rechnung/texte.js +0 -421
  580. package/fixtures/erwartet/karte-eigener.blatt32.json +0 -158
  581. package/fixtures/erwartet/karte-gptom-ios.blatt32.json +0 -230
  582. package/fixtures/erwartet/karte-gptom.blatt32.json +0 -230
  583. package/fixtures/erwartet/karte-hobex-cloud.blatt32.json +0 -200
  584. package/fixtures/erwartet/karte-hobex-hps.blatt32.json +0 -224
  585. package/fixtures/erwartet/karte-mypos.blatt32.json +0 -254
  586. package/fixtures/erwartet/karte-stripe-eps.blatt32.json +0 -194
  587. package/fixtures/erwartet/karte-stripe.blatt32.json +0 -212
  588. package/fixtures/erwartet/karte-sumup.blatt32.json +0 -218
  589. package/fixtures/erwartet/langer-artikelname.blatt32.json +0 -176
  590. package/fixtures/erwartet/null-ausfall.blatt32.json +0 -206
  591. package/fixtures/erwartet/null-jahr.blatt32.json +0 -212
  592. package/fixtures/erwartet/null-monat.blatt32.json +0 -206
  593. package/fixtures/erwartet/null-pruef.blatt32.json +0 -206
  594. package/fixtures/erwartet/null-schluss.blatt32.json +0 -206
  595. package/fixtures/erwartet/null-start.blatt32.json +0 -206
  596. package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt32.json +0 -212
  597. package/fixtures/erwartet/rabatt-einfach.blatt32.json +0 -182
  598. package/fixtures/erwartet/rabatt-trinkgeld.blatt32.json +0 -212
  599. package/fixtures/erwartet/rabatt-wertgutschein.blatt32.json +0 -218
  600. package/fixtures/erwartet/rabattzeilen.blatt32.json +0 -200
  601. package/fixtures/erwartet/signaturausfall-verkauf.blatt32.json +0 -194
  602. package/fixtures/erwartet/split-bar-rueckgeld.blatt32.json +0 -194
  603. package/fixtures/erwartet/split-eine-karte-trinkgeld.blatt32.json +0 -242
  604. package/fixtures/erwartet/split-karte-karte-bar.blatt32.json +0 -356
  605. package/fixtures/erwartet/split-langer-betrag.blatt32.json +0 -266
  606. package/fixtures/erwartet/split-tischrunde-trinkgeld.blatt32.json +0 -470
  607. package/fixtures/erwartet/split-trinkgeld-karte.blatt32.json +0 -272
  608. package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.blatt32.json +0 -326
  609. package/fixtures/erwartet/storno-rabatt.blatt32.json +0 -248
  610. package/fixtures/erwartet/storno-split-teil.blatt32.json +0 -230
  611. package/fixtures/erwartet/storno-split-voll.blatt32.json +0 -320
  612. package/fixtures/erwartet/storno-teil.blatt32.json +0 -206
  613. package/fixtures/erwartet/storno-voll.blatt32.json +0 -218
  614. package/fixtures/erwartet/testkasse-verkauf.blatt32.json +0 -224
  615. package/fixtures/erwartet/testsignatur-verkauf.blatt32.json +0 -236
  616. package/fixtures/erwartet/training.blatt32.json +0 -236
  617. package/fixtures/erwartet/verkauf-bar.blatt32.json +0 -176
  618. package/fixtures/erwartet/verkauf-karte.blatt32.json +0 -176
  619. package/fixtures/erwartet/verkauf-kleinunternehmer.blatt32.json +0 -182
  620. package/fixtures/kasse-meldungen-faelle.json +0 -32
  621. package/fixtures/oberflaeche.json +0 -558
  622. package/fixtures/rechnung-api-beispiele/brands-ok.json +0 -8
  623. package/fixtures/rechnung-api-beispiele/customer-get-fehler-beide.json +0 -15
  624. package/fixtures/rechnung-api-beispiele/setup-status-ok.json +0 -8
  625. package/fixtures/rechnung-api-beispiele/zahlung-fehler-ohne-schluessel.json +0 -14
  626. package/fixtures/rechnung-api-beispiele/zahlung-fehler-vor-ort.json +0 -15
  627. package/fixtures/rechnung-api-beispiele/zahlung-nachtrag.json +0 -14
  628. package/fixtures/rechnung-texte.json +0 -464
  629. /package/dist/cjs/{rechnung → invoice}/typen.js +0 -0
  630. /package/dist/esm/{rechnung → invoice}/typen.js +0 -0
  631. /package/fixtures/{erwartet/storno-rabatt.grid32.txt → expected/cancellation-discount.grid32.txt} +0 -0
  632. /package/fixtures/{erwartet/storno-rabatt.grid48.txt → expected/cancellation-discount.grid48.txt} +0 -0
  633. /package/fixtures/{erwartet/storno-voll.grid32.txt → expected/cancellation-full.grid32.txt} +0 -0
  634. /package/fixtures/{erwartet/storno-voll.grid48.txt → expected/cancellation-full.grid48.txt} +0 -0
  635. /package/fixtures/{erwartet/storno-teil.grid32.txt → expected/cancellation-partial.grid32.txt} +0 -0
  636. /package/fixtures/{erwartet/storno-teil.grid48.txt → expected/cancellation-partial.grid48.txt} +0 -0
  637. /package/fixtures/{erwartet/storno-split-voll.grid32.txt → expected/cancellation-split-full.grid32.txt} +0 -0
  638. /package/fixtures/{erwartet/storno-split-voll.grid48.txt → expected/cancellation-split-full.grid48.txt} +0 -0
  639. /package/fixtures/{erwartet/storno-split-teil.grid32.txt → expected/cancellation-split-partial.grid32.txt} +0 -0
  640. /package/fixtures/{erwartet/storno-split-teil.grid48.txt → expected/cancellation-split-partial.grid48.txt} +0 -0
  641. /package/fixtures/{erwartet/karte-eigener.grid32.txt → expected/card-custom.grid32.txt} +0 -0
  642. /package/fixtures/{erwartet/karte-eigener.grid48.txt → expected/card-custom.grid48.txt} +0 -0
  643. /package/fixtures/{erwartet/karte-gptom-ios.grid32.txt → expected/card-gptom-ios.grid32.txt} +0 -0
  644. /package/fixtures/{erwartet/karte-gptom-ios.grid48.txt → expected/card-gptom-ios.grid48.txt} +0 -0
  645. /package/fixtures/{erwartet/karte-gptom.grid32.txt → expected/card-gptom.grid32.txt} +0 -0
  646. /package/fixtures/{erwartet/karte-gptom.grid48.txt → expected/card-gptom.grid48.txt} +0 -0
  647. /package/fixtures/{erwartet/karte-hobex-cloud.grid32.txt → expected/card-hobex-cloud.grid32.txt} +0 -0
  648. /package/fixtures/{erwartet/karte-hobex-cloud.grid48.txt → expected/card-hobex-cloud.grid48.txt} +0 -0
  649. /package/fixtures/{erwartet/karte-hobex-hps.grid32.txt → expected/card-hobex-hps.grid32.txt} +0 -0
  650. /package/fixtures/{erwartet/karte-hobex-hps.grid48.txt → expected/card-hobex-hps.grid48.txt} +0 -0
  651. /package/fixtures/{erwartet/karte-mypos.grid32.txt → expected/card-mypos.grid32.txt} +0 -0
  652. /package/fixtures/{erwartet/karte-mypos.grid48.txt → expected/card-mypos.grid48.txt} +0 -0
  653. /package/fixtures/{erwartet/karte-stripe-eps.grid32.txt → expected/card-stripe-eps.grid32.txt} +0 -0
  654. /package/fixtures/{erwartet/karte-stripe-eps.grid48.txt → expected/card-stripe-eps.grid48.txt} +0 -0
  655. /package/fixtures/{erwartet/karte-stripe.grid32.txt → expected/card-stripe.grid32.txt} +0 -0
  656. /package/fixtures/{erwartet/karte-stripe.grid48.txt → expected/card-stripe.grid48.txt} +0 -0
  657. /package/fixtures/{erwartet/karte-sumup.grid32.txt → expected/card-sumup.grid32.txt} +0 -0
  658. /package/fixtures/{erwartet/karte-sumup.grid48.txt → expected/card-sumup.grid48.txt} +0 -0
  659. /package/fixtures/{erwartet/rabattzeilen.grid32.txt → expected/discount-lines.grid32.txt} +0 -0
  660. /package/fixtures/{erwartet/rabattzeilen.grid48.txt → expected/discount-lines.grid48.txt} +0 -0
  661. /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid32.txt → expected/discount-owner-tip.grid32.txt} +0 -0
  662. /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid48.txt → expected/discount-owner-tip.grid48.txt} +0 -0
  663. /package/fixtures/{erwartet/rabatt-einfach.grid32.txt → expected/discount-simple.grid32.txt} +0 -0
  664. /package/fixtures/{erwartet/rabatt-einfach.grid48.txt → expected/discount-simple.grid48.txt} +0 -0
  665. /package/fixtures/{erwartet/rabatt-trinkgeld.grid32.txt → expected/discount-tip.grid32.txt} +0 -0
  666. /package/fixtures/{erwartet/rabatt-trinkgeld.grid48.txt → expected/discount-tip.grid48.txt} +0 -0
  667. /package/fixtures/{erwartet/rabatt-wertgutschein.grid32.txt → expected/discount-value-voucher.grid32.txt} +0 -0
  668. /package/fixtures/{erwartet/rabatt-wertgutschein.grid48.txt → expected/discount-value-voucher.grid48.txt} +0 -0
  669. /package/fixtures/{erwartet/logo-probe-hoch.raster32.txt → expected/logo-sample-tall.raster32.txt} +0 -0
  670. /package/fixtures/{erwartet/logo-probe.raster32.txt → expected/logo-sample.raster32.txt} +0 -0
  671. /package/fixtures/{erwartet/langer-artikelname.grid32.txt → expected/long-item-name.grid32.txt} +0 -0
  672. /package/fixtures/{erwartet/langer-artikelname.grid48.txt → expected/long-item-name.grid48.txt} +0 -0
  673. /package/fixtures/{erwartet/verkauf-karte.grid32.txt → expected/sale-card.grid32.txt} +0 -0
  674. /package/fixtures/{erwartet/verkauf-karte.grid48.txt → expected/sale-card.grid48.txt} +0 -0
  675. /package/fixtures/{erwartet/verkauf-bar.grid32.txt → expected/sale-cash.grid32.txt} +0 -0
  676. /package/fixtures/{erwartet/verkauf-bar.grid48.txt → expected/sale-cash.grid48.txt} +0 -0
  677. /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid32.txt → expected/sale-small-business.grid32.txt} +0 -0
  678. /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid48.txt → expected/sale-small-business.grid48.txt} +0 -0
  679. /package/fixtures/{erwartet/signaturausfall-verkauf.grid32.txt → expected/signature-outage-sale.grid32.txt} +0 -0
  680. /package/fixtures/{erwartet/signaturausfall-verkauf.grid48.txt → expected/signature-outage-sale.grid48.txt} +0 -0
  681. /package/fixtures/{erwartet/split-karte-karte-bar.grid32.txt → expected/split-card-card-cash.grid32.txt} +0 -0
  682. /package/fixtures/{erwartet/split-karte-karte-bar.grid48.txt → expected/split-card-card-cash.grid48.txt} +0 -0
  683. /package/fixtures/{erwartet/split-bar-rueckgeld.grid32.txt → expected/split-cash-change.grid32.txt} +0 -0
  684. /package/fixtures/{erwartet/split-bar-rueckgeld.grid48.txt → expected/split-cash-change.grid48.txt} +0 -0
  685. /package/fixtures/{erwartet/split-langer-betrag.grid32.txt → expected/split-long-amount.grid32.txt} +0 -0
  686. /package/fixtures/{erwartet/split-langer-betrag.grid48.txt → expected/split-long-amount.grid48.txt} +0 -0
  687. /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid32.txt → expected/split-one-card-tip.grid32.txt} +0 -0
  688. /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid48.txt → expected/split-one-card-tip.grid48.txt} +0 -0
  689. /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid32.txt → expected/split-table-round-tip.grid32.txt} +0 -0
  690. /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid48.txt → expected/split-table-round-tip.grid48.txt} +0 -0
  691. /package/fixtures/{erwartet/split-trinkgeld-karte.grid32.txt → expected/split-tip-card.grid32.txt} +0 -0
  692. /package/fixtures/{erwartet/split-trinkgeld-karte.grid48.txt → expected/split-tip-card.grid48.txt} +0 -0
  693. /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid32.txt → expected/split-two-cards-same-provider.grid32.txt} +0 -0
  694. /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid48.txt → expected/split-two-cards-same-provider.grid48.txt} +0 -0
  695. /package/fixtures/{erwartet/testkasse-verkauf.grid32.txt → expected/test-cashregister-sale.grid32.txt} +0 -0
  696. /package/fixtures/{erwartet/testkasse-verkauf.grid48.txt → expected/test-cashregister-sale.grid48.txt} +0 -0
  697. /package/fixtures/{erwartet/testsignatur-verkauf.grid32.txt → expected/test-signature-sale.grid32.txt} +0 -0
  698. /package/fixtures/{erwartet/testsignatur-verkauf.grid48.txt → expected/test-signature-sale.grid48.txt} +0 -0
  699. /package/fixtures/{erwartet → expected}/training.grid32.txt +0 -0
  700. /package/fixtures/{erwartet → expected}/training.grid48.txt +0 -0
  701. /package/fixtures/{erwartet/null-jahr.grid32.txt → expected/zero-annual.grid32.txt} +0 -0
  702. /package/fixtures/{erwartet/null-jahr.grid48.txt → expected/zero-annual.grid48.txt} +0 -0
  703. /package/fixtures/{erwartet/null-schluss.grid32.txt → expected/zero-final.grid32.txt} +0 -0
  704. /package/fixtures/{erwartet/null-schluss.grid48.txt → expected/zero-final.grid48.txt} +0 -0
  705. /package/fixtures/{erwartet/null-pruef.grid32.txt → expected/zero-manual.grid32.txt} +0 -0
  706. /package/fixtures/{erwartet/null-pruef.grid48.txt → expected/zero-manual.grid48.txt} +0 -0
  707. /package/fixtures/{erwartet/null-monat.grid32.txt → expected/zero-monthly.grid32.txt} +0 -0
  708. /package/fixtures/{erwartet/null-monat.grid48.txt → expected/zero-monthly.grid48.txt} +0 -0
  709. /package/fixtures/{erwartet/null-ausfall.grid32.txt → expected/zero-outage-end.grid32.txt} +0 -0
  710. /package/fixtures/{erwartet/null-ausfall.grid48.txt → expected/zero-outage-end.grid48.txt} +0 -0
  711. /package/fixtures/{erwartet/null-start.grid32.txt → expected/zero-start.grid32.txt} +0 -0
  712. /package/fixtures/{erwartet/null-start.grid48.txt → expected/zero-start.grid48.txt} +0 -0
@@ -0,0 +1,489 @@
1
+ "use strict";
2
+ /**
3
+ * Was die Kasse selbst sagt — auf dem Bildschirm, in beiden Huellen.
4
+ *
5
+ * Die Browser-Kasse und die Kassen-App sind eine Kasse. Was der Kassier bei
6
+ * einem Fehler liest, steht hier genau einmal; beide Apps beziehen den Satz
7
+ * von hier, und wer ihn aendert, aendert ihn auf beiden Seiten oder gar nicht.
8
+ *
9
+ * Nicht hier: die fachlichen Saetze des Backends („Kopplungs-Code ist
10
+ * abgelaufen.", „PIN falsch, noch 2 Versuche"). Die gehen unveraendert durch.
11
+ *
12
+ * Ein Satz sagt, was los ist, und was zu tun ist. Nie Innereien.
13
+ *
14
+ * Schluessel: `bereich.name`. Ein Schluessel wird nie umgedeutet — wer den
15
+ * Sinn aendert, legt einen neuen an. `only` nennt die Seite, wenn ein Satz nur
16
+ * auf einer Plattform vorkommen kann.
17
+ *
18
+ * Die Schluessel sind seit 1.0 englisch, die Texte bleiben deutsch. Welcher
19
+ * Schluessel frueher wie hiess, steht in `fixtures/renames-1.0.json`,
20
+ * ebenso die Strukturschluessel (`platzhalter` -> `placeholders`, `nur` ->
21
+ * `only`), die Platzhalter und die Arten der Fehlerregeln (Abschnitte
22
+ * `placeholders` und `structure`).
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.LABELS = exports.CANCELLATION_PAYMENT_ERROR_MESSAGES = exports.RECEIPT_EMAIL_ERROR_MESSAGES = exports.ERROR_RULES = exports.MESSAGES = void 0;
26
+ exports.receiptEmailErrorMessage = receiptEmailErrorMessage;
27
+ exports.cancellationPaymentErrorMessage = cancellationPaymentErrorMessage;
28
+ exports.labelText = labelText;
29
+ exports.messageText = messageText;
30
+ exports.messageAppliesTo = messageAppliesTo;
31
+ const MELDUNGEN_ROH = {
32
+ // --- Transport -----------------------------------------------------------
33
+ 'network.no_connection': { text: 'Keine Verbindung zum Server. Bitte die Internetverbindung prüfen und erneut versuchen.' },
34
+ 'network.timeout': { text: 'Der Server antwortet nicht. Bitte die Internetverbindung prüfen und erneut versuchen.' },
35
+ 'server.unexpected': { text: 'Der Server hat unerwartet geantwortet (HTTP {status}). Bitte den Support verständigen.', placeholders: ['status'] },
36
+ // --- Kopplung ------------------------------------------------------------
37
+ 'pairing.code_missing': { text: 'Bitte den Kopplungs-Code eingeben.' },
38
+ 'pairing.failed': { text: 'Die Kopplung ist fehlgeschlagen. Bitte erneut versuchen.' },
39
+ 'pairing.incomplete': { text: 'Die Kopplung ist unvollständig zurückgekommen. Bitte im Panel einen neuen Code erzeugen und noch einmal versuchen.' },
40
+ 'device.browser_storage': { text: 'Dieses Gerät konnte nicht gespeichert werden – der Browser-Speicher steht nicht zur Verfügung. Bitte den privaten Modus verlassen.', only: ['web'] },
41
+ // --- Anmeldung und Sitzung -----------------------------------------------
42
+ 'login.pin_missing': { text: 'Bitte die PIN eingeben.' },
43
+ 'login.failed': { text: 'Die Anmeldung ist fehlgeschlagen. Bitte erneut versuchen.' },
44
+ 'login.not_completed': { text: 'Die Anmeldung konnte nicht abgeschlossen werden. Bitte erneut versuchen.' },
45
+ 'login.completing': { text: 'Anmeldung wird gerade abgeschlossen – bitte gleich noch einmal drücken.' },
46
+ 'session.expired': { text: 'Die Sitzung ist abgelaufen. Bitte erneut anmelden.' },
47
+ 'session.expired_offline': { text: 'Keine Verbindung zum Server – die Sitzung ist abgelaufen. Bitte erneut anmelden.' },
48
+ 'session.none': { text: 'Keine Sitzung.' },
49
+ // Die Sperre nach Untaetigkeit kuendigt sich an: der Countdown laeuft in
50
+ // Sekunden, eine Beruehrung haelt die Schicht offen.
51
+ 'session.logging_out': { text: 'Kasse meldet in {seconds} s ab – Bildschirm berühren, um weiterzuarbeiten.', placeholders: ['seconds'] },
52
+ // Wer die Abmelden-Taste ein zweites Mal drueckt, beendet die Schicht –
53
+ // der Satz steht in der Rueckfrage, bevor es so weit ist.
54
+ 'logout.press_again': { text: 'Noch einmal drücken beendet die Schicht an dieser Kasse.' },
55
+ 'permissions.not_changeable': { text: 'Das darfst du nicht ändern – das Recht dafür vergibt der Inhaber im Panel.' },
56
+ // --- Verkauf und Positionen ----------------------------------------------
57
+ 'cashregister.load_failed': { text: 'Die Kasse konnte nicht geladen werden.' },
58
+ 'articles.load_failed': { text: 'Die Artikel konnten nicht geladen werden.' },
59
+ 'articles.none_enabled': { text: 'Keine Artikel an dieser Kasse. Im Panel unter „Kacheln & Gruppen“ freischalten.' },
60
+ 'articles.none_found': { text: 'Keine Artikel gefunden.' },
61
+ 'articles.vat_rate_unknown': { text: '„{name}“ hat einen Steuersatz, den die Kasse nicht kennt.', placeholders: ['name'] },
62
+ 'item.amount_missing': { text: 'Bitte einen Betrag eingeben.' },
63
+ 'item.description_missing': { text: 'Bitte eine Bezeichnung eingeben – sie steht am Beleg.' },
64
+ 'discount.percent_invalid': { text: 'Bitte einen Prozentwert zwischen 0,1 und 100 eingeben.' },
65
+ // --- Kassieren -----------------------------------------------------------
66
+ // Der Grund ueber dem Knopf, solange der Beleg nicht abgeschlossen werden kann.
67
+ 'checkout.nothing_entered': { text: 'Noch nichts erfasst – bitte zuerst eine Position aufnehmen.' },
68
+ 'checkout.tendered_missing': { text: 'Erst eintippen, was der Gast gibt – der Rückgeld-Rechner ist an.' },
69
+ 'checkout.tendered_too_little': { text: 'Gegeben ist weniger als der Betrag.' },
70
+ // Lebenszyklus der Kasse (ausser Betrieb, Signatureinheit …): der Grund
71
+ // kommt vom Server bzw. aus dem Kassenstand und steht hinter dem Doppelpunkt.
72
+ 'checkout.locked': { text: 'Kassieren gesperrt: {reason}', placeholders: ['reason'] },
73
+ // Keine gesetzliche Obergrenze – steuerfrei ist aber nur ortsuebliches
74
+ // Trinkgeld (§ 3 Abs 1 Z 16a EStG). Eine Warnung, keine Sperre.
75
+ 'tip.over_half': { text: 'Über 50 % Trinkgeld – wirklich? Steuerfrei ist nur ortsübliches Trinkgeld.' },
76
+ // --- Abschluss -----------------------------------------------------------
77
+ 'completion.failed': { text: 'Der Abschluss ist fehlgeschlagen.' },
78
+ 'completion.unknown': { text: 'Unklar, ob der Beleg entstanden ist – die Antwort kam nicht an. Bitte nicht noch einmal abschließen: der Beleg kann bereits erstellt und signiert sein. Im Panel unter „Belege“ nachsehen; nur wenn er dort fehlt, den Verkauf erneut abschließen.' },
79
+ 'completion.zero_receipt_failed': { text: 'Der Nullbeleg konnte nicht erstellt werden.' },
80
+ 'completion.signature_down': { text: 'Die Signatureinheit hat nicht geantwortet. Der Beleg ist gültig und trägt den Vermerk „Sicherheitseinrichtung ausgefallen“.' },
81
+ // Erledigen darf nur bestaetigen, was am Server auch wirklich steht – sonst
82
+ // gilt ein Betrag als abgehakt, zu dem es nie einen Beleg gab.
83
+ 'completion.resolve_question': { text: 'Nur erledigen, wenn der Beleg in der Belegliste steht – sonst bleiben {amount} ohne Beleg. Bitte zuerst unter „Belege“ nachsehen.', placeholders: ['amount'] },
84
+ // --- Kartenzahlung -------------------------------------------------------
85
+ 'card_payment.not_possible': { text: 'Kartenzahlung nicht möglich.' },
86
+ 'card_payment.not_completed': { text: 'Die Kartenzahlung ist nicht zustande gekommen.' },
87
+ 'card_payment.not_started': { text: 'Kartenzahlung nicht gestartet: {reason}', placeholders: ['reason'] },
88
+ 'card_payment.unknown': { text: 'Unklar, ob die Kartenzahlung durchgegangen ist – die Verbindung zum Terminal riss ab. Bitte am Terminal-Beleg nachsehen, BEVOR neu kassiert wird: die Karte kann belastet sein.' },
89
+ // Die Kennung ist der einzige Anker, um die Zahlung am Terminal-Beleg wiederzufinden – liegt sie vor, gilt dieser Satz statt card_payment.unknown.
90
+ 'card_payment.unknown_with_id': { text: 'Unklar, ob die Kartenzahlung durchgegangen ist – die Verbindung zum Terminal riss ab. Bitte am Terminal-Beleg nachsehen, BEVOR neu kassiert wird: die Karte kann belastet sein. Kennung der Zahlung: {reference}.', placeholders: ['reference'] },
91
+ 'card_payment.waiting_for_terminal': { text: 'Bitte am Terminal fortfahren …' },
92
+ // Das Kartenfenster des Terminals ist abgelaufen: es bricht selbst ab, die
93
+ // Kasse muss nichts tun.
94
+ 'card_payment.terminal_cancelling': { text: 'Das Terminal bricht gleich von selbst ab …' },
95
+ // Ein geglücktes Kartenergebnis ohne Beleg ist der teuerste Zustand am Tresen:
96
+ // wer hier erneut kassiert, belastet die Karte ein zweites Mal. Beide Sätze
97
+ // nennen deshalb Betrag UND Kennung — nur damit findet der Kassier die Zahlung
98
+ // am Terminal-Beleg wieder — und keiner rät zum Wiederholen.
99
+ 'card_payment.card_charged_receipt_open': { text: 'Die Karte ist bereits mit {amount} belastet (Kennung {reference}) – der Beleg dazu fehlt noch. Bitte jetzt den Beleg erstellen und nicht erneut kassieren.', placeholders: ['amount', 'reference'] },
100
+ 'card_payment.card_charged_cart_changed': { text: 'Es gibt eine gebuchte Kartenzahlung über {amount} (Kennung {reference}), aber der Korb hat sich seither geändert. Bitte zuerst entscheiden: den Beleg zur gebuchten Zahlung erstellen oder die Zahlung am Terminal stornieren und hier verwerfen.', placeholders: ['amount', 'reference'] },
101
+ 'card_payment.connect_not_connected': { text: 'Kartenzahlung nicht möglich: Kasseneck Connect ist nicht verbunden – Einstellungen → Kasseneck Connect.', only: ['web'] },
102
+ // Solange die Karte belastet ist, darf am Korb nichts mehr veraendert werden –
103
+ // sonst passt der Beleg nicht mehr zum Betrag, der schon abgebucht ist.
104
+ 'card_payment.cart_locked_card_charged': { text: 'Die Karte ist bereits belastet – Warenkorb, Rabatt und Trinkgeld bleiben gesperrt, bis der Beleg entsteht oder die Karte zurückerstattet ist.' },
105
+ // Entkoppeln trennt das Geraet vom Konto, nicht die gebuchte Kartenzahlung
106
+ // vom Terminal – die muss weiterhin von Hand storniert werden.
107
+ 'card_payment.unpair_card_charged': { text: 'Auf diesem Gerät liegt noch eine gebuchte Kartenzahlung ohne Beleg – sie muss von Hand am Terminal zurückerstattet werden (Betrag siehe unten).' },
108
+ 'terminal.none_found': { text: 'Kein Hobex-Terminal gefunden – ist es eingeschaltet und im selben Netz wie dieser Rechner?', only: ['web'] },
109
+ 'terminal.not_ready': { text: 'Terminal antwortet, ist aber nicht betriebsbereit: {response} – TID prüfen.', placeholders: ['response'], only: ['web'] },
110
+ 'gptom.app_missing': { text: 'Die GP-Tom-App ist auf diesem Gerät nicht da.', only: ['app'] },
111
+ 'gptom.search_failed': { text: 'GP Tom: Suche nach der App fehlgeschlagen: {reason}', placeholders: ['reason'], only: ['app'] },
112
+ 'gptom.payment_failed': { text: 'GP Tom: Zahlung fehlgeschlagen: {reason}', placeholders: ['reason'], only: ['app'] },
113
+ 'gptom.terminal_not_responding': { text: 'Das Terminal hat nicht geantwortet: {reason}', placeholders: ['reason'], only: ['app'] },
114
+ 'gptom.payment_not_completed': { text: 'Die Zahlung wurde nicht abgeschlossen ({code}).', placeholders: ['code'], only: ['app'] },
115
+ // Abgelehnt heißt: das Terminal hat entschieden, es ist sicher nichts gebucht.
116
+ // Der Code ist die einzige Handhabe, mit der der Inhaber bei GP nachfragen kann —
117
+ // liegt einer vor, gilt die Fassung mit Code.
118
+ 'gptom.declined': { text: 'Das Terminal hat die Zahlung abgelehnt.', only: ['app'] },
119
+ 'gptom.declined_with_code': { text: 'Das Terminal hat die Zahlung abgelehnt ({code}).', placeholders: ['code'], only: ['app'] },
120
+ 'gptom.not_opened': { text: 'GP Tom ließ sich nicht öffnen – bitte die GP-Tom-App prüfen und erneut versuchen.', only: ['app'] },
121
+ // Frist abgelaufen ist kein Abbruch: die Karte kann belastet sein, nur die
122
+ // Antwort blieb aus. Deshalb derselbe Ton wie card_payment.unknown.
123
+ 'gptom.timeout': { text: 'Das Terminal hat in der Frist nicht geantwortet – die Karte kann belastet sein. Bitte am Terminal-Beleg nachsehen, BEVOR neu kassiert wird.', only: ['app'] },
124
+ 'gptom.timeout_with_id': { text: 'Das Terminal hat in der Frist nicht geantwortet – die Karte kann belastet sein. Bitte am Terminal-Beleg nachsehen, BEVOR neu kassiert wird. Kennung der Zahlung: {reference}.', placeholders: ['reference'], only: ['app'] },
125
+ // --- Terminal-Protokoll --------------------------------------------------
126
+ 'log.empty': { text: 'Noch keine Einträge – das Protokoll füllt sich mit der ersten Kartenzahlung.' },
127
+ 'log.copied': { text: 'Das Protokoll liegt in der Zwischenablage.' },
128
+ // --- Belege und Storno ---------------------------------------------------
129
+ 'receipts.load_failed': { text: 'Die Belege konnten nicht geladen werden.' },
130
+ 'receipts.none_in_period': { text: 'Keine Belege in diesem Zeitraum.' },
131
+ 'receipt.load_failed': { text: 'Der Beleg konnte nicht geladen werden.' },
132
+ 'receipt.not_found': { text: 'Der Beleg wurde nicht gefunden.' },
133
+ 'cancellation.failed': { text: 'Das Storno ist fehlgeschlagen.' },
134
+ 'cancellation.reason_missing': { text: 'Bitte einen Grund wählen.' },
135
+ 'cancellation.item_missing': { text: 'Bitte mindestens eine Position wählen.' },
136
+ // Storno eines Belegs mit mehreren Zahlungen: je Zahlung wird zurückgegeben,
137
+ // und der Server prueft jede Rueckgabe gegen den Rest ihrer Zahlung. Welcher
138
+ // Code welchen Satz bekommt, steht in CANCELLATION_PAYMENT_ERROR_MESSAGES.
139
+ 'cancellation.payments_missing': { text: 'Dieser Beleg wurde in mehreren Zahlungen bezahlt – bitte angeben, wie zurückgegeben wird.' },
140
+ 'cancellation.refund_too_high': { text: 'Eine Rückgabe ist höher als der Rest ihrer Zahlung – bitte die Beträge prüfen.' },
141
+ 'cancellation.refund_without_reference': { text: 'Eine Rückgabe nennt keine Zahlung des Belegs – bitte das Storno neu beginnen.' },
142
+ 'cancellation.refund_reference_unknown': { text: 'Eine Rückgabe nennt eine Zahlung, die es am Beleg nicht gibt – bitte das Storno neu beginnen.' },
143
+ // Die Antwort kam, aber der Ausgang ist offen: der Storno-Beleg kann schon
144
+ // signiert sein. Wer jetzt noch einmal storniert, storniert womoeglich doppelt.
145
+ 'cancellation.outcome_unknown': { text: 'Unklar, ob das Storno entstanden ist – es kann bereits signiert sein. Bitte nicht erneut stornieren, sondern die Belegliste in ein paar Minuten neu laden.' },
146
+ 'cancellation.sum_mismatch': { text: 'Die Rückgaben ergeben nicht den Betrag des Stornos – bitte die Beträge prüfen.' },
147
+ // Storno eines Belegs mit mehreren Zahlungen: Karten gehen VON HAND am
148
+ // Terminal zurueck, und zwar erst NACH dem gebuchten Storno -- vorher
149
+ // fliesst kein Geld. Darunter steht die Liste der Karten zum Abhaken; der
150
+ // Satz passt fuer eine oder mehrere Karten, mit oder ohne Anbindung.
151
+ 'cancellation.refund_cards': { text: 'Das Storno ist gebucht – bitte jede Karte unten am Terminal gutschreiben und abhaken.' },
152
+ // Wie cancellation.outcome_unknown, nur enthielt die Rueckgabe Karten: bevor
153
+ // klar ist, ob das Storno steht, darf keine Gutschrift laufen -- sonst geht
154
+ // Geld zurueck ohne Storno-Beleg.
155
+ 'cancellation.outcome_unknown_cards': { text: 'Unklar, ob das Storno entstanden ist – es kann bereits signiert sein. Bitte nicht erneut stornieren und noch keine Karte gutschreiben, sondern die Belegliste in ein paar Minuten neu laden. Steht das Storno dort, die Karten laut Storno-Beleg am Terminal gutschreiben.' },
156
+ // Die Liste der Karten nach dem gebuchten Storno wird geschlossen, obwohl
157
+ // nicht jede Karte abgehakt ist: einmal nachfragen -- eine vergessene
158
+ // Gutschrift faellt sonst erst dem Gast auf.
159
+ 'cancellation.cards_not_checked': { text: 'Noch ist nicht jede Karte abgehakt – bitte jede am Terminal gutschreiben. Ist das schon geschehen, zum Schließen noch einmal drücken.' },
160
+ // --- Getrennt zahlen -----------------------------------------------------
161
+ // Ein Tisch zahlt in Teilen, ein Beleg fuer alles. Das Teure ist eine schon
162
+ // belastete Karte: jeder Satz, der sie betrifft, nennt den Betrag, und keiner
163
+ // raet dazu, noch einmal zu kassieren.
164
+ 'split.setting_hint': { text: 'Ein Tisch zahlt in Teilen: jede Zahlung bar oder mit Karte, mit eigenem Trinkgeld – am Ende ein Beleg für alles.' },
165
+ 'split.amount_over_open': { text: 'Der Betrag ist höher als offen – höchstens {amount}.', placeholders: ['amount'] },
166
+ 'split.tip_over_amount': { text: 'Das Trinkgeld ist höher als der Betrag dieser Zahlung.' },
167
+ 'split.tendered_too_little': { text: 'Gegeben ist weniger als der Betrag dieser Zahlung.' },
168
+ 'split.still_open': { text: 'Es sind noch {amount} offen – abschließen geht erst, wenn alles kassiert ist.', placeholders: ['amount'] },
169
+ 'split.sum_mismatch': { text: 'Die Zahlungen ergeben nicht den Betrag des Belegs – bitte die Liste prüfen.' },
170
+ 'split.cart_locked': { text: 'Der Warenkorb ist gesperrt, solange Zahlungen kassiert sind – erst abschließen oder die Zahlungen entfernen.' },
171
+ 'split.switch_locked': { text: 'Zurück zu Bar oder Karte geht erst, wenn keine Zahlung mehr kassiert ist.' },
172
+ 'split.return_cash': { text: 'Bitte {amount} Bargeld an den Gast zurückgeben.', placeholders: ['amount'] },
173
+ 'split.card_reverse_running': { text: 'Die Kartenzahlung über {amount} wird am Terminal zurückgebucht …', placeholders: ['amount'] },
174
+ 'split.card_reversed': { text: 'Die Kartenzahlung über {amount} ist am Terminal zurückgebucht.', placeholders: ['amount'] },
175
+ 'split.card_reverse_failed': { text: 'Die Kartenzahlung über {amount} (Kennung {reference}) ließ sich nicht zurückbuchen – sie bleibt in der Liste. Bitte am Terminal-Beleg nachsehen und erneut versuchen.', placeholders: ['amount', 'reference'] },
176
+ 'split.card_reverse_unknown': { text: 'Unklar, ob die Rückbuchung über {amount} (Kennung {reference}) durchgegangen ist – die Zahlung bleibt in der Liste. Bitte am Terminal-Beleg nachsehen, BEVOR erneut zurückgebucht wird.', placeholders: ['amount', 'reference'] },
177
+ // Das Terminal meldet eine Gutschrift, die hier noch als offene Ruecknahme
178
+ // steht – ein zweites Zurueckbuchen waere die doppelte Rueckgabe.
179
+ 'split.card_already_reversed': { text: 'Das Terminal meldet, dass die Kartenzahlung über {amount} bereits gutgeschrieben wurde (Kennung {reference}) – bitte am Terminal-Beleg prüfen und nicht erneut zurückbuchen.', placeholders: ['amount', 'reference'] },
180
+ 'split.external_reverse': { text: 'Diese Karte ist nicht an die Kasse angebunden. Bitte {amount} jetzt am Terminal zurückbuchen und danach bestätigen.', placeholders: ['amount'] },
181
+ 'split.session_open': { text: 'Eine getrennte Zahlung ist nicht abgeschlossen, {amount} sind schon kassiert. Bitte weiter kassieren oder alles zurückbuchen.', placeholders: ['amount'] },
182
+ 'split.session_unreadable': { text: 'Eine gespeicherte getrennte Zahlung auf diesem Gerät ließ sich nicht lesen – bitte prüfen, ob schon Karten belastet wurden (Kasseneck-Panel oder Terminal), und offene Beträge von Hand ausgleichen.' },
183
+ 'split.storage_failed': { text: 'Die getrennte Zahlung ließ sich auf diesem Gerät nicht speichern – bitte die Kasse bis zum Abschluss dieses Belegs nicht neu laden, sonst stehen belastete Karten womöglich nicht mehr in der Liste.' },
184
+ 'split.too_many_payments': { text: 'Ein Beleg lässt höchstens 20 Zahlungen zu.' },
185
+ 'split.unpair_open_cards': { text: 'Auf diesem Gerät ist noch eine getrennte Zahlung mit belasteten Karten offen – sie müssen von Hand am Terminal zurückgebucht werden (Beträge siehe unten).' },
186
+ 'split.items_locked': { text: 'Nach Positionen geht nicht mehr – eine Zahlung ist schon als Betrag kassiert.' },
187
+ 'split.select_items': { text: 'Bitte zuerst antippen, was dieser Gast zahlt.' },
188
+ // Barzahlung mit Rueckgeld-Rechner: ohne „Gegeben" wird die Zahlung nicht
189
+ // hinzugefuegt – derselbe Grund wie beim Abschluss einer Barzahlung, auf
190
+ // DIESE Zahlung bezogen.
191
+ 'split.tendered_missing': { text: 'Erst eintippen, was der Gast für diese Zahlung gibt – der Rückgeld-Rechner ist an.' },
192
+ // --- Beleg weitergeben: Link, Teilen, E-Mail -----------------------------
193
+ // Kopieren, Teilen und Senden fuehren zu demselben Ziel: der oeffentlichen
194
+ // Belegseite (beleg.kasseneck.at/<fullReceiptId>). Kein Satz davon ist
195
+ // plattformgebunden — nur die Huelle unterscheidet sich, nicht das Wort.
196
+ 'receipt.link_copied': { text: 'Der Link zum Beleg liegt in der Zwischenablage.' },
197
+ // Der Text, der beim Teilen mitgeht. Der Link steht am Schluss, damit ihn
198
+ // jede Huelle (SMS, Messenger, Mail) bis zum Ende als Link erkennt und nicht
199
+ // mitten im Satz abbricht.
200
+ 'receipt.share_text': { text: 'Beleg {number} von {business} über {amount}: {link}', placeholders: ['business', 'number', 'amount', 'link'] },
201
+ // Belege aus dem Altbestand tragen keine `fullReceiptId`; ohne sie gibt es
202
+ // keine Belegseite. Der Satz nennt den Grund, sonst sucht der Kassier den
203
+ // Fehler bei sich und versucht es ein zweites Mal.
204
+ 'receipt.not_shareable': { text: 'Für diesen Beleg gibt es keinen Link – er stammt aus einer älteren Kasse.' },
205
+ // Ein Testbeleg hat eine Belegseite, ist aber steuerlich nichts wert. Wer
206
+ // den Link weitergibt, muss das vorher lesen, nicht hinterher.
207
+ 'receipt.test_hint_share': { text: 'Test-Umgebung – der Beleg ist steuerlich nicht gültig.' },
208
+ 'receipt.mail_sent': { text: 'Der Beleg wurde an {recipient} gesendet.', placeholders: ['recipient'] },
209
+ 'receipt.mail_address_invalid': { text: 'Diese E-Mail-Adresse ist nicht gültig.' },
210
+ 'receipt.mail_too_often': { text: 'Dieser Beleg wurde schon oft gesendet – bitte später noch einmal.' },
211
+ 'receipt.mail_failed': { text: 'Der Beleg konnte nicht gesendet werden. Bitte noch einmal versuchen.' },
212
+ // Bewusst nicht derselbe Satz wie `receipt.not_found`: dort scheitert das
213
+ // Oeffnen, hier das Senden. Der Kassier steht vor einem Adressfeld und muss
214
+ // lesen, dass nichts hinausgegangen ist.
215
+ 'receipt.mail_not_found': { text: 'Dieser Beleg wurde nicht gefunden – er konnte nicht gesendet werden.' },
216
+ // --- Druck ---------------------------------------------------------------
217
+ 'print.failed': { text: 'Der Ausdruck ist fehlgeschlagen.' },
218
+ 'print.not_possible': { text: 'Druck nicht möglich: {reason}', placeholders: ['reason'] },
219
+ 'print.test_print_failed': { text: 'Der Testdruck ist fehlgeschlagen.' },
220
+ 'print.test_print_not_possible': { text: 'Der Testdruck ist fehlgeschlagen: {reason}', placeholders: ['reason'] },
221
+ 'print.no_printer': { text: 'Kein Bondrucker eingerichtet – in den Einstellungen unter Drucker & Lade.' },
222
+ 'print.printer_unreachable': { text: 'Drucker nicht erreichbar.' },
223
+ 'print.job_expired': { text: 'Drucker hat den Beleg nicht abgeholt (abgelaufen).', only: ['web'] },
224
+ 'print.no_printer_found': { text: 'Kein Drucker gefunden – ist er eingeschaltet und im selben Netz wie dieser Rechner?', only: ['web'] },
225
+ 'print.chrome_only': { text: '{channel}-Druck geht nur in Chrome oder Edge (Windows, Mac, Android) – nicht in Safari und nicht am iPad.', placeholders: ['channel'], only: ['web'] },
226
+ 'print.no_printer_for_channel': { text: 'Kein {channel}-Drucker verbunden – „{channel}-Drucker verbinden“ und den Drucker im Dialog wählen.', placeholders: ['channel'], only: ['web'] },
227
+ // Der Drucker-Wizard: suchen, verbinden, Testdruck, QR-Probe, erst dann
228
+ // speichern. Derselbe Ablauf in beiden Kassen — deshalb hat kein Satz ein
229
+ // `only`, obwohl der Weg zum Drucker verschieden ist (Bluetooth in der App,
230
+ // Web Bluetooth im Browser). Was der Chef liest, ist beidesmal dasselbe.
231
+ 'print.wizard_connect': { text: 'Verbinde mit {name} …', placeholders: ['name'] },
232
+ 'print.wizard_test_print_question': { text: 'Ist der Testdruck gekommen?' },
233
+ 'print.wizard_qr_question': { text: 'Welcher QR-Code ist sauber gedruckt?' },
234
+ // Kein Modus druckt einen lesbaren QR-Code: gespeichert wird trotzdem (mit
235
+ // Raster als Vorgabe), aber der Chef muss wissen, dass der QR-Code dann vom
236
+ // Bildschirm gelesen werden muss — nach RKSV gehoert er an den Beleg.
237
+ 'print.wizard_qr_none_hint': { text: 'Kein QR-Code kam sauber – der Beleg zeigt den QR-Code dann am Bildschirm.' },
238
+ 'print.wizard_nothing_arrived': { text: 'Nichts gekommen? Drucker an, Papier drin, richtiges Gerät gewählt?' },
239
+ 'print.wizard_saved': { text: '{name} ist eingerichtet.', placeholders: ['name'] },
240
+ // Abbrechen an jeder Stelle: nichts gespeichert. Der Satz sagt genau das,
241
+ // damit niemand einen halb eingerichteten Drucker vermutet.
242
+ 'print.wizard_cancelled': { text: 'Nichts gespeichert.' },
243
+ 'bluetooth.off': { text: 'Bluetooth ist ausgeschaltet. Bitte einschalten und erneut suchen.', only: ['app'] },
244
+ 'bluetooth.permission_missing': { text: 'Bitte die Freigabe in den Geräte-Einstellungen erteilen.', only: ['app'] },
245
+ 'bluetooth.search_failed': { text: 'Die Suche ist fehlgeschlagen: {reason}', placeholders: ['reason'], only: ['app'] },
246
+ // --- Kasseneck Connect (nur Browser) -------------------------------------
247
+ 'connect.not_responding': { text: 'Kasseneck Connect antwortet nicht – läuft das Programm auf diesem Rechner?', only: ['web'] },
248
+ 'connect.code_expired': { text: 'Der Kopplungs-Code ist abgelaufen – im Agent einen neuen erzeugen („kasseneck-connect pair“).', only: ['web'] },
249
+ 'connect.too_many_attempts': { text: 'Zu viele Fehlversuche – eine Minute warten und noch einmal versuchen.', only: ['web'] },
250
+ 'connect.printer_not_responding': { text: 'Der Drucker antwortet nicht – Strom, Netzwerk und IP prüfen.', only: ['web'] },
251
+ 'connect.not_paired': { text: 'Diese Kasse ist mit Kasseneck Connect nicht gekoppelt – in den Einstellungen „Koppeln“ drücken.', only: ['web'] },
252
+ 'connect.printer_unknown': { text: 'Diesen Drucker kennt Kasseneck Connect nicht (mehr) – bitte neu suchen.', only: ['web'] },
253
+ 'connect.origin_not_allowed': { text: 'Kasseneck Connect nimmt von dieser Adresse nichts an (Ursprung nicht freigegeben).', only: ['web'] },
254
+ 'connect.not_installed': { text: 'Kasseneck Connect nicht gefunden – bitte installieren.', only: ['web'] },
255
+ 'connect.unpair_question': { text: 'Diesen Browser wirklich von Connect trennen? Der Bondruck geht dann nicht mehr.', only: ['web'] },
256
+ // --- Einstellungen -------------------------------------------------------
257
+ 'settings.load_failed': { text: 'Die Einstellungen konnten nicht geladen werden.' },
258
+ 'settings.save_failed': { text: 'Die Einstellung konnte nicht gespeichert werden.' },
259
+ 'settings.not_loaded_yet': { text: 'Noch nicht geladen – bitte kurz warten oder neu anmelden.' },
260
+ 'settings.ip_invalid': { text: 'Keine gültige IP-Adresse (z. B. 192.168.1.50).' },
261
+ 'unpairing.failed': { text: 'Entkoppeln fehlgeschlagen.' },
262
+ 'logo.upload_failed': { text: 'Hochladen fehlgeschlagen.' },
263
+ 'logo.remove_failed': { text: 'Entfernen fehlgeschlagen.' },
264
+ // --- Nur App -------------------------------------------------------------
265
+ 'app.not_in_browser': { text: 'Die Kassen-App läuft nicht im Browser – dafür gibt es kasse.kasseneck.at.', only: ['app'] },
266
+ 'app.open_in_browser': { text: 'Bitte im Browser öffnen: {target}', placeholders: ['target'], only: ['app'] },
267
+ };
268
+ // Auf den gemeinsamen Typ gebracht: `Object.entries(MESSAGES)` liefert sonst
269
+ // pro Schluessel den engsten Literaltyp, und `placeholders`/`only` waeren nur
270
+ // auf manchen Zweigen der Vereinigung vorhanden.
271
+ exports.MESSAGES = MELDUNGEN_ROH;
272
+ /**
273
+ * In welcher Reihenfolge ein Fehler eingeordnet wird, auf beiden Seiten
274
+ * dieselbe. Jede Regel nennt ihre Art (`kind`) und entweder ein Verhalten
275
+ * (`behavior`) oder den Schluessel des Satzes (`key`). Die Arten:
276
+ * api - HTTP 200, `status:'error'`: der Satz des Backends, woertlich
277
+ * (`server_text`)
278
+ * plain_text - schon fuer den Bildschirm geschrieben: sein eigener Text
279
+ * (`own_text`)
280
+ * timeout - die Frist lief ab, die Anfrage war draussen
281
+ * network - keine Verbindung zustande gekommen oder abgerissen
282
+ * unexpected - der Server hat geantwortet, aber nicht wie zugesagt
283
+ * (HTML statt JSON, 500, fehlende Huelle); `status` = HTTP-Code
284
+ * other - alles Uebrige ist technisch: der Ersatzsatz des Vorgangs
285
+ * (`fallback`)
286
+ * Unter 0.x hiessen sie `klartext`, `zeitablauf`, `netz`, `unerwartet`,
287
+ * `sonst` (Tabelle in `fixtures/renames-1.0.json`).
288
+ */
289
+ exports.ERROR_RULES = [
290
+ { kind: 'api', behavior: 'server_text' },
291
+ { kind: 'plain_text', behavior: 'own_text' },
292
+ { kind: 'timeout', key: 'network.timeout' },
293
+ { kind: 'network', key: 'network.no_connection' },
294
+ { kind: 'unexpected', key: 'server.unexpected' },
295
+ { kind: 'other', behavior: 'fallback' },
296
+ ];
297
+ /**
298
+ * Beleg per E-Mail senden: welcher `code` des Backends welchen Satz bekommt.
299
+ *
300
+ * `ERROR_RULES` bleibt davon unberuehrt – das hier ist keine neue Art, einen
301
+ * Transportfehler einzuordnen, sondern die Verfeinerung EINES Aufrufs
302
+ * (`sendReceiptEmail`). Die vier Ausgaenge sind fuer den Kassier vier
303
+ * verschiedene Handlungen: Adresse verbessern, spaeter noch einmal, noch
304
+ * einmal senden, Beleg suchen. Beide Kassen entscheiden am `code`, nicht am
305
+ * Satz des Backends — sonst haengt das Wort am Tresen an einer Formulierung,
306
+ * die sich im Backend jederzeit aendern darf.
307
+ *
308
+ * Bewusst ein Objekt und keine Liste in GROSSSCHRIFT: der
309
+ * Oberflaechen-Vertrag (`fixtures/surface.json`) liest jede exportierte
310
+ * Liste als Enum der Kasseneinstellungen ein, und der Dart-Zwilling schickt
311
+ * deren Werte durch `KasseSettings.aus`. Fehlercodes haben dort nichts
312
+ * verloren; sie stehen in `fixtures/pos-texts.json`.
313
+ *
314
+ * Die Codes sind die von `/v3` (`RECEIPT_EMAIL_SEND_ERROR_CODES`; Anmelde- und Rand-Codes fallen auf den Ersatzsatz); unter `/v1` hiessen
315
+ * sie `adresse_ungueltig`, `zu_oft`, `versand_fehlgeschlagen`, `beleg_nicht_gefunden`.
316
+ */
317
+ exports.RECEIPT_EMAIL_ERROR_MESSAGES = {
318
+ invalid_address: 'receipt.mail_address_invalid',
319
+ too_many_requests: 'receipt.mail_too_often',
320
+ send_failed: 'receipt.mail_failed',
321
+ receipt_not_found: 'receipt.mail_not_found',
322
+ };
323
+ /**
324
+ * Der Satz zu einem `code` des Backends. Einen Code, den dieses Paket noch
325
+ * nicht kennt, faengt der allgemeine Satz auf: das Senden ist gescheitert und
326
+ * darf wiederholt werden. Ein leerer Schirm waere schlimmer als ein zu
327
+ * allgemeiner Satz.
328
+ */
329
+ function receiptEmailErrorMessage(code) {
330
+ const fehler = exports.RECEIPT_EMAIL_ERROR_MESSAGES;
331
+ return (code !== undefined && code !== null && fehler[code]) || 'receipt.mail_failed';
332
+ }
333
+ /**
334
+ * Storno eines Belegs mit mehreren Zahlungen, dazu der offene Ausgang
335
+ * (`cancellation_outcome_unknown`, gilt fuer jedes Storno): welcher `code` des
336
+ * Backends unter `/v3` welchen Satz bekommt. Dieselbe Idee wie RECEIPT_EMAIL_ERROR_MESSAGES – beide Kassen
337
+ * entscheiden am Code, nie am Satz des Backends. Ein Code, der hier fehlt,
338
+ * geht den allgemeinen Weg der Storno-Fehler (`cancellation.failed`).
339
+ */
340
+ exports.CANCELLATION_PAYMENT_ERROR_MESSAGES = {
341
+ cancellation_payments_required: 'cancellation.payments_missing',
342
+ cancellation_refund_exceeds_payment: 'cancellation.refund_too_high',
343
+ cancellation_refund_reference_required: 'cancellation.refund_without_reference',
344
+ cancellation_refund_reference_unknown: 'cancellation.refund_reference_unknown',
345
+ payments_sum_mismatch: 'cancellation.sum_mismatch',
346
+ cancellation_outcome_unknown: 'cancellation.outcome_unknown',
347
+ };
348
+ /**
349
+ * Der Satz zu einem `code` des Backends beim Storno mit mehreren Zahlungen.
350
+ * Einen Code, den dieses Paket noch nicht kennt, faengt der allgemeine Satz
351
+ * `cancellation.failed` auf – wie bei `receiptEmailErrorMessage`.
352
+ */
353
+ function cancellationPaymentErrorMessage(code) {
354
+ const fehler = exports.CANCELLATION_PAYMENT_ERROR_MESSAGES;
355
+ return (code !== undefined && code !== null && fehler[code]) || 'cancellation.failed';
356
+ }
357
+ /**
358
+ * Beschriftungen: Knoepfe, Ueberschriften, Zeilennamen – was kein Satz ist.
359
+ *
360
+ * Getrennt von MESSAGES, weil dort jeder Eintrag ein Satz ist (gross am
361
+ * Anfang, Satzzeichen am Schluss) und die Waechter beider Kassen daran
362
+ * Saetze erkennen. „Rest" oder „÷ {n}" sind keine Saetze, muessen aber in
363
+ * beiden Kassen gleich heissen. Dieselben Regeln sonst: Schluessel
364
+ * `bereich.name`, nie umgedeutet, Platzhalter exakt die im Text, `only` nennt
365
+ * die Seite.
366
+ *
367
+ * Die Woerter der Zahlarten folgen dem Bon („Kartenzahlung", „Barzahlung",
368
+ * „Zahlung {n}", „davon Trinkgeld").
369
+ */
370
+ const BESCHRIFTUNGEN_ROH = {
371
+ // --- Allgemein -------------------------------------------------------------
372
+ 'common.cancel': { text: 'Abbrechen' },
373
+ // Das X an einer Meldung nennt, WELCHE es ausblendet – bei mehreren
374
+ // Meldungen in der Ecke sonst fuer Vorlese-Programme lauter gleiche Knoepfe.
375
+ // `{message}` ist der Anfang des Satzes (gekuerzt), nicht der ganze.
376
+ 'message.dismiss': { text: 'Meldung ausblenden: {message}', placeholders: ['message'] },
377
+ 'message.dismiss_warning': { text: 'Verstanden – Warnung ausblenden: {message}', placeholders: ['message'] },
378
+ // --- Kopplung und Abmelden -----------------------------------------------
379
+ 'pairing.pair_again': { text: 'Neu koppeln' },
380
+ 'logout.question': { text: 'Wirklich abmelden?' },
381
+ 'logout.keep_working': { text: 'Weiter arbeiten' },
382
+ 'device.unpair': { text: 'Gerät entkoppeln' },
383
+ 'connect.unpair_confirm': { text: 'Entkoppeln bestätigen', only: ['web'] },
384
+ // --- Kassieren -------------------------------------------------------------
385
+ // Dieselben Woerter im gewohnten Kassieren und je Zahlung bei „Getrennt“.
386
+ 'checkout.tip': { text: 'Trinkgeld' },
387
+ 'checkout.no_tip': { text: 'kein' },
388
+ 'checkout.custom_amount': { text: 'Eigener Betrag' },
389
+ 'checkout.exact': { text: 'passend' },
390
+ 'checkout.clear_tendered': { text: 'Gegeben löschen' },
391
+ 'checkout.still_missing': { text: 'Es fehlen noch' },
392
+ 'checkout.change': { text: 'Rückgeld' },
393
+ // Die Warte-Karte, solange der Betrag am Terminal steht; `{time}` ist der
394
+ // Rest des Kartenfensters als m:ss.
395
+ 'card_payment.amount_on_terminal': { text: 'Betrag steht am Terminal' },
396
+ 'card_payment.present_card': { text: 'Karte vorhalten oder stecken · noch {time}', placeholders: ['time'] },
397
+ // --- Abschluss -------------------------------------------------------------
398
+ 'completion.receipt_exists': { text: 'Beleg ist vorhanden – erledigen' },
399
+ 'completion.resolve': { text: 'Erledigen' },
400
+ // --- Getrennt zahlen -----------------------------------------------------
401
+ 'split.button': { text: 'Getrennt' },
402
+ 'split.setting': { text: 'Getrennt zahlen' },
403
+ 'split.to_pay': { text: 'Zu zahlen' },
404
+ 'split.open': { text: 'Offen' },
405
+ 'split.payment': { text: 'Zahlung {n}', placeholders: ['n'] },
406
+ 'split.amount': { text: 'Betrag' },
407
+ 'split.remaining': { text: 'Rest' },
408
+ 'split.divide': { text: '÷ {n}', placeholders: ['n'] },
409
+ 'split.tip_basis': { text: '% von diesem Betrag' },
410
+ 'split.of_which_tip': { text: 'davon Trinkgeld {amount}', placeholders: ['amount'] },
411
+ 'split.remove': { text: 'Entfernen' },
412
+ 'split.cancel_all': { text: 'Alles abbrechen' },
413
+ 'split.continue_checkout': { text: 'Weiter kassieren' },
414
+ 'split.reverse_all': { text: 'Alles zurückbuchen' },
415
+ 'split.reversed_on_terminal': { text: 'Am Terminal zurückgebucht' },
416
+ 'split.reverse_card': { text: 'Karte zurückbuchen' },
417
+ 'split.pair_again_anyway': { text: 'Trotzdem neu koppeln' },
418
+ 'split.keep_payment': { text: 'Zahlung behalten' },
419
+ 'split.clarify': { text: 'Klären' },
420
+ 'split.reverse_again': { text: 'Erneut zurückbuchen' },
421
+ 'split.was_charged': { text: 'Wurde belastet – übernehmen' },
422
+ 'split.not_charged': { text: 'Nicht belastet – verwerfen' },
423
+ // Aufteilung: eigener Schritt nach „Weiter“, Tabs „Nach Positionen“ / „Betrag“.
424
+ 'split.continue': { text: 'Weiter · {amount} getrennt', placeholders: ['amount'] },
425
+ 'split.allocation': { text: 'Aufteilung' },
426
+ 'split.back_to_payment_method': { text: 'Zurück zur Zahlart' },
427
+ 'split.tab_items': { text: 'Nach Positionen' },
428
+ 'split.tab_amount': { text: 'Betrag' },
429
+ 'split.one_less': { text: '{name}: ein Stück weniger', placeholders: ['name'] },
430
+ 'split.one_more': { text: '{name}: ein Stück mehr', placeholders: ['name'] },
431
+ 'split.tendered': { text: 'Gegeben (bar)' },
432
+ 'split.tendered_change': { text: 'Gegeben {tendered} · Rückgeld {change}', placeholders: ['tendered', 'change'] },
433
+ // Je Zahlung oben die Zahlart (Umschalter, kein Ausloeser), unten EIN Knopf,
434
+ // der diese Zahlung mit der gewaehlten Zahlart kassiert.
435
+ 'split.payment_method': { text: 'Zahlart' },
436
+ 'split.method_cash': { text: 'Bar' },
437
+ 'split.method_card': { text: 'Karte' },
438
+ 'split.add_payment': { text: 'Zahlung hinzufügen · {amount}', placeholders: ['amount'] },
439
+ // Nach Positionen: die offenen Stueck als Kacheln in der grossen Flaeche;
440
+ // Antippen nimmt ein Stueck in diese Zahlung, „−“ an der Kachel eines heraus.
441
+ 'split.open_items': { text: 'Offene Positionen' },
442
+ 'split.pieces_open': { text: '{n} offen', placeholders: ['n'] },
443
+ 'split.pieces_selected': { text: '{n} von {open}', placeholders: ['n', 'open'] },
444
+ 'split.nothing_selected': { text: 'Noch nichts angetippt' },
445
+ 'split.all_paid': { text: 'Alles bezahlt' },
446
+ // --- Zahlarten in Listen (Kassieren, Storno, Belegliste) -----------------
447
+ 'payment_method.card': { text: 'Kartenzahlung' },
448
+ 'payment_method.cash': { text: 'Barzahlung' },
449
+ // Beleg mit mehreren Zahlungen (`paymentMethod: 'mixed'` oder mehr als eine
450
+ // Zahlung): weder Bar noch Karte, auch nicht im Filter.
451
+ 'payment_method.multiple': { text: 'Mehrere' },
452
+ // --- Storno ----------------------------------------------------------------
453
+ 'cancellation.title': { text: 'Storno zu {receipt}', placeholders: ['receipt'] },
454
+ // --- Storno eines Belegs mit mehreren Zahlungen --------------------------
455
+ 'cancellation.how_to_refund': { text: 'Wie zurückgeben?' },
456
+ 'cancellation.as_paid': { text: 'wie bezahlt' },
457
+ 'cancellation.cash': { text: 'bar' },
458
+ 'cancellation.all_cash': { text: 'Alles bar' },
459
+ 'cancellation.payment_remainder': { text: 'Rest {amount}', placeholders: ['amount'] },
460
+ 'cancellation.difference': { text: 'Differenz' },
461
+ };
462
+ exports.LABELS = BESCHRIFTUNGEN_ROH;
463
+ /** Die Beschriftung zum Schluessel, Platzhalter ersetzt; fehlt ein Wert, wirft es wie `messageText`. */
464
+ function labelText(key, values = {}) {
465
+ return ersetze(`labelText(${key})`, exports.LABELS[key].text, values);
466
+ }
467
+ function ersetze(wo, text, werte) {
468
+ return text.replace(/\{([a-z]+)\}/g, (_, name) => {
469
+ const wert = werte[name];
470
+ if (wert === undefined)
471
+ throw new Error(`${wo}: Platzhalter {${name}} ohne Wert`);
472
+ return String(wert);
473
+ });
474
+ }
475
+ /** Der Satz zum Schluessel, Platzhalter ersetzt. Fehlt ein Wert, wirft es — ein `{status}` am Tresen waere schlimmer. */
476
+ function messageText(key, values = {}) {
477
+ const eintrag = exports.MESSAGES[key];
478
+ return eintrag.text.replace(/\{([a-z]+)\}/g, (_, name) => {
479
+ const wert = values[name];
480
+ if (wert === undefined)
481
+ throw new Error(`messageText(${key}): Platzhalter {${name}} ohne Wert`);
482
+ return String(wert);
483
+ });
484
+ }
485
+ /** Gilt der Satz auf dieser Seite? */
486
+ function messageAppliesTo(key, surface) {
487
+ const eintrag = exports.MESSAGES[key];
488
+ return eintrag.only === undefined || eintrag.only.includes(surface);
489
+ }
@@ -7,4 +7,4 @@ import type { TipRecipient } from '../models/index.js';
7
7
  * wird beim Verkauf nicht zurueckgewiesen. Ist ein Kassen-Benutzer ohne das
8
8
  * Recht `tipAssign` angemeldet, steht nur er selbst darin.
9
9
  */
10
- export declare function listMyTipRecipients(rufen: InternerTransport): Promise<TipRecipient[]>;
10
+ export declare function listMyTipRecipients(transport: InternerTransport): Promise<TipRecipient[]>;
@@ -9,8 +9,8 @@ const errors_js_1 = require("../client/errors.js");
9
9
  * wird beim Verkauf nicht zurueckgewiesen. Ist ein Kassen-Benutzer ohne das
10
10
  * Recht `tipAssign` angemeldet, steht nur er selbst darin.
11
11
  */
12
- async function listMyTipRecipients(rufen) {
13
- const daten = await rufen('listMyTipRecipients');
12
+ async function listMyTipRecipients(transport) {
13
+ const daten = await transport('listMyTipRecipients');
14
14
  const roh = daten?.recipients;
15
15
  if (!Array.isArray(roh)) {
16
16
  // Keine Liste ist etwas anderes als eine leere Liste: „noch niemand