@kreiseck/kasseneck-api 0.30.0 → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (717) hide show
  1. package/CHANGELOG.md +433 -0
  2. package/README.de.md +11 -7
  3. package/README.md +486 -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 +78 -19
  13. package/dist/cjs/client/errors.js +107 -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 +214 -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 +222 -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/{esm/rechnung → cjs/invoice}/vertrag.d.ts +97 -71
  48. package/dist/cjs/{rechnung → invoice}/vertrag.js +144 -82
  49. package/dist/cjs/models/cancellation.d.ts +53 -21
  50. package/dist/cjs/models/cancellation.js +94 -42
  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-payment.d.ts +2 -1
  66. package/dist/cjs/models/receipt-summary.d.ts +10 -4
  67. package/dist/cjs/models/receipt-summary.js +10 -4
  68. package/dist/cjs/models/receipt.d.ts +31 -2
  69. package/dist/cjs/models/receipt.js +28 -1
  70. package/dist/cjs/models/voucher.d.ts +7 -6
  71. package/dist/cjs/models/voucher.js +2 -7
  72. package/dist/cjs/partner/ablauf.d.ts +10 -10
  73. package/dist/cjs/partner/ablauf.js +29 -29
  74. package/dist/cjs/partner/api.d.ts +26 -23
  75. package/dist/cjs/partner/api.js +11 -13
  76. package/dist/cjs/partner/auth.d.ts +1 -1
  77. package/dist/cjs/partner/auth.js +2 -2
  78. package/dist/cjs/partner/betrieb.d.ts +7 -7
  79. package/dist/cjs/partner/betrieb.js +10 -10
  80. package/dist/cjs/partner/endpunkte.d.ts +27 -14
  81. package/dist/cjs/partner/endpunkte.js +80 -39
  82. package/dist/cjs/partner/fehler.d.ts +60 -30
  83. package/dist/cjs/partner/fehler.js +99 -43
  84. package/dist/cjs/partner/index.d.ts +13 -12
  85. package/dist/cjs/partner/index.js +35 -22
  86. package/dist/cjs/partner/secret.d.ts +3 -3
  87. package/dist/cjs/partner/secret.js +6 -6
  88. package/dist/cjs/partner/typen.d.ts +129 -71
  89. package/dist/cjs/partner/typen.js +76 -3
  90. package/dist/cjs/partner/webhook-signatur.d.ts +2 -2
  91. package/dist/cjs/partner/webhook-signatur.js +12 -12
  92. package/dist/cjs/partner/webhooks.d.ts +60 -32
  93. package/dist/cjs/partner/webhooks.js +40 -34
  94. package/dist/cjs/payments/hobex-hps/transaction-response.js +28 -28
  95. package/dist/cjs/payments/hobex.d.ts +2 -2
  96. package/dist/cjs/payments/hobex.js +4 -4
  97. package/dist/cjs/payments/stripe.d.ts +2 -2
  98. package/dist/cjs/payments/stripe.js +4 -4
  99. package/dist/cjs/pos/artikel.d.ts +90 -0
  100. package/dist/cjs/pos/artikel.js +89 -0
  101. package/dist/cjs/pos/client.d.ts +27 -0
  102. package/dist/cjs/pos/client.js +144 -0
  103. package/dist/cjs/pos/drucker.d.ts +86 -0
  104. package/dist/cjs/pos/drucker.js +78 -0
  105. package/dist/cjs/pos/errors.d.ts +36 -0
  106. package/dist/cjs/pos/errors.js +95 -0
  107. package/dist/cjs/pos/index.d.ts +15 -0
  108. package/dist/cjs/pos/index.js +102 -0
  109. package/dist/cjs/pos/settings.d.ts +313 -0
  110. package/dist/cjs/pos/settings.js +376 -0
  111. package/dist/cjs/pos/texte.d.ts +883 -0
  112. package/dist/cjs/pos/texte.js +489 -0
  113. package/dist/cjs/{kasse → pos}/trinkgeld.d.ts +1 -1
  114. package/dist/cjs/{kasse → pos}/trinkgeld.js +2 -2
  115. package/dist/cjs/printing/escpos.d.ts +29 -29
  116. package/dist/cjs/printing/escpos.js +61 -61
  117. package/dist/cjs/printing/index.d.ts +2 -2
  118. package/dist/cjs/printing/index.js +17 -17
  119. package/dist/cjs/printing/qr-groesse.d.ts +38 -38
  120. package/dist/cjs/printing/qr-groesse.js +47 -47
  121. package/dist/cjs/printing/webusb.d.ts +2 -2
  122. package/dist/cjs/printing/webusb.js +4 -4
  123. package/dist/cjs/react/index.d.ts +21 -21
  124. package/dist/cjs/react/index.js +40 -30
  125. package/dist/cjs/receipt/bild.d.ts +4 -4
  126. package/dist/cjs/receipt/bild.js +11 -11
  127. package/dist/cjs/receipt/blatt.d.ts +46 -46
  128. package/dist/cjs/receipt/blatt.js +59 -59
  129. package/dist/cjs/receipt/discount.d.ts +1 -1
  130. package/dist/cjs/receipt/discount.js +8 -8
  131. package/dist/cjs/receipt/due.d.ts +86 -0
  132. package/dist/cjs/receipt/due.js +261 -0
  133. package/dist/cjs/receipt/epos.d.ts +22 -22
  134. package/dist/cjs/receipt/epos.js +45 -45
  135. package/dist/cjs/receipt/grid.d.ts +10 -10
  136. package/dist/cjs/receipt/grid.js +20 -20
  137. package/dist/cjs/receipt/index.d.ts +9 -8
  138. package/dist/cjs/receipt/index.js +26 -23
  139. package/dist/cjs/receipt/layout-escpos.d.ts +24 -24
  140. package/dist/cjs/receipt/layout-escpos.js +49 -49
  141. package/dist/cjs/receipt/layout.d.ts +28 -23
  142. package/dist/cjs/receipt/layout.js +45 -21
  143. package/dist/cjs/receipt/marke-daten.d.ts +8 -8
  144. package/dist/cjs/receipt/marke-daten.js +8 -8
  145. package/dist/cjs/receipt/marke.d.ts +7 -7
  146. package/dist/cjs/receipt/marke.js +10 -10
  147. package/dist/cjs/register/errors.d.ts +61 -0
  148. package/dist/cjs/register/errors.js +112 -0
  149. package/dist/cjs/register/index.d.ts +14 -1
  150. package/dist/cjs/register/index.js +20 -1
  151. package/dist/cjs/register/pairing.d.ts +55 -36
  152. package/dist/cjs/register/pairing.js +33 -29
  153. package/dist/cjs/register/session.d.ts +5 -5
  154. package/dist/cjs/register/session.js +7 -7
  155. package/dist/cjs/stored/draht.d.ts +45 -0
  156. package/dist/cjs/stored/draht.js +220 -0
  157. package/dist/cjs/stored/einstellungen.d.ts +23 -0
  158. package/dist/cjs/stored/einstellungen.js +200 -0
  159. package/dist/cjs/stored/index.d.ts +109 -0
  160. package/dist/cjs/stored/index.js +225 -0
  161. package/dist/cjs/stored/vokabular.d.ts +18 -0
  162. package/dist/cjs/stored/vokabular.js +389 -0
  163. package/dist/cjs/version.d.ts +7 -0
  164. package/dist/cjs/version.js +10 -0
  165. package/dist/cjs/vienna-time.d.ts +1 -1
  166. package/dist/cjs/vienna-time.js +2 -2
  167. package/dist/esm/client/api.d.ts +7 -6
  168. package/dist/esm/client/api.js +4 -4
  169. package/dist/esm/client/aufrufe.d.ts +29 -5
  170. package/dist/esm/client/aufrufe.js +111 -1
  171. package/dist/esm/client/auth.d.ts +2 -0
  172. package/dist/esm/client/auth.js +16 -1
  173. package/dist/esm/client/cashregisters.d.ts +1 -1
  174. package/dist/esm/client/cashregisters.js +2 -2
  175. package/dist/esm/client/errors.d.ts +78 -19
  176. package/dist/esm/client/errors.js +105 -27
  177. package/dist/esm/client/fehlercodes.d.ts +9 -0
  178. package/dist/esm/client/fehlercodes.js +32 -0
  179. package/dist/esm/client/index.d.ts +5 -5
  180. package/dist/esm/client/index.js +5 -5
  181. package/dist/esm/client/receipts.d.ts +131 -124
  182. package/dist/esm/client/receipts.js +213 -140
  183. package/dist/esm/client/reports.d.ts +26 -4
  184. package/dist/esm/client/reports.js +36 -4
  185. package/dist/esm/client/status.d.ts +3 -3
  186. package/dist/esm/client/status.js +7 -7
  187. package/dist/esm/client/transport.d.ts +56 -4
  188. package/dist/esm/client/transport.js +221 -24
  189. package/dist/esm/enums/vat-rate.d.ts +2 -2
  190. package/dist/esm/enums/vat-rate.js +1 -1
  191. package/dist/esm/index.d.ts +4 -3
  192. package/dist/esm/index.js +4 -3
  193. package/dist/{cjs/rechnung → esm/invoice}/api.d.ts +18 -17
  194. package/dist/esm/{rechnung → invoice}/api.js +6 -6
  195. package/dist/{cjs/rechnung → esm/invoice}/auth.d.ts +2 -2
  196. package/dist/esm/{rechnung → invoice}/auth.js +4 -4
  197. package/dist/{cjs/rechnung/rechnen.d.ts → esm/invoice/calc.d.ts} +27 -27
  198. package/dist/esm/{rechnung/rechnen.js → invoice/calc.js} +45 -45
  199. package/dist/{cjs/rechnung → esm/invoice}/endpunkte.d.ts +23 -21
  200. package/dist/esm/{rechnung → invoice}/endpunkte.js +52 -42
  201. package/dist/esm/invoice/fehler.d.ts +31 -0
  202. package/dist/esm/invoice/fehler.js +33 -0
  203. package/dist/esm/invoice/index.d.ts +21 -0
  204. package/dist/esm/invoice/index.js +20 -0
  205. package/dist/esm/{rechnung → invoice}/summen.d.ts +12 -12
  206. package/dist/esm/{rechnung → invoice}/summen.js +12 -12
  207. package/dist/esm/invoice/texte.d.ts +224 -0
  208. package/dist/esm/invoice/texte.js +421 -0
  209. package/dist/{cjs/rechnung → esm/invoice}/typen.d.ts +32 -11
  210. package/dist/{cjs/rechnung → esm/invoice}/vertrag.d.ts +97 -71
  211. package/dist/esm/{rechnung → invoice}/vertrag.js +143 -81
  212. package/dist/esm/models/cancellation.d.ts +53 -21
  213. package/dist/esm/models/cancellation.js +90 -41
  214. package/dist/esm/models/hobex-receipt.d.ts +3 -3
  215. package/dist/esm/models/hobex-receipt.js +35 -35
  216. package/dist/esm/models/index.d.ts +6 -5
  217. package/dist/esm/models/index.js +6 -5
  218. package/dist/esm/models/payment-errors.d.ts +32 -15
  219. package/dist/esm/models/payment-errors.js +77 -32
  220. package/dist/esm/models/receipt-company.d.ts +6 -5
  221. package/dist/esm/models/receipt-company.js +4 -4
  222. package/dist/esm/models/receipt-email.d.ts +32 -18
  223. package/dist/esm/models/receipt-email.js +65 -23
  224. package/dist/esm/models/receipt-errors.d.ts +39 -0
  225. package/dist/esm/models/receipt-errors.js +87 -0
  226. package/dist/esm/models/receipt-item.d.ts +9 -1
  227. package/dist/esm/models/receipt-item.js +3 -0
  228. package/dist/esm/models/receipt-payment.d.ts +2 -1
  229. package/dist/esm/models/receipt-summary.d.ts +10 -4
  230. package/dist/esm/models/receipt-summary.js +9 -3
  231. package/dist/esm/models/receipt.d.ts +31 -2
  232. package/dist/esm/models/receipt.js +28 -2
  233. package/dist/esm/models/voucher.d.ts +7 -6
  234. package/dist/esm/models/voucher.js +2 -7
  235. package/dist/esm/partner/ablauf.d.ts +10 -10
  236. package/dist/esm/partner/ablauf.js +27 -27
  237. package/dist/esm/partner/api.d.ts +26 -23
  238. package/dist/esm/partner/api.js +13 -15
  239. package/dist/esm/partner/auth.d.ts +1 -1
  240. package/dist/esm/partner/auth.js +2 -2
  241. package/dist/esm/partner/betrieb.d.ts +7 -7
  242. package/dist/esm/partner/betrieb.js +8 -8
  243. package/dist/esm/partner/endpunkte.d.ts +27 -14
  244. package/dist/esm/partner/endpunkte.js +79 -39
  245. package/dist/esm/partner/fehler.d.ts +60 -30
  246. package/dist/esm/partner/fehler.js +91 -35
  247. package/dist/esm/partner/index.d.ts +13 -12
  248. package/dist/esm/partner/index.js +12 -11
  249. package/dist/esm/partner/secret.d.ts +3 -3
  250. package/dist/esm/partner/secret.js +5 -5
  251. package/dist/esm/partner/typen.d.ts +129 -71
  252. package/dist/esm/partner/typen.js +75 -2
  253. package/dist/esm/partner/webhook-signatur.d.ts +2 -2
  254. package/dist/esm/partner/webhook-signatur.js +12 -12
  255. package/dist/esm/partner/webhooks.d.ts +60 -32
  256. package/dist/esm/partner/webhooks.js +38 -32
  257. package/dist/esm/payments/hobex-hps/transaction-response.js +28 -28
  258. package/dist/esm/payments/hobex.d.ts +2 -2
  259. package/dist/esm/payments/hobex.js +4 -4
  260. package/dist/esm/payments/stripe.d.ts +2 -2
  261. package/dist/esm/payments/stripe.js +4 -4
  262. package/dist/esm/pos/artikel.d.ts +90 -0
  263. package/dist/esm/pos/artikel.js +79 -0
  264. package/dist/esm/pos/client.d.ts +27 -0
  265. package/dist/esm/pos/client.js +137 -0
  266. package/dist/esm/pos/drucker.d.ts +86 -0
  267. package/dist/esm/pos/drucker.js +71 -0
  268. package/dist/esm/pos/errors.d.ts +36 -0
  269. package/dist/esm/pos/errors.js +88 -0
  270. package/dist/esm/pos/index.d.ts +15 -0
  271. package/dist/esm/pos/index.js +20 -0
  272. package/dist/esm/pos/settings.d.ts +313 -0
  273. package/dist/esm/pos/settings.js +367 -0
  274. package/dist/esm/pos/texte.d.ts +883 -0
  275. package/dist/esm/pos/texte.js +481 -0
  276. package/dist/esm/{kasse → pos}/trinkgeld.d.ts +1 -1
  277. package/dist/esm/{kasse → pos}/trinkgeld.js +2 -2
  278. package/dist/esm/printing/escpos.d.ts +29 -29
  279. package/dist/esm/printing/escpos.js +56 -56
  280. package/dist/esm/printing/index.d.ts +2 -2
  281. package/dist/esm/printing/index.js +2 -2
  282. package/dist/esm/printing/qr-groesse.d.ts +38 -38
  283. package/dist/esm/printing/qr-groesse.js +42 -42
  284. package/dist/esm/printing/webusb.d.ts +2 -2
  285. package/dist/esm/printing/webusb.js +4 -4
  286. package/dist/esm/react/index.d.ts +21 -21
  287. package/dist/esm/react/index.js +39 -29
  288. package/dist/esm/receipt/bild.d.ts +4 -4
  289. package/dist/esm/receipt/bild.js +11 -11
  290. package/dist/esm/receipt/blatt.d.ts +46 -46
  291. package/dist/esm/receipt/blatt.js +55 -55
  292. package/dist/esm/receipt/discount.d.ts +1 -1
  293. package/dist/esm/receipt/discount.js +7 -7
  294. package/dist/esm/receipt/due.d.ts +86 -0
  295. package/dist/esm/receipt/due.js +257 -0
  296. package/dist/esm/receipt/epos.d.ts +22 -22
  297. package/dist/esm/receipt/epos.js +47 -47
  298. package/dist/esm/receipt/grid.d.ts +10 -10
  299. package/dist/esm/receipt/grid.js +18 -18
  300. package/dist/esm/receipt/index.d.ts +9 -8
  301. package/dist/esm/receipt/index.js +9 -8
  302. package/dist/esm/receipt/layout-escpos.d.ts +24 -24
  303. package/dist/esm/receipt/layout-escpos.js +51 -51
  304. package/dist/esm/receipt/layout.d.ts +28 -23
  305. package/dist/esm/receipt/layout.js +44 -20
  306. package/dist/esm/receipt/marke-daten.d.ts +8 -8
  307. package/dist/esm/receipt/marke-daten.js +7 -7
  308. package/dist/esm/receipt/marke.d.ts +7 -7
  309. package/dist/esm/receipt/marke.js +10 -10
  310. package/dist/esm/register/errors.d.ts +61 -0
  311. package/dist/esm/register/errors.js +104 -0
  312. package/dist/esm/register/index.d.ts +14 -1
  313. package/dist/esm/register/index.js +13 -0
  314. package/dist/esm/register/pairing.d.ts +55 -36
  315. package/dist/esm/register/pairing.js +33 -29
  316. package/dist/esm/register/session.d.ts +5 -5
  317. package/dist/esm/register/session.js +7 -7
  318. package/dist/esm/stored/draht.d.ts +45 -0
  319. package/dist/esm/stored/draht.js +208 -0
  320. package/dist/esm/stored/einstellungen.d.ts +23 -0
  321. package/dist/esm/stored/einstellungen.js +196 -0
  322. package/dist/esm/stored/index.d.ts +109 -0
  323. package/dist/esm/stored/index.js +217 -0
  324. package/dist/esm/stored/vokabular.d.ts +18 -0
  325. package/dist/esm/stored/vokabular.js +386 -0
  326. package/dist/esm/version.d.ts +7 -0
  327. package/dist/esm/version.js +7 -0
  328. package/dist/esm/vienna-time.d.ts +1 -1
  329. package/dist/esm/vienna-time.js +2 -2
  330. package/fixtures/{erwartet/storno-rabatt.lines.json → expected/cancellation-discount.lines.json} +2 -2
  331. package/fixtures/expected/cancellation-discount.sheet32.json +248 -0
  332. package/fixtures/{erwartet/storno-rabatt.blatt48.json → expected/cancellation-discount.sheet48.json} +119 -119
  333. package/fixtures/{erwartet/storno-voll.lines.json → expected/cancellation-full.lines.json} +2 -2
  334. package/fixtures/expected/cancellation-full.sheet32.json +218 -0
  335. package/fixtures/{erwartet/storno-voll.blatt48.json → expected/cancellation-full.sheet48.json} +107 -107
  336. package/fixtures/{erwartet/storno-teil.lines.json → expected/cancellation-partial.lines.json} +2 -2
  337. package/fixtures/expected/cancellation-partial.sheet32.json +206 -0
  338. package/fixtures/{erwartet/storno-teil.blatt48.json → expected/cancellation-partial.sheet48.json} +101 -101
  339. package/fixtures/{erwartet/storno-split-voll.lines.json → expected/cancellation-split-full.lines.json} +2 -2
  340. package/fixtures/expected/cancellation-split-full.sheet32.json +320 -0
  341. package/fixtures/{erwartet/storno-split-voll.blatt48.json → expected/cancellation-split-full.sheet48.json} +158 -158
  342. package/fixtures/{erwartet/storno-split-teil.lines.json → expected/cancellation-split-partial.lines.json} +2 -2
  343. package/fixtures/expected/cancellation-split-partial.sheet32.json +230 -0
  344. package/fixtures/{erwartet/storno-split-teil.blatt48.json → expected/cancellation-split-partial.sheet48.json} +113 -113
  345. package/fixtures/{erwartet/karte-eigener.lines.json → expected/card-custom.lines.json} +1 -1
  346. package/fixtures/expected/card-custom.sheet32.json +158 -0
  347. package/fixtures/{erwartet/karte-eigener.blatt48.json → expected/card-custom.sheet48.json} +80 -80
  348. package/fixtures/{erwartet/karte-gptom-ios.lines.json → expected/card-gptom-ios.lines.json} +1 -1
  349. package/fixtures/expected/card-gptom-ios.sheet32.json +230 -0
  350. package/fixtures/{erwartet/karte-gptom-ios.blatt48.json → expected/card-gptom-ios.sheet48.json} +116 -116
  351. package/fixtures/{erwartet/karte-gptom.lines.json → expected/card-gptom.lines.json} +1 -1
  352. package/fixtures/expected/card-gptom.sheet32.json +230 -0
  353. package/fixtures/{erwartet/karte-gptom.blatt48.json → expected/card-gptom.sheet48.json} +116 -116
  354. package/fixtures/{erwartet/karte-hobex-cloud.lines.json → expected/card-hobex-cloud.lines.json} +1 -1
  355. package/fixtures/expected/card-hobex-cloud.sheet32.json +200 -0
  356. package/fixtures/{erwartet/karte-hobex-cloud.blatt48.json → expected/card-hobex-cloud.sheet48.json} +101 -101
  357. package/fixtures/{erwartet/karte-hobex-hps.lines.json → expected/card-hobex-hps.lines.json} +1 -1
  358. package/fixtures/expected/card-hobex-hps.sheet32.json +224 -0
  359. package/fixtures/{erwartet/karte-hobex-hps.blatt48.json → expected/card-hobex-hps.sheet48.json} +113 -113
  360. package/fixtures/{erwartet/karte-mypos.lines.json → expected/card-mypos.lines.json} +1 -1
  361. package/fixtures/expected/card-mypos.sheet32.json +254 -0
  362. package/fixtures/{erwartet/karte-mypos.blatt48.json → expected/card-mypos.sheet48.json} +122 -122
  363. package/fixtures/{erwartet/karte-stripe-eps.lines.json → expected/card-stripe-eps.lines.json} +1 -1
  364. package/fixtures/expected/card-stripe-eps.sheet32.json +194 -0
  365. package/fixtures/{erwartet/karte-stripe-eps.blatt48.json → expected/card-stripe-eps.sheet48.json} +98 -98
  366. package/fixtures/{erwartet/karte-stripe.lines.json → expected/card-stripe.lines.json} +1 -1
  367. package/fixtures/expected/card-stripe.sheet32.json +212 -0
  368. package/fixtures/{erwartet/karte-stripe.blatt48.json → expected/card-stripe.sheet48.json} +107 -107
  369. package/fixtures/{erwartet/karte-sumup.lines.json → expected/card-sumup.lines.json} +1 -1
  370. package/fixtures/expected/card-sumup.sheet32.json +218 -0
  371. package/fixtures/{erwartet/karte-sumup.blatt48.json → expected/card-sumup.sheet48.json} +104 -104
  372. package/fixtures/{erwartet/rabattzeilen.lines.json → expected/discount-lines.lines.json} +1 -1
  373. package/fixtures/expected/discount-lines.sheet32.json +200 -0
  374. package/fixtures/{erwartet/rabattzeilen.blatt48.json → expected/discount-lines.sheet48.json} +98 -98
  375. package/fixtures/{erwartet/rabatt-chef-trinkgeld.lines.json → expected/discount-owner-tip.lines.json} +1 -1
  376. package/fixtures/expected/discount-owner-tip.sheet32.json +212 -0
  377. package/fixtures/{erwartet/rabatt-chef-trinkgeld.blatt48.json → expected/discount-owner-tip.sheet48.json} +104 -104
  378. package/fixtures/{erwartet/rabatt-einfach.lines.json → expected/discount-simple.lines.json} +1 -1
  379. package/fixtures/expected/discount-simple.sheet32.json +182 -0
  380. package/fixtures/{erwartet/rabatt-einfach.blatt48.json → expected/discount-simple.sheet48.json} +89 -89
  381. package/fixtures/{erwartet/rabatt-trinkgeld.lines.json → expected/discount-tip.lines.json} +1 -1
  382. package/fixtures/expected/discount-tip.sheet32.json +212 -0
  383. package/fixtures/{erwartet/rabatt-trinkgeld.blatt48.json → expected/discount-tip.sheet48.json} +104 -104
  384. package/fixtures/{erwartet/rabatt-wertgutschein.lines.json → expected/discount-value-voucher.lines.json} +1 -1
  385. package/fixtures/expected/discount-value-voucher.sheet32.json +218 -0
  386. package/fixtures/{erwartet/rabatt-wertgutschein.blatt48.json → expected/discount-value-voucher.sheet48.json} +107 -107
  387. package/fixtures/{erwartet/langer-artikelname.lines.json → expected/long-item-name.lines.json} +1 -1
  388. package/fixtures/expected/long-item-name.sheet32.json +176 -0
  389. package/fixtures/{erwartet/langer-artikelname.blatt48.json → expected/long-item-name.sheet48.json} +86 -86
  390. package/fixtures/{erwartet/verkauf-karte.lines.json → expected/sale-card.lines.json} +1 -1
  391. package/fixtures/expected/sale-card.sheet32.json +176 -0
  392. package/fixtures/{erwartet/verkauf-karte.blatt48.json → expected/sale-card.sheet48.json} +86 -86
  393. package/fixtures/{erwartet/verkauf-bar.lines.json → expected/sale-cash.lines.json} +1 -1
  394. package/fixtures/expected/sale-cash.sheet32.json +176 -0
  395. package/fixtures/{erwartet/verkauf-bar.blatt48.json → expected/sale-cash.sheet48.json} +86 -86
  396. package/fixtures/{erwartet/verkauf-kleinunternehmer.lines.json → expected/sale-small-business.lines.json} +1 -1
  397. package/fixtures/expected/sale-small-business.sheet32.json +182 -0
  398. package/fixtures/{erwartet/verkauf-kleinunternehmer.blatt48.json → expected/sale-small-business.sheet48.json} +89 -89
  399. package/fixtures/{erwartet/signaturausfall-verkauf.lines.json → expected/signature-outage-sale.lines.json} +1 -1
  400. package/fixtures/expected/signature-outage-sale.sheet32.json +194 -0
  401. package/fixtures/{erwartet/signaturausfall-verkauf.blatt48.json → expected/signature-outage-sale.sheet48.json} +92 -92
  402. package/fixtures/{erwartet/split-karte-karte-bar.lines.json → expected/split-card-card-cash.lines.json} +1 -1
  403. package/fixtures/expected/split-card-card-cash.sheet32.json +356 -0
  404. package/fixtures/{erwartet/split-karte-karte-bar.blatt48.json → expected/split-card-card-cash.sheet48.json} +170 -170
  405. package/fixtures/{erwartet/split-bar-rueckgeld.lines.json → expected/split-cash-change.lines.json} +1 -1
  406. package/fixtures/expected/split-cash-change.sheet32.json +194 -0
  407. package/fixtures/{erwartet/split-bar-rueckgeld.blatt48.json → expected/split-cash-change.sheet48.json} +92 -92
  408. package/fixtures/{erwartet/split-langer-betrag.lines.json → expected/split-long-amount.lines.json} +1 -1
  409. package/fixtures/expected/split-long-amount.sheet32.json +266 -0
  410. package/fixtures/{erwartet/split-langer-betrag.blatt48.json → expected/split-long-amount.sheet48.json} +131 -131
  411. package/fixtures/{erwartet/split-eine-karte-trinkgeld.lines.json → expected/split-one-card-tip.lines.json} +1 -1
  412. package/fixtures/expected/split-one-card-tip.sheet32.json +242 -0
  413. package/fixtures/{erwartet/split-eine-karte-trinkgeld.blatt48.json → expected/split-one-card-tip.sheet48.json} +113 -113
  414. package/fixtures/{erwartet/split-tischrunde-trinkgeld.lines.json → expected/split-table-round-tip.lines.json} +1 -1
  415. package/fixtures/expected/split-table-round-tip.sheet32.json +470 -0
  416. package/fixtures/{erwartet/split-tischrunde-trinkgeld.blatt48.json → expected/split-table-round-tip.sheet48.json} +218 -218
  417. package/fixtures/{erwartet/split-trinkgeld-karte.lines.json → expected/split-tip-card.lines.json} +1 -1
  418. package/fixtures/expected/split-tip-card.sheet32.json +272 -0
  419. package/fixtures/{erwartet/split-trinkgeld-karte.blatt48.json → expected/split-tip-card.sheet48.json} +128 -128
  420. package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.lines.json → expected/split-two-cards-same-provider.lines.json} +1 -1
  421. package/fixtures/expected/split-two-cards-same-provider.sheet32.json +326 -0
  422. package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.blatt48.json → expected/split-two-cards-same-provider.sheet48.json} +149 -149
  423. package/fixtures/{erwartet/testkasse-verkauf.lines.json → expected/test-cashregister-sale.lines.json} +3 -3
  424. package/fixtures/expected/test-cashregister-sale.sheet32.json +224 -0
  425. package/fixtures/{erwartet/testkasse-verkauf.blatt48.json → expected/test-cashregister-sale.sheet48.json} +110 -110
  426. package/fixtures/{erwartet/testsignatur-verkauf.lines.json → expected/test-signature-sale.lines.json} +3 -3
  427. package/fixtures/expected/test-signature-sale.sheet32.json +236 -0
  428. package/fixtures/{erwartet/testsignatur-verkauf.blatt48.json → expected/test-signature-sale.sheet48.json} +110 -110
  429. package/fixtures/{erwartet → expected}/training.lines.json +2 -2
  430. package/fixtures/expected/training.sheet32.json +236 -0
  431. package/fixtures/{erwartet/training.blatt48.json → expected/training.sheet48.json} +110 -110
  432. package/fixtures/{erwartet/null-jahr.lines.json → expected/zero-annual.lines.json} +2 -2
  433. package/fixtures/expected/zero-annual.sheet32.json +212 -0
  434. package/fixtures/{erwartet/null-jahr.blatt48.json → expected/zero-annual.sheet48.json} +95 -95
  435. package/fixtures/{erwartet/null-schluss.lines.json → expected/zero-final.lines.json} +2 -2
  436. package/fixtures/expected/zero-final.sheet32.json +206 -0
  437. package/fixtures/{erwartet/null-schluss.blatt48.json → expected/zero-final.sheet48.json} +95 -95
  438. package/fixtures/{erwartet/null-pruef.lines.json → expected/zero-manual.lines.json} +2 -2
  439. package/fixtures/expected/zero-manual.sheet32.json +206 -0
  440. package/fixtures/{erwartet/null-pruef.blatt48.json → expected/zero-manual.sheet48.json} +95 -95
  441. package/fixtures/{erwartet/null-monat.lines.json → expected/zero-monthly.lines.json} +2 -2
  442. package/fixtures/expected/zero-monthly.sheet32.json +206 -0
  443. package/fixtures/{erwartet/null-monat.blatt48.json → expected/zero-monthly.sheet48.json} +95 -95
  444. package/fixtures/{erwartet/null-ausfall.lines.json → expected/zero-outage-end.lines.json} +2 -2
  445. package/fixtures/expected/zero-outage-end.sheet32.json +206 -0
  446. package/fixtures/{erwartet/null-ausfall.blatt48.json → expected/zero-outage-end.sheet48.json} +95 -95
  447. package/fixtures/{erwartet/null-start.lines.json → expected/zero-start.lines.json} +2 -2
  448. package/fixtures/expected/zero-start.sheet32.json +206 -0
  449. package/fixtures/{erwartet/null-start.blatt48.json → expected/zero-start.sheet48.json} +95 -95
  450. package/fixtures/hobex-hps-codes.json +40 -40
  451. package/fixtures/invoice-api-examples/brands-ok.json +8 -0
  452. package/fixtures/{rechnung-api-beispiele/credit-fehler-grund.json → invoice-api-examples/credit-error-reason.json} +6 -6
  453. package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/credit-ok.json +6 -6
  454. package/fixtures/{rechnung-api-beispiele/customer-fehler-uid.json → invoice-api-examples/customer-error-vat-id.json} +4 -4
  455. package/fixtures/invoice-api-examples/customer-get-error-both.json +15 -0
  456. package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/customer-ok.json +4 -4
  457. package/fixtures/{rechnung-api-beispiele/customer-search-fehler-leer.json → invoice-api-examples/customer-search-error-empty.json} +4 -4
  458. package/fixtures/{rechnung-api-beispiele/issue-rabatt.json → invoice-api-examples/issue-discount.json} +6 -6
  459. package/fixtures/{rechnung-api-beispiele/issue-englisch.json → invoice-api-examples/issue-english.json} +7 -7
  460. package/fixtures/{rechnung-api-beispiele/issue-fehler-cent.json → invoice-api-examples/issue-error-cent.json} +6 -6
  461. package/fixtures/{rechnung-api-beispiele/issue-fehler-sprache.json → invoice-api-examples/issue-error-language.json} +5 -5
  462. package/fixtures/{rechnung-api-beispiele/issue-fehler-negativ.json → invoice-api-examples/issue-error-negative.json} +6 -6
  463. package/fixtures/{rechnung-api-beispiele/issue-fehler-zahlungsart.json → invoice-api-examples/issue-error-payment-method.json} +8 -6
  464. package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-beide.json → invoice-api-examples/issue-error-price-both.json} +6 -6
  465. package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-fehlt.json → invoice-api-examples/issue-error-price-missing.json} +6 -6
  466. package/fixtures/{rechnung-api-beispiele/issue-fehler-menge.json → invoice-api-examples/issue-error-quantity.json} +6 -6
  467. package/fixtures/{rechnung-api-beispiele/issue-fehler-satz.json → invoice-api-examples/issue-error-rate.json} +6 -6
  468. package/fixtures/{rechnung-api-beispiele/issue-fehler-einheit.json → invoice-api-examples/issue-error-unit.json} +5 -5
  469. package/fixtures/{rechnung-api-beispiele/issue-fehler-unbekannt.json → invoice-api-examples/issue-error-unknown.json} +6 -6
  470. package/fixtures/{rechnung-api-beispiele/issue-brutto-20.json → invoice-api-examples/issue-gross-20.json} +6 -6
  471. package/fixtures/{rechnung-api-beispiele/issue-mikropreis.json → invoice-api-examples/issue-micro-price.json} +6 -6
  472. package/fixtures/{rechnung-api-beispiele/issue-gemischt.json → invoice-api-examples/issue-mixed.json} +6 -6
  473. package/fixtures/{rechnung-api-beispiele/issue-netto-20.json → invoice-api-examples/issue-net-20.json} +6 -6
  474. package/fixtures/{rechnung-api-beispiele/issue-bezahlt.json → invoice-api-examples/issue-paid.json} +7 -7
  475. package/fixtures/{rechnung-api-beispiele/issue-kleinunternehmer.json → invoice-api-examples/issue-small-business.json} +6 -6
  476. package/fixtures/invoice-api-examples/payment-error-on-site.json +17 -0
  477. package/fixtures/invoice-api-examples/payment-error-without-key.json +16 -0
  478. package/fixtures/invoice-api-examples/payment-recorded-later.json +14 -0
  479. package/fixtures/{rechnung-api-beispiele/setup-status-fehler-feld.json → invoice-api-examples/setup-status-error-field.json} +4 -4
  480. package/fixtures/invoice-api-examples/setup-status-ok.json +8 -0
  481. package/fixtures/{rechnung-api.schema.json → invoice-api.schema.json} +24 -24
  482. package/fixtures/{rechnung-rechnen-zufall.json → invoice-calc-random.json} +828 -828
  483. package/fixtures/{rechnung-rechnen.json → invoice-calc.json} +47 -47
  484. package/fixtures/invoice-texts.json +464 -0
  485. package/fixtures/{rechnung-summen.json → invoice-totals.json} +25 -25
  486. package/fixtures/{position-aus-euro.json → item-from-euro.json} +26 -26
  487. package/fixtures/manifest.json +252 -252
  488. package/fixtures/pos-message-cases.json +32 -0
  489. package/fixtures/pos-settings-defaults.json +149 -0
  490. package/fixtures/pos-texts.json +957 -0
  491. package/fixtures/receipt-due-generated.json +1218 -0
  492. package/fixtures/{belege/storno-rabatt.json → receipts/cancellation-discount.json} +3 -3
  493. package/fixtures/{belege/storno-voll.json → receipts/cancellation-full.json} +3 -3
  494. package/fixtures/{belege/storno-teil.json → receipts/cancellation-partial.json} +3 -3
  495. package/fixtures/{belege/storno-split-voll.json → receipts/cancellation-split-full.json} +3 -3
  496. package/fixtures/{belege/storno-split-teil.json → receipts/cancellation-split-partial.json} +3 -3
  497. package/fixtures/{belege/karte-eigener.json → receipts/card-custom.json} +2 -2
  498. package/fixtures/{belege/karte-gptom-ios.json → receipts/card-gptom-ios.json} +2 -2
  499. package/fixtures/{belege/karte-gptom.json → receipts/card-gptom.json} +2 -2
  500. package/fixtures/{belege/karte-hobex-cloud.json → receipts/card-hobex-cloud.json} +2 -2
  501. package/fixtures/{belege/karte-hobex-hps.json → receipts/card-hobex-hps.json} +2 -2
  502. package/fixtures/{belege/karte-mypos.json → receipts/card-mypos.json} +2 -2
  503. package/fixtures/{belege/karte-stripe-eps.json → receipts/card-stripe-eps.json} +2 -2
  504. package/fixtures/{belege/karte-stripe.json → receipts/card-stripe.json} +2 -2
  505. package/fixtures/{belege/karte-sumup.json → receipts/card-sumup.json} +2 -2
  506. package/fixtures/{belege/rabattzeilen.json → receipts/discount-lines.json} +2 -2
  507. package/fixtures/{belege/rabatt-chef-trinkgeld.json → receipts/discount-owner-tip.json} +2 -2
  508. package/fixtures/{belege/rabatt-einfach.json → receipts/discount-simple.json} +2 -2
  509. package/fixtures/{belege/rabatt-trinkgeld.json → receipts/discount-tip.json} +2 -2
  510. package/fixtures/{belege/rabatt-wertgutschein.json → receipts/discount-value-voucher.json} +2 -2
  511. package/fixtures/{belege/langer-artikelname.json → receipts/long-item-name.json} +2 -2
  512. package/fixtures/{belege/verkauf-karte.json → receipts/sale-card.json} +2 -2
  513. package/fixtures/{belege/verkauf-bar.json → receipts/sale-cash.json} +2 -2
  514. package/fixtures/{belege/verkauf-kleinunternehmer.json → receipts/sale-small-business.json} +1 -1
  515. package/fixtures/{belege/signaturausfall-verkauf.json → receipts/signature-outage-sale.json} +2 -2
  516. package/fixtures/{belege/split-karte-karte-bar.json → receipts/split-card-card-cash.json} +2 -2
  517. package/fixtures/{belege/split-bar-rueckgeld.json → receipts/split-cash-change.json} +2 -2
  518. package/fixtures/{belege/split-langer-betrag.json → receipts/split-long-amount.json} +2 -2
  519. package/fixtures/{belege/split-eine-karte-trinkgeld.json → receipts/split-one-card-tip.json} +2 -2
  520. package/fixtures/{belege/split-tischrunde-trinkgeld.json → receipts/split-table-round-tip.json} +2 -2
  521. package/fixtures/{belege/split-trinkgeld-karte.json → receipts/split-tip-card.json} +2 -2
  522. package/fixtures/{belege/split-zwei-karten-gleicher-anbieter.json → receipts/split-two-cards-same-provider.json} +2 -2
  523. package/fixtures/{belege/testsignatur-verkauf.json → receipts/test-cashregister-sale.json} +3 -3
  524. package/fixtures/{belege/testkasse-verkauf.json → receipts/test-signature-sale.json} +3 -3
  525. package/fixtures/{belege → receipts}/training.json +2 -2
  526. package/fixtures/{belege/null-jahr.json → receipts/zero-annual.json} +5 -5
  527. package/fixtures/{belege/null-schluss.json → receipts/zero-final.json} +5 -5
  528. package/fixtures/{belege/null-pruef.json → receipts/zero-manual.json} +5 -5
  529. package/fixtures/{belege/null-monat.json → receipts/zero-monthly.json} +5 -5
  530. package/fixtures/{belege/null-ausfall.json → receipts/zero-outage-end.json} +5 -5
  531. package/fixtures/{belege/null-start.json → receipts/zero-start.json} +5 -5
  532. package/fixtures/renames-1.0.json +1490 -0
  533. package/fixtures/{kasse-settings-standard.json → stored/pos-settings-defaults.json} +10 -8
  534. package/fixtures/surface.json +877 -0
  535. package/fixtures/v3/README.md +125 -0
  536. package/fixtures/v3/antworten/belege.json +4738 -0
  537. package/fixtures/v3/antworten/belegmail.json +154 -0
  538. package/fixtures/v3/antworten/kasse-belege.json +4304 -0
  539. package/fixtures/v3/antworten/kasse.json +12716 -0
  540. package/fixtures/v3/antworten/rechnungen.json +1712 -0
  541. package/fixtures/v3/antworten/storno.json +737 -0
  542. package/fixtures/v3/stored/belege.json +502 -0
  543. package/fixtures/v3/stored/kasse.json +3461 -0
  544. package/fixtures/v3/stored/rechnungen.json +750 -0
  545. package/fixtures/v3/v3-vokabular.json +3375 -0
  546. package/fixtures/v3/zahlbetrag-faelle.json +794 -0
  547. package/package.json +32 -18
  548. package/dist/cjs/kasse/artikel.d.ts +0 -83
  549. package/dist/cjs/kasse/artikel.js +0 -79
  550. package/dist/cjs/kasse/client.d.ts +0 -10
  551. package/dist/cjs/kasse/client.js +0 -38
  552. package/dist/cjs/kasse/drucker.d.ts +0 -59
  553. package/dist/cjs/kasse/drucker.js +0 -50
  554. package/dist/cjs/kasse/index.d.ts +0 -13
  555. package/dist/cjs/kasse/index.js +0 -79
  556. package/dist/cjs/kasse/settings.d.ts +0 -227
  557. package/dist/cjs/kasse/settings.js +0 -169
  558. package/dist/cjs/kasse/texte.d.ts +0 -458
  559. package/dist/cjs/kasse/texte.js +0 -244
  560. package/dist/cjs/rechnung/fehler.d.ts +0 -21
  561. package/dist/cjs/rechnung/fehler.js +0 -44
  562. package/dist/cjs/rechnung/index.d.ts +0 -21
  563. package/dist/cjs/rechnung/index.js +0 -82
  564. package/dist/cjs/rechnung/texte.d.ts +0 -222
  565. package/dist/cjs/rechnung/texte.js +0 -425
  566. package/dist/esm/kasse/artikel.d.ts +0 -83
  567. package/dist/esm/kasse/artikel.js +0 -70
  568. package/dist/esm/kasse/client.d.ts +0 -10
  569. package/dist/esm/kasse/client.js +0 -33
  570. package/dist/esm/kasse/drucker.d.ts +0 -59
  571. package/dist/esm/kasse/drucker.js +0 -45
  572. package/dist/esm/kasse/index.d.ts +0 -13
  573. package/dist/esm/kasse/index.js +0 -18
  574. package/dist/esm/kasse/settings.d.ts +0 -227
  575. package/dist/esm/kasse/settings.js +0 -165
  576. package/dist/esm/kasse/texte.d.ts +0 -458
  577. package/dist/esm/kasse/texte.js +0 -238
  578. package/dist/esm/rechnung/fehler.d.ts +0 -21
  579. package/dist/esm/rechnung/fehler.js +0 -39
  580. package/dist/esm/rechnung/index.d.ts +0 -21
  581. package/dist/esm/rechnung/index.js +0 -20
  582. package/dist/esm/rechnung/texte.d.ts +0 -222
  583. package/dist/esm/rechnung/texte.js +0 -421
  584. package/fixtures/erwartet/karte-eigener.blatt32.json +0 -158
  585. package/fixtures/erwartet/karte-gptom-ios.blatt32.json +0 -230
  586. package/fixtures/erwartet/karte-gptom.blatt32.json +0 -230
  587. package/fixtures/erwartet/karte-hobex-cloud.blatt32.json +0 -200
  588. package/fixtures/erwartet/karte-hobex-hps.blatt32.json +0 -224
  589. package/fixtures/erwartet/karte-mypos.blatt32.json +0 -254
  590. package/fixtures/erwartet/karte-stripe-eps.blatt32.json +0 -194
  591. package/fixtures/erwartet/karte-stripe.blatt32.json +0 -212
  592. package/fixtures/erwartet/karte-sumup.blatt32.json +0 -218
  593. package/fixtures/erwartet/langer-artikelname.blatt32.json +0 -176
  594. package/fixtures/erwartet/null-ausfall.blatt32.json +0 -206
  595. package/fixtures/erwartet/null-jahr.blatt32.json +0 -212
  596. package/fixtures/erwartet/null-monat.blatt32.json +0 -206
  597. package/fixtures/erwartet/null-pruef.blatt32.json +0 -206
  598. package/fixtures/erwartet/null-schluss.blatt32.json +0 -206
  599. package/fixtures/erwartet/null-start.blatt32.json +0 -206
  600. package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt32.json +0 -212
  601. package/fixtures/erwartet/rabatt-einfach.blatt32.json +0 -182
  602. package/fixtures/erwartet/rabatt-trinkgeld.blatt32.json +0 -212
  603. package/fixtures/erwartet/rabatt-wertgutschein.blatt32.json +0 -218
  604. package/fixtures/erwartet/rabattzeilen.blatt32.json +0 -200
  605. package/fixtures/erwartet/signaturausfall-verkauf.blatt32.json +0 -194
  606. package/fixtures/erwartet/split-bar-rueckgeld.blatt32.json +0 -194
  607. package/fixtures/erwartet/split-eine-karte-trinkgeld.blatt32.json +0 -242
  608. package/fixtures/erwartet/split-karte-karte-bar.blatt32.json +0 -356
  609. package/fixtures/erwartet/split-langer-betrag.blatt32.json +0 -266
  610. package/fixtures/erwartet/split-tischrunde-trinkgeld.blatt32.json +0 -470
  611. package/fixtures/erwartet/split-trinkgeld-karte.blatt32.json +0 -272
  612. package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.blatt32.json +0 -326
  613. package/fixtures/erwartet/storno-rabatt.blatt32.json +0 -248
  614. package/fixtures/erwartet/storno-split-teil.blatt32.json +0 -230
  615. package/fixtures/erwartet/storno-split-voll.blatt32.json +0 -320
  616. package/fixtures/erwartet/storno-teil.blatt32.json +0 -206
  617. package/fixtures/erwartet/storno-voll.blatt32.json +0 -218
  618. package/fixtures/erwartet/testkasse-verkauf.blatt32.json +0 -224
  619. package/fixtures/erwartet/testsignatur-verkauf.blatt32.json +0 -236
  620. package/fixtures/erwartet/training.blatt32.json +0 -236
  621. package/fixtures/erwartet/verkauf-bar.blatt32.json +0 -176
  622. package/fixtures/erwartet/verkauf-karte.blatt32.json +0 -176
  623. package/fixtures/erwartet/verkauf-kleinunternehmer.blatt32.json +0 -182
  624. package/fixtures/kasse-meldungen-faelle.json +0 -32
  625. package/fixtures/kasse-texte.json +0 -513
  626. package/fixtures/oberflaeche.json +0 -557
  627. package/fixtures/rechnung-api-beispiele/brands-ok.json +0 -8
  628. package/fixtures/rechnung-api-beispiele/customer-get-fehler-beide.json +0 -15
  629. package/fixtures/rechnung-api-beispiele/setup-status-ok.json +0 -8
  630. package/fixtures/rechnung-api-beispiele/zahlung-fehler-ohne-schluessel.json +0 -14
  631. package/fixtures/rechnung-api-beispiele/zahlung-fehler-vor-ort.json +0 -15
  632. package/fixtures/rechnung-api-beispiele/zahlung-nachtrag.json +0 -14
  633. package/fixtures/rechnung-texte.json +0 -464
  634. /package/dist/cjs/{rechnung → invoice}/typen.js +0 -0
  635. /package/dist/esm/{rechnung → invoice}/typen.js +0 -0
  636. /package/fixtures/{erwartet/storno-rabatt.grid32.txt → expected/cancellation-discount.grid32.txt} +0 -0
  637. /package/fixtures/{erwartet/storno-rabatt.grid48.txt → expected/cancellation-discount.grid48.txt} +0 -0
  638. /package/fixtures/{erwartet/storno-voll.grid32.txt → expected/cancellation-full.grid32.txt} +0 -0
  639. /package/fixtures/{erwartet/storno-voll.grid48.txt → expected/cancellation-full.grid48.txt} +0 -0
  640. /package/fixtures/{erwartet/storno-teil.grid32.txt → expected/cancellation-partial.grid32.txt} +0 -0
  641. /package/fixtures/{erwartet/storno-teil.grid48.txt → expected/cancellation-partial.grid48.txt} +0 -0
  642. /package/fixtures/{erwartet/storno-split-voll.grid32.txt → expected/cancellation-split-full.grid32.txt} +0 -0
  643. /package/fixtures/{erwartet/storno-split-voll.grid48.txt → expected/cancellation-split-full.grid48.txt} +0 -0
  644. /package/fixtures/{erwartet/storno-split-teil.grid32.txt → expected/cancellation-split-partial.grid32.txt} +0 -0
  645. /package/fixtures/{erwartet/storno-split-teil.grid48.txt → expected/cancellation-split-partial.grid48.txt} +0 -0
  646. /package/fixtures/{erwartet/karte-eigener.grid32.txt → expected/card-custom.grid32.txt} +0 -0
  647. /package/fixtures/{erwartet/karte-eigener.grid48.txt → expected/card-custom.grid48.txt} +0 -0
  648. /package/fixtures/{erwartet/karte-gptom-ios.grid32.txt → expected/card-gptom-ios.grid32.txt} +0 -0
  649. /package/fixtures/{erwartet/karte-gptom-ios.grid48.txt → expected/card-gptom-ios.grid48.txt} +0 -0
  650. /package/fixtures/{erwartet/karte-gptom.grid32.txt → expected/card-gptom.grid32.txt} +0 -0
  651. /package/fixtures/{erwartet/karte-gptom.grid48.txt → expected/card-gptom.grid48.txt} +0 -0
  652. /package/fixtures/{erwartet/karte-hobex-cloud.grid32.txt → expected/card-hobex-cloud.grid32.txt} +0 -0
  653. /package/fixtures/{erwartet/karte-hobex-cloud.grid48.txt → expected/card-hobex-cloud.grid48.txt} +0 -0
  654. /package/fixtures/{erwartet/karte-hobex-hps.grid32.txt → expected/card-hobex-hps.grid32.txt} +0 -0
  655. /package/fixtures/{erwartet/karte-hobex-hps.grid48.txt → expected/card-hobex-hps.grid48.txt} +0 -0
  656. /package/fixtures/{erwartet/karte-mypos.grid32.txt → expected/card-mypos.grid32.txt} +0 -0
  657. /package/fixtures/{erwartet/karte-mypos.grid48.txt → expected/card-mypos.grid48.txt} +0 -0
  658. /package/fixtures/{erwartet/karte-stripe-eps.grid32.txt → expected/card-stripe-eps.grid32.txt} +0 -0
  659. /package/fixtures/{erwartet/karte-stripe-eps.grid48.txt → expected/card-stripe-eps.grid48.txt} +0 -0
  660. /package/fixtures/{erwartet/karte-stripe.grid32.txt → expected/card-stripe.grid32.txt} +0 -0
  661. /package/fixtures/{erwartet/karte-stripe.grid48.txt → expected/card-stripe.grid48.txt} +0 -0
  662. /package/fixtures/{erwartet/karte-sumup.grid32.txt → expected/card-sumup.grid32.txt} +0 -0
  663. /package/fixtures/{erwartet/karte-sumup.grid48.txt → expected/card-sumup.grid48.txt} +0 -0
  664. /package/fixtures/{erwartet/rabattzeilen.grid32.txt → expected/discount-lines.grid32.txt} +0 -0
  665. /package/fixtures/{erwartet/rabattzeilen.grid48.txt → expected/discount-lines.grid48.txt} +0 -0
  666. /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid32.txt → expected/discount-owner-tip.grid32.txt} +0 -0
  667. /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid48.txt → expected/discount-owner-tip.grid48.txt} +0 -0
  668. /package/fixtures/{erwartet/rabatt-einfach.grid32.txt → expected/discount-simple.grid32.txt} +0 -0
  669. /package/fixtures/{erwartet/rabatt-einfach.grid48.txt → expected/discount-simple.grid48.txt} +0 -0
  670. /package/fixtures/{erwartet/rabatt-trinkgeld.grid32.txt → expected/discount-tip.grid32.txt} +0 -0
  671. /package/fixtures/{erwartet/rabatt-trinkgeld.grid48.txt → expected/discount-tip.grid48.txt} +0 -0
  672. /package/fixtures/{erwartet/rabatt-wertgutschein.grid32.txt → expected/discount-value-voucher.grid32.txt} +0 -0
  673. /package/fixtures/{erwartet/rabatt-wertgutschein.grid48.txt → expected/discount-value-voucher.grid48.txt} +0 -0
  674. /package/fixtures/{erwartet/logo-probe-hoch.raster32.txt → expected/logo-sample-tall.raster32.txt} +0 -0
  675. /package/fixtures/{erwartet/logo-probe.raster32.txt → expected/logo-sample.raster32.txt} +0 -0
  676. /package/fixtures/{erwartet/langer-artikelname.grid32.txt → expected/long-item-name.grid32.txt} +0 -0
  677. /package/fixtures/{erwartet/langer-artikelname.grid48.txt → expected/long-item-name.grid48.txt} +0 -0
  678. /package/fixtures/{erwartet/verkauf-karte.grid32.txt → expected/sale-card.grid32.txt} +0 -0
  679. /package/fixtures/{erwartet/verkauf-karte.grid48.txt → expected/sale-card.grid48.txt} +0 -0
  680. /package/fixtures/{erwartet/verkauf-bar.grid32.txt → expected/sale-cash.grid32.txt} +0 -0
  681. /package/fixtures/{erwartet/verkauf-bar.grid48.txt → expected/sale-cash.grid48.txt} +0 -0
  682. /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid32.txt → expected/sale-small-business.grid32.txt} +0 -0
  683. /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid48.txt → expected/sale-small-business.grid48.txt} +0 -0
  684. /package/fixtures/{erwartet/signaturausfall-verkauf.grid32.txt → expected/signature-outage-sale.grid32.txt} +0 -0
  685. /package/fixtures/{erwartet/signaturausfall-verkauf.grid48.txt → expected/signature-outage-sale.grid48.txt} +0 -0
  686. /package/fixtures/{erwartet/split-karte-karte-bar.grid32.txt → expected/split-card-card-cash.grid32.txt} +0 -0
  687. /package/fixtures/{erwartet/split-karte-karte-bar.grid48.txt → expected/split-card-card-cash.grid48.txt} +0 -0
  688. /package/fixtures/{erwartet/split-bar-rueckgeld.grid32.txt → expected/split-cash-change.grid32.txt} +0 -0
  689. /package/fixtures/{erwartet/split-bar-rueckgeld.grid48.txt → expected/split-cash-change.grid48.txt} +0 -0
  690. /package/fixtures/{erwartet/split-langer-betrag.grid32.txt → expected/split-long-amount.grid32.txt} +0 -0
  691. /package/fixtures/{erwartet/split-langer-betrag.grid48.txt → expected/split-long-amount.grid48.txt} +0 -0
  692. /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid32.txt → expected/split-one-card-tip.grid32.txt} +0 -0
  693. /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid48.txt → expected/split-one-card-tip.grid48.txt} +0 -0
  694. /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid32.txt → expected/split-table-round-tip.grid32.txt} +0 -0
  695. /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid48.txt → expected/split-table-round-tip.grid48.txt} +0 -0
  696. /package/fixtures/{erwartet/split-trinkgeld-karte.grid32.txt → expected/split-tip-card.grid32.txt} +0 -0
  697. /package/fixtures/{erwartet/split-trinkgeld-karte.grid48.txt → expected/split-tip-card.grid48.txt} +0 -0
  698. /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid32.txt → expected/split-two-cards-same-provider.grid32.txt} +0 -0
  699. /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid48.txt → expected/split-two-cards-same-provider.grid48.txt} +0 -0
  700. /package/fixtures/{erwartet/testkasse-verkauf.grid32.txt → expected/test-cashregister-sale.grid32.txt} +0 -0
  701. /package/fixtures/{erwartet/testkasse-verkauf.grid48.txt → expected/test-cashregister-sale.grid48.txt} +0 -0
  702. /package/fixtures/{erwartet/testsignatur-verkauf.grid32.txt → expected/test-signature-sale.grid32.txt} +0 -0
  703. /package/fixtures/{erwartet/testsignatur-verkauf.grid48.txt → expected/test-signature-sale.grid48.txt} +0 -0
  704. /package/fixtures/{erwartet → expected}/training.grid32.txt +0 -0
  705. /package/fixtures/{erwartet → expected}/training.grid48.txt +0 -0
  706. /package/fixtures/{erwartet/null-jahr.grid32.txt → expected/zero-annual.grid32.txt} +0 -0
  707. /package/fixtures/{erwartet/null-jahr.grid48.txt → expected/zero-annual.grid48.txt} +0 -0
  708. /package/fixtures/{erwartet/null-schluss.grid32.txt → expected/zero-final.grid32.txt} +0 -0
  709. /package/fixtures/{erwartet/null-schluss.grid48.txt → expected/zero-final.grid48.txt} +0 -0
  710. /package/fixtures/{erwartet/null-pruef.grid32.txt → expected/zero-manual.grid32.txt} +0 -0
  711. /package/fixtures/{erwartet/null-pruef.grid48.txt → expected/zero-manual.grid48.txt} +0 -0
  712. /package/fixtures/{erwartet/null-monat.grid32.txt → expected/zero-monthly.grid32.txt} +0 -0
  713. /package/fixtures/{erwartet/null-monat.grid48.txt → expected/zero-monthly.grid48.txt} +0 -0
  714. /package/fixtures/{erwartet/null-ausfall.grid32.txt → expected/zero-outage-end.grid32.txt} +0 -0
  715. /package/fixtures/{erwartet/null-ausfall.grid48.txt → expected/zero-outage-end.grid48.txt} +0 -0
  716. /package/fixtures/{erwartet/null-start.grid32.txt → expected/zero-start.grid32.txt} +0 -0
  717. /package/fixtures/{erwartet/null-start.grid48.txt → expected/zero-start.grid48.txt} +0 -0
@@ -0,0 +1,90 @@
1
+ import type { InternerTransport } from '../client/aufrufe.js';
2
+ /**
3
+ * Artikelgruppen (Kategorien der Kachel-Kasse) und Artikel in der Form, die
4
+ * die Kacheln brauchen, Backend: `article-endpoints.js`
5
+ * (`listMyArticleGroups`, `listMyArticles` mit `groupId`/`tile`).
6
+ */
7
+ export interface ArticleGroup {
8
+ id: string;
9
+ name: string;
10
+ /** #RRGGBB */
11
+ color: string;
12
+ /** Kategorie-Symbol (Emoji, hoechstens zwei Zeichen) oder null. */
13
+ symbol: string | null;
14
+ sort: number;
15
+ vatRate: number | null;
16
+ }
17
+ export interface ArticleGroupPayload {
18
+ id?: string | null;
19
+ name?: string | null;
20
+ color?: string | null;
21
+ symbol?: string | null;
22
+ sort?: number | null;
23
+ vatRate?: number | null;
24
+ }
25
+ export declare function fromArticleGroupPayload(p: ArticleGroupPayload): ArticleGroup;
26
+ /**
27
+ * Mengenregel eines Artikels (Draht `quantityRule`): `piece` = ganze Stueck
28
+ * (1, 2, 3 ...), `decimal` = Kommamenge in der Einheit (0,250 kg, 1,5 m).
29
+ * Beleg und DEP bleiben ganzzahlig: eine Kommamenge wird an der Kasse als EINE
30
+ * Position mit ausgerechnetem Betrag gebucht, die Bezeichnung traegt die Menge
31
+ * („Wurst 0,250 kg“). Siehe [quantityRuleForUnit] fuer die Vorgabe je Einheit.
32
+ */
33
+ export declare const QUANTITY_RULES: readonly ["piece", "decimal"];
34
+ export type QuantityRule = typeof QUANTITY_RULES[number];
35
+ export interface QuantityDefaults {
36
+ rule: QuantityRule;
37
+ /** Kasse fragt beim Antippen nach der Menge (Wurst nach Gewicht: ja; Semmel: nein). */
38
+ ask: boolean;
39
+ /** Nachkommastellen bei `decimal`. */
40
+ decimals: number;
41
+ }
42
+ /** Vorgabe je Einheit: was der Betrieb bei einem neuen Artikel bekommt und aendern darf. */
43
+ export declare function quantityRuleForUnit(unit: string | null | undefined): QuantityDefaults;
44
+ /** Wirksame Regel eines Artikels: gespeicherte Angabe schlaegt die Vorgabe der Einheit. */
45
+ export declare function quantityDefaults(a: Pick<PosArticle, 'unit' | 'quantityRule' | 'askQuantity'>): QuantityDefaults;
46
+ /** Artikel, wie ihn die Kasse fuer Kacheln und Belegpositionen braucht. */
47
+ export interface PosArticle {
48
+ id: string;
49
+ name: string;
50
+ unitPriceCents: number | null;
51
+ vatRate: number | null;
52
+ unit: string;
53
+ groupId: string | null;
54
+ /** Erloesgruppe (Buchhaltung); null = keine. */
55
+ revenueGroupId: string | null;
56
+ /** Kachel sichtbar (Draht `tile.visible`, fehlt = sichtbar). */
57
+ visible: boolean;
58
+ /** Reihenfolge der Kachel (Draht `tile.sort`). */
59
+ sort: number;
60
+ active: boolean;
61
+ /** Gespeicherte Mengenregel; null = Vorgabe der Einheit. */
62
+ quantityRule: QuantityRule | null;
63
+ /** Gespeichert: Kasse fragt nach der Menge; null = Vorgabe der Einheit. */
64
+ askQuantity: boolean | null;
65
+ /** Hoechstmenge je Beleg (bei kg/l/m auch Kommazahl); null = keine Grenze. */
66
+ maxQuantity: number | null;
67
+ }
68
+ /** Deckelt eine gewuenschte Menge an der Hoechstmenge des Artikels (null = keine Grenze). */
69
+ export declare function allowedQuantity(a: Pick<PosArticle, 'maxQuantity'>, wanted: number): number;
70
+ /** Ein Artikel am Draht `/api/v3` (`listMyArticles`), soweit dieses Paket ihn liest. */
71
+ export interface PosArticlePayload {
72
+ id?: string | null;
73
+ name?: string | null;
74
+ unitPriceCents?: number | null;
75
+ vatRate?: number | null;
76
+ unit?: string | null;
77
+ groupId?: string | null;
78
+ revenueGroupId?: string | null;
79
+ tile?: {
80
+ visible?: boolean | null;
81
+ sort?: number | null;
82
+ } | null;
83
+ active?: boolean | null;
84
+ quantityRule?: string | null;
85
+ askQuantity?: boolean | null;
86
+ maxQuantity?: number | null;
87
+ }
88
+ export declare function fromPosArticlePayload(p: PosArticlePayload): PosArticle;
89
+ export declare function listMyArticleGroups(transport: InternerTransport): Promise<ArticleGroup[]>;
90
+ export declare function listMyArticles(transport: InternerTransport): Promise<PosArticle[]>;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QUANTITY_RULES = void 0;
4
+ exports.fromArticleGroupPayload = fromArticleGroupPayload;
5
+ exports.quantityRuleForUnit = quantityRuleForUnit;
6
+ exports.quantityDefaults = quantityDefaults;
7
+ exports.allowedQuantity = allowedQuantity;
8
+ exports.fromPosArticlePayload = fromPosArticlePayload;
9
+ exports.listMyArticleGroups = listMyArticleGroups;
10
+ exports.listMyArticles = listMyArticles;
11
+ const errors_js_1 = require("../client/errors.js");
12
+ function fromArticleGroupPayload(p) {
13
+ return {
14
+ id: p.id ?? '',
15
+ name: p.name ?? '',
16
+ color: p.color ?? '#6B7280',
17
+ symbol: p.symbol ?? null,
18
+ sort: typeof p.sort === 'number' ? p.sort : 0,
19
+ vatRate: typeof p.vatRate === 'number' ? p.vatRate : null,
20
+ };
21
+ }
22
+ /**
23
+ * Mengenregel eines Artikels (Draht `quantityRule`): `piece` = ganze Stueck
24
+ * (1, 2, 3 ...), `decimal` = Kommamenge in der Einheit (0,250 kg, 1,5 m).
25
+ * Beleg und DEP bleiben ganzzahlig: eine Kommamenge wird an der Kasse als EINE
26
+ * Position mit ausgerechnetem Betrag gebucht, die Bezeichnung traegt die Menge
27
+ * („Wurst 0,250 kg“). Siehe [quantityRuleForUnit] fuer die Vorgabe je Einheit.
28
+ */
29
+ exports.QUANTITY_RULES = ['piece', 'decimal'];
30
+ /** Einheiten, die nach Menge verkauft werden (Kommazahl, Kasse fragt). */
31
+ const DEZIMAL_EINHEITEN = {
32
+ kg: 3, g: 0, l: 2, ml: 0, m: 2, lfm: 2, km: 1, 'm²': 2, m2: 2, 'm³': 3, m3: 3, std: 2, h: 2, min: 0, t: 3,
33
+ };
34
+ /** Vorgabe je Einheit: was der Betrieb bei einem neuen Artikel bekommt und aendern darf. */
35
+ function quantityRuleForUnit(unit) {
36
+ const u = (unit ?? '').trim().toLowerCase();
37
+ if (u in DEZIMAL_EINHEITEN) {
38
+ const stellen = DEZIMAL_EINHEITEN[u];
39
+ return stellen === 0
40
+ ? { rule: 'piece', ask: true, decimals: 0 } // g, ml, min: ganze Zahl, aber die Menge wird gefragt
41
+ : { rule: 'decimal', ask: true, decimals: stellen };
42
+ }
43
+ return { rule: 'piece', ask: false, decimals: 0 };
44
+ }
45
+ /** Wirksame Regel eines Artikels: gespeicherte Angabe schlaegt die Vorgabe der Einheit. */
46
+ function quantityDefaults(a) {
47
+ const v = quantityRuleForUnit(a.unit);
48
+ return {
49
+ rule: a.quantityRule ?? v.rule,
50
+ ask: a.askQuantity ?? v.ask,
51
+ decimals: (a.quantityRule ?? v.rule) === 'decimal' ? Math.max(1, v.decimals || 2) : 0,
52
+ };
53
+ }
54
+ /** Deckelt eine gewuenschte Menge an der Hoechstmenge des Artikels (null = keine Grenze). */
55
+ function allowedQuantity(a, wanted) {
56
+ return a.maxQuantity != null && a.maxQuantity > 0 ? Math.min(wanted, a.maxQuantity) : wanted;
57
+ }
58
+ function fromPosArticlePayload(p) {
59
+ return {
60
+ id: p.id ?? '',
61
+ name: p.name ?? '',
62
+ unitPriceCents: typeof p.unitPriceCents === 'number' ? p.unitPriceCents : null,
63
+ vatRate: typeof p.vatRate === 'number' ? p.vatRate : null,
64
+ unit: p.unit ?? '',
65
+ groupId: p.groupId ?? null,
66
+ revenueGroupId: typeof p.revenueGroupId === 'string' && p.revenueGroupId ? p.revenueGroupId : null,
67
+ visible: p.tile?.visible !== false,
68
+ sort: typeof p.tile?.sort === 'number' ? p.tile.sort : 0,
69
+ active: p.active !== false,
70
+ quantityRule: p.quantityRule === 'piece' || p.quantityRule === 'decimal' ? p.quantityRule : null,
71
+ askQuantity: typeof p.askQuantity === 'boolean' ? p.askQuantity : null,
72
+ maxQuantity: typeof p.maxQuantity === 'number' && Number.isFinite(p.maxQuantity) && p.maxQuantity > 0 ? p.maxQuantity : null,
73
+ };
74
+ }
75
+ function liste(daten, feld, name, lesen) {
76
+ const roh = daten?.[feld];
77
+ if (!Array.isArray(roh)) {
78
+ throw new errors_js_1.KasseneckValidationError(name, `Antwort enthaelt keine Liste (data.${feld} fehlt)`, 'response');
79
+ }
80
+ return roh.map((e) => lesen(typeof e === 'object' && e !== null ? e : {}));
81
+ }
82
+ async function listMyArticleGroups(transport) {
83
+ const daten = await transport('listMyArticleGroups');
84
+ return liste(daten, 'groups', 'listMyArticleGroups', (e) => fromArticleGroupPayload(e));
85
+ }
86
+ async function listMyArticles(transport) {
87
+ const daten = await transport('listMyArticles');
88
+ return liste(daten, 'articles', 'listMyArticles', (e) => fromPosArticlePayload(e));
89
+ }
@@ -0,0 +1,27 @@
1
+ import type { InternerTransport } from '../client/aufrufe.js';
2
+ import { type PosSettings, type PosBusinessSettings, type PosDeviceSettings } from './settings.js';
3
+ /** Einstellungen lesen: Standard + gespeichert (Backend: `getKasseSettings`). */
4
+ export declare function getPosSettings(transport: InternerTransport, options?: {
5
+ deviceId?: string;
6
+ }): Promise<PosSettings>;
7
+ /** `{business, device}` einer Antwort, gemischt mit den Standardwerten. */
8
+ export declare function posSettingsFromWire(data: {
9
+ business?: unknown;
10
+ device?: unknown;
11
+ } | null | undefined): PosSettings;
12
+ /** Betriebsweite Einstellungen schreiben (Recht `layout`); liefert den gemischten Stand. */
13
+ export declare function setMyPosSettings(transport: InternerTransport, business: Partial<PosBusinessSettings>): Promise<PosBusinessSettings>;
14
+ /** Geraete-Einstellungen schreiben (Recht `layout`); liefert den gemischten Stand. */
15
+ export declare function setMyRegisterDeviceSettings(transport: InternerTransport, deviceId: string, device: Partial<PosDeviceSettings>): Promise<PosDeviceSettings>;
16
+ /** Eingabe von [setMyPosLogo]: ein Bild als Data-URL (PNG, JPEG, SVG) oder das Entfernen. */
17
+ export type SetMyPosLogoOptions = {
18
+ image: string;
19
+ } | {
20
+ remove: true;
21
+ };
22
+ /**
23
+ * Bild-Logo der Kasse hochladen oder entfernen (Recht `layout`). Liefert die
24
+ * neue `logoImage`-Adresse, nach dem Entfernen `''`. Formatfehler meldet der
25
+ * Server als `logo_invalid_type`, `logo_too_large` oder `logo_invalid`.
26
+ */
27
+ export declare function setMyPosLogo(transport: InternerTransport, options: SetMyPosLogoOptions): Promise<string>;
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPosSettings = getPosSettings;
4
+ exports.posSettingsFromWire = posSettingsFromWire;
5
+ exports.setMyPosSettings = setMyPosSettings;
6
+ exports.setMyRegisterDeviceSettings = setMyRegisterDeviceSettings;
7
+ exports.setMyPosLogo = setMyPosLogo;
8
+ const errors_js_1 = require("../client/errors.js");
9
+ const settings_js_1 = require("./settings.js");
10
+ /*
11
+ * Die Einstellungs-Aufrufe am Draht `/api/v3`: Parameter und Antwort heissen
12
+ * `business`/`device`, Schluessel und Werte englisch (Nachtrag §11.7.2).
13
+ *
14
+ * **Nur geaenderte Felder senden** ([posSettingsChanges]), nie den ganzen
15
+ * gemischten Block: der Server mischt tief, ein nicht geaenderter Wert, den
16
+ * dieses Paket nicht kennt (`theme: 'sepia'`), bleibt so am Server stehen.
17
+ * Gelesen wird er unveraendert ([unknownPosSettingValues] nennt ihn).
18
+ *
19
+ * Vor dem Senden prueft dieser Weg nur die gesendeten Felder (ein Feld mit
20
+ * `undefined` geht nicht hinaus und wird nicht geprueft), und nur, was der
21
+ * Server sicher abweist: einen
22
+ * Schluessel, den es nicht gibt (auch einen deutschen aus 0.x wie `stil`),
23
+ * einen Wert ausserhalb der Wertemenge des Feldes (`'nacht'`), eine
24
+ * Steuersatz-Karte ohne einen Satz an und eine unbekannte Tasten-Aktion.
25
+ * Der Fehler nennt den aeusseren Pfad wie das Backend (`business.theme`).
26
+ * Alles Weitere (Bereiche, Chips, Farbformat) entscheidet der Server und
27
+ * meldet es als `validation` mit `data.errors[].field`.
28
+ */
29
+ /** Einstellungen lesen: Standard + gespeichert (Backend: `getKasseSettings`). */
30
+ async function getPosSettings(transport, options = {}) {
31
+ const params = {};
32
+ if (options.deviceId)
33
+ params.deviceId = options.deviceId;
34
+ const daten = await transport('getKasseSettings', params);
35
+ return posSettingsFromWire(daten);
36
+ }
37
+ /** `{business, device}` einer Antwort, gemischt mit den Standardwerten. */
38
+ function posSettingsFromWire(data) {
39
+ return {
40
+ business: (0, settings_js_1.mergePosSettings)(settings_js_1.POS_BUSINESS_DEFAULTS, objekt(data?.business)),
41
+ device: (0, settings_js_1.mergePosSettings)(settings_js_1.POS_DEVICE_DEFAULTS, objekt(data?.device)),
42
+ };
43
+ }
44
+ /** Betriebsweite Einstellungen schreiben (Recht `layout`); liefert den gemischten Stand. */
45
+ async function setMyPosSettings(transport, business) {
46
+ const name = 'setMyKasseSettings';
47
+ pruefeTeil(name, 'business', business, settings_js_1.POS_BUSINESS_DEFAULTS, settings_js_1.POS_BUSINESS_VALUES);
48
+ const saetze = eigenerWert(business, 'vatRates');
49
+ if (saetze !== undefined) {
50
+ const karte = objekt(saetze);
51
+ // Unter /v3 prueft der Server die uebergebene Karte fuer sich: ein
52
+ // einzelner Schalter wie {20: false} waere dort "kein Satz an".
53
+ if (!karte || !Object.values(karte).some((an) => an === true)) {
54
+ throw new errors_js_1.KasseneckValidationError(name, 'business.vatRates: mindestens ein Steuersatz muss an sein (immer die ganze Karte senden)', 'request');
55
+ }
56
+ }
57
+ const daten = await transport(name, { business });
58
+ return (0, settings_js_1.mergePosSettings)(settings_js_1.POS_BUSINESS_DEFAULTS, objekt(daten?.business));
59
+ }
60
+ /** Geraete-Einstellungen schreiben (Recht `layout`); liefert den gemischten Stand. */
61
+ async function setMyRegisterDeviceSettings(transport, deviceId, device) {
62
+ const name = 'setMyRegisterDeviceSettings';
63
+ if (typeof deviceId !== 'string' || deviceId.trim() === '') {
64
+ throw new errors_js_1.KasseneckValidationError(name, 'deviceId fehlt', 'request');
65
+ }
66
+ pruefeTeil(name, 'device', device, settings_js_1.POS_DEVICE_DEFAULTS, settings_js_1.POS_DEVICE_VALUES);
67
+ const tasten = eigenerWert(device, 'shortcuts');
68
+ if (tasten !== undefined) {
69
+ const karte = objekt(tasten);
70
+ if (!karte)
71
+ throw new errors_js_1.KasseneckValidationError(name, 'device.shortcuts: keine Tastenkarte', 'request');
72
+ const aktionen = new Set(settings_js_1.POS_SHORTCUT_ACTIONS);
73
+ for (const aktion of Object.keys(karte)) {
74
+ if (karte[aktion] === undefined)
75
+ continue;
76
+ if (!aktionen.has(aktion)) {
77
+ throw new errors_js_1.KasseneckValidationError(name, `device.shortcuts.${aktion}: unbekannte Aktion`, 'request');
78
+ }
79
+ }
80
+ // Doppelbelegung innerhalb der gesendeten Karte; posSettingsChanges sendet
81
+ // bei jeder Tastenaenderung die ganze Karte, so ist das die ganze Belegung.
82
+ const konflikt = (0, settings_js_1.posShortcutConflict)(karte);
83
+ if (konflikt) {
84
+ throw new errors_js_1.KasseneckValidationError(name, `device.shortcuts.${konflikt.action}: Taste ${konflikt.key} schon belegt (${konflikt.heldBy})`, 'request');
85
+ }
86
+ }
87
+ const daten = await transport(name, { deviceId, device });
88
+ return (0, settings_js_1.mergePosSettings)(settings_js_1.POS_DEVICE_DEFAULTS, objekt(daten?.device));
89
+ }
90
+ /**
91
+ * Bild-Logo der Kasse hochladen oder entfernen (Recht `layout`). Liefert die
92
+ * neue `logoImage`-Adresse, nach dem Entfernen `''`. Formatfehler meldet der
93
+ * Server als `logo_invalid_type`, `logo_too_large` oder `logo_invalid`.
94
+ */
95
+ async function setMyPosLogo(transport, options) {
96
+ const name = 'setMyKasseLogo';
97
+ const params = {};
98
+ if ('remove' in options && options.remove === true) {
99
+ params.remove = true;
100
+ }
101
+ else if ('image' in options && typeof options.image === 'string' && options.image !== '') {
102
+ params.image = options.image;
103
+ }
104
+ else {
105
+ throw new errors_js_1.KasseneckValidationError(name, 'image fehlt (oder remove: true)', 'request');
106
+ }
107
+ const daten = await transport(name, params);
108
+ const bild = daten?.logoImage;
109
+ if (typeof bild !== 'string') {
110
+ throw new errors_js_1.KasseneckValidationError(name, 'Antwort enthaelt kein Feld "logoImage"', 'response');
111
+ }
112
+ return bild;
113
+ }
114
+ /** Eigene Eigenschaft oder `undefined`, nie eine geerbte (`constructor`, `toString`). */
115
+ function eigenerWert(block, k) {
116
+ return Object.prototype.hasOwnProperty.call(block, k) ? block[k] : undefined;
117
+ }
118
+ function objekt(wert) {
119
+ return wert !== null && typeof wert === 'object' && !Array.isArray(wert) ? wert : null;
120
+ }
121
+ function pruefeTeil(name, teil, block, standard, werte) {
122
+ const karte = objekt(block);
123
+ // Ein Feld mit `undefined` sendet JSON gar nicht: es zaehlt weder als
124
+ // Einstellung noch wird es geprueft.
125
+ const gesendet = karte ? Object.entries(karte).filter(([, wert]) => wert !== undefined) : [];
126
+ if (gesendet.length === 0) {
127
+ throw new errors_js_1.KasseneckValidationError(name, `${teil}: keine Einstellungen uebergeben`, 'request');
128
+ }
129
+ for (const [schluessel, wert] of gesendet) {
130
+ if (!Object.prototype.hasOwnProperty.call(standard, schluessel)) {
131
+ throw new errors_js_1.KasseneckValidationError(name, `${teil}.${schluessel}: unbekanntes Feld`, 'request');
132
+ }
133
+ const erlaubt = Object.prototype.hasOwnProperty.call(werte, schluessel) ? werte[schluessel] : undefined;
134
+ if (erlaubt && !erlaubt.includes(wert)) {
135
+ // Kein Altwert: dann ein Wert, den der Server kennt und dieses Paket
136
+ // nicht. Er kam beim Lesen herein; wer den ganzen Block zurueckschickt,
137
+ // braucht den Hinweis auf den richtigen Weg.
138
+ const hinweis = (0, settings_js_1._istAltwert0x)(schluessel, wert)
139
+ ? 'ungueltiger Wert (innere Form 0.x)'
140
+ : 'ungueltiger Wert (vom Server unbekannt? nur geaenderte Felder senden: posSettingsChanges)';
141
+ throw new errors_js_1.KasseneckValidationError(name, `${teil}.${schluessel}: ${hinweis}`, 'request');
142
+ }
143
+ }
144
+ }
@@ -0,0 +1,86 @@
1
+ import type { InternerTransport } from '../client/aufrufe.js';
2
+ import type { ReceiptLayout } from '../receipt/layout.js';
3
+ import type { PrintLogo } from '../receipt/layout-escpos.js';
4
+ /**
5
+ * Netzwerk-Bondrucker ueber Epson "Server Direct Print": das Backend fuehrt
6
+ * je Konto Drucker mit einer geheimen Abhol-URL; die Kasse legt Druckjobs
7
+ * aus einem Zeilenmodell an, der Drucker holt sie selbst ab (alle paar
8
+ * Sekunden) und meldet das Ergebnis. So druckt jeder Browser -- ohne lokale
9
+ * Software. Das ePOS-XML baut das Backend aus dem Zeichenraster (ein Setzweg).
10
+ */
11
+ export interface NetworkPrinter {
12
+ id: string;
13
+ name: string;
14
+ /** Art des Druckers; heute nur `epson-sdp`. */
15
+ kind: string;
16
+ paperSize: 'mm58' | 'mm80';
17
+ active: boolean;
18
+ createdAt: number | null;
19
+ /** Letzter Abruf des Druckers (ms); null = noch nie verbunden. */
20
+ lastSeenAt: number | null;
21
+ lastResult: {
22
+ success: boolean;
23
+ code: string | null;
24
+ at: number;
25
+ } | null;
26
+ /** Kennung, die der Drucker selbst schickt (Feld ID im Drucker-Menue). */
27
+ printerSerial: string | null;
28
+ /** Abhol-URL fuer das Drucker-Menue, nur fuer den Chef bzw. das Konto. */
29
+ sdpUrl?: string;
30
+ }
31
+ /** Stand eines Druckjobs (Katalog `DRUCKJOB`). */
32
+ export declare const PRINT_JOB_STATUSES: readonly ["pending", "sent", "printed", "failed", "expired"];
33
+ /**
34
+ * Stand eines Druckjobs; `'unknown'` = der Server nannte einen Stand, den dieses
35
+ * Paket nicht kennt (oder keinen). Er gilt als Ende der Abfrage (siehe
36
+ * [isPrintJobFinished]): nie als gedruckt, aber auch kein Abfragen bis zum
37
+ * Zeitlimit.
38
+ */
39
+ export type PrintJobStatus = typeof PRINT_JOB_STATUSES[number] | 'unknown';
40
+ /** Endet die Abfrage bei diesem Stand? `printed`, `failed`, `expired` und `unknown`. */
41
+ export declare function isPrintJobFinished(status: PrintJobStatus): boolean;
42
+ /**
43
+ * Bekannte Werte fuer `source` (Katalog `DRUCK_QUELLE`): die Kasse oder das
44
+ * Panel. Der Server nimmt Freitext bis 40 Zeichen an und uebersetzt nur diese
45
+ * beiden.
46
+ */
47
+ export declare const PRINT_JOB_SOURCES: readonly ["pos", "panel"];
48
+ export type PrintJobSource = typeof PRINT_JOB_SOURCES[number] | (string & {});
49
+ export interface PrintJob {
50
+ jobId: string;
51
+ status: PrintJobStatus;
52
+ createdAt?: number | null;
53
+ sentAt?: number | null;
54
+ result: {
55
+ success: boolean;
56
+ code: string | null;
57
+ status?: string | null;
58
+ at?: number;
59
+ } | null;
60
+ }
61
+ export declare function listMyPrinters(transport: InternerTransport): Promise<NetworkPrinter[]>;
62
+ export interface CreatePrintJobOptions {
63
+ printerId: string;
64
+ layout: ReceiptLayout;
65
+ receiptId?: string;
66
+ title?: string;
67
+ source?: PrintJobSource;
68
+ /** Firmenlogo als fertiges Rasterbild (`rasterizeLogo`); der Server dekodiert keine Bilder. */
69
+ logo?: PrintLogo | null;
70
+ /**
71
+ * Das Kasseneck-Logo am Ende (Konto-Flag `kreiseck_logo`). Heisst wie bei
72
+ * den Druckwegen (`escPosLayoutBytes`, `eposPrintXml`, `receiptSheet`), damit
73
+ * dieselben Optionen ueberall wirken; am Draht heisst der Wert `brand`.
74
+ */
75
+ brandMark?: boolean;
76
+ }
77
+ export declare function createPrintJob(transport: InternerTransport, o: CreatePrintJobOptions): Promise<PrintJob>;
78
+ /**
79
+ * Stand eines Druckjobs abfragen. Der Aufrufer fragt, bis [isPrintJobFinished]
80
+ * wahr ist, und begrenzt die Abfrage trotzdem selbst (Anzahl oder Zeit): ein
81
+ * Drucker, der nie abholt, bleibt `pending`.
82
+ */
83
+ export declare function getPrintJob(transport: InternerTransport, o: {
84
+ printerId: string;
85
+ jobId: string;
86
+ }): Promise<PrintJob>;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PRINT_JOB_SOURCES = exports.PRINT_JOB_STATUSES = void 0;
4
+ exports.isPrintJobFinished = isPrintJobFinished;
5
+ exports.listMyPrinters = listMyPrinters;
6
+ exports.createPrintJob = createPrintJob;
7
+ exports.getPrintJob = getPrintJob;
8
+ const index_js_1 = require("../printing/index.js");
9
+ /** Stand eines Druckjobs (Katalog `DRUCKJOB`). */
10
+ exports.PRINT_JOB_STATUSES = ['pending', 'sent', 'printed', 'failed', 'expired'];
11
+ /** Endet die Abfrage bei diesem Stand? `printed`, `failed`, `expired` und `unknown`. */
12
+ function isPrintJobFinished(status) {
13
+ return status === 'printed' || status === 'failed' || status === 'expired' || status === 'unknown';
14
+ }
15
+ /**
16
+ * Bekannte Werte fuer `source` (Katalog `DRUCK_QUELLE`): die Kasse oder das
17
+ * Panel. Der Server nimmt Freitext bis 40 Zeichen an und uebersetzt nur diese
18
+ * beiden.
19
+ */
20
+ exports.PRINT_JOB_SOURCES = ['pos', 'panel'];
21
+ const text = (v) => (typeof v === 'string' && v ? v : null);
22
+ const zahl = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : null);
23
+ const STATUS = new Set(exports.PRINT_JOB_STATUSES);
24
+ /**
25
+ * Stand eines Jobs aus der Antwort. Ein Wert ausserhalb des Katalogs (ein
26
+ * kuenftiger Endstand wie `cancelled`) oder gar keiner wird `'unknown'`:
27
+ * sichtbar, nie als gedruckt gewertet, und die Abfrage endet.
28
+ */
29
+ function status(v) {
30
+ return typeof v === 'string' && STATUS.has(v) ? v : 'unknown';
31
+ }
32
+ async function listMyPrinters(transport) {
33
+ const daten = await transport('listMyPrinters', {});
34
+ return (Array.isArray(daten?.printers) ? daten.printers : []).map((r) => {
35
+ const d = (r ?? {});
36
+ const e = d.lastResult && typeof d.lastResult === 'object' ? d.lastResult : null;
37
+ return {
38
+ id: String(d.id ?? ''), name: String(d.name ?? ''), kind: String(d.kind ?? 'epson-sdp'), paperSize: d.paperSize === 'mm58' ? 'mm58' : 'mm80',
39
+ active: d.active !== false, createdAt: zahl(d.createdAt), lastSeenAt: zahl(d.lastSeenAt),
40
+ lastResult: e ? { success: e.success === true, code: text(e.code), at: zahl(e.at) ?? 0 } : null,
41
+ printerSerial: text(d.printerSerial),
42
+ ...(text(d.sdpUrl) ? { sdpUrl: String(d.sdpUrl) } : {}),
43
+ };
44
+ });
45
+ }
46
+ async function createPrintJob(transport, o) {
47
+ const params = { printerId: o.printerId, layout: o.layout };
48
+ if (o.receiptId)
49
+ params.receiptId = o.receiptId;
50
+ if (o.title)
51
+ params.title = o.title;
52
+ if (o.source)
53
+ params.source = o.source;
54
+ if (o.logo) {
55
+ params.logo = {
56
+ scale: o.logo.size, pxWidth: o.logo.pixelWidth, pxHeight: o.logo.pixelHeight,
57
+ width: o.logo.raster.width, height: o.logo.raster.height, rows: (0, index_js_1.rasterRowsBase64)(o.logo.raster),
58
+ };
59
+ }
60
+ if (o.brandMark === true)
61
+ params.brand = true;
62
+ const daten = await transport('createPrintJob', params);
63
+ return { jobId: String(daten?.jobId ?? ''), status: status(daten?.status), result: null };
64
+ }
65
+ /**
66
+ * Stand eines Druckjobs abfragen. Der Aufrufer fragt, bis [isPrintJobFinished]
67
+ * wahr ist, und begrenzt die Abfrage trotzdem selbst (Anzahl oder Zeit): ein
68
+ * Drucker, der nie abholt, bleibt `pending`.
69
+ */
70
+ async function getPrintJob(transport, o) {
71
+ const d = await transport('getPrintJob', { printerId: o.printerId, jobId: o.jobId });
72
+ const e = d?.result && typeof d.result === 'object' ? d.result : null;
73
+ return {
74
+ jobId: String(d?.jobId ?? o.jobId), status: status(d?.status),
75
+ createdAt: zahl(d?.createdAt), sentAt: zahl(d?.sentAt),
76
+ result: e ? { success: e.success === true, code: text(e.code), status: text(e.status), at: zahl(e.at) ?? undefined } : null,
77
+ };
78
+ }
@@ -0,0 +1,36 @@
1
+ import { KasseneckApiError } from '../client/errors.js';
2
+ /**
3
+ * Fehler der Kassen-Aufrufe um den Verkauf herum (Einstellungen, Logo,
4
+ * Artikel, Drucker, Trinkgeld-Empfaenger) auswerten: am `code`, nie am Text.
5
+ * Belege, Storno und Belegmail haben eigene Listen (`RECEIPT_ERROR_CODES`,
6
+ * `CANCELLATION_ERROR_CODES`, `RECEIPT_EMAIL_ERROR_CODES`), die Anmeldung
7
+ * `REGISTER_ERROR_CODES` im Unterpfad `./register`.
8
+ *
9
+ * Abgeleitet aus dem Vertrags-Export (Fehlerfaelle dieser zehn Endpunkte in
10
+ * `fixtures/v3/antworten/kasse.json` und ihre Handler-Codes); ein Test haelt
11
+ * die Liste deckungsgleich. `validation` traegt `data.errors[]` mit dem
12
+ * aeusseren Feldpfad (`business.theme`, `device.shortcuts.splitPayment`).
13
+ * Dazu kommen die Codes, die der Rand auf jedem Kassen-Endpunkt erzeugen kann:
14
+ * die Anmelde- und Pruefcodes (`errorCodes.auth` ohne die sieben des
15
+ * Partner-Zugangs, z. B. `register_user_not_found`, wenn der Chef einen
16
+ * angemeldeten Benutzer loescht) und die des Rands selbst (`errorCodes.edge`:
17
+ * `validation`, `not_found`, `internal_translation_error`, `dialect_mismatch`,
18
+ * `response_translation_failed`). Ein Code, der in keiner Liste steht, bleibt
19
+ * ueber `KasseneckApiError.code` lesbar; die Kasse braucht dafuer einen
20
+ * Rueckfallzweig.
21
+ */
22
+ export declare const POS_ERROR_CODES: readonly ["account_not_found", "admin_required", "cashregister_not_assigned", "cashregister_not_found", "cashregister_token_invalid", "cashregister_token_missing", "device_not_found", "dialect_mismatch", "internal_translation_error", "live_not_enabled", "logo_invalid", "logo_invalid_type", "logo_too_large", "method_not_allowed", "mfa_required", "module_inactive", "not_found", "not_permitted", "print_job_not_found", "print_layout_failed", "printer_not_found", "register_user_no_business", "register_user_not_allowed", "register_user_not_found", "response_translation_failed", "session_expired", "session_other_cashregister", "unauthorized", "user_disabled", "user_verification_failed", "validation", "route_missing"];
23
+ export type PosErrorCode = typeof POS_ERROR_CODES[number];
24
+ export declare function isPosErrorCode(value: unknown): value is PosErrorCode;
25
+ /** Der Code eines geworfenen Fehlers, wenn er in [POS_ERROR_CODES] steht; sonst `undefined`. */
26
+ export declare function posErrorCode(error: unknown): PosErrorCode | undefined;
27
+ /** Kurzform fuer `catch (e) { if (isPosError(e, 'logo_too_large')) … }`. */
28
+ export declare function isPosError(error: unknown, code?: PosErrorCode): error is KasseneckApiError;
29
+ /** Ein Feldfehler aus `data.errors[]` einer `validation`-Antwort. */
30
+ export interface PosFieldError {
31
+ /** Aeusserer Feldpfad, z. B. `business.vatRates` oder `device.shortcuts.cash`. */
32
+ field: string;
33
+ message: string;
34
+ }
35
+ /** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
36
+ export declare function posFieldErrors(error: unknown): PosFieldError[];
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POS_ERROR_CODES = void 0;
4
+ exports.isPosErrorCode = isPosErrorCode;
5
+ exports.posErrorCode = posErrorCode;
6
+ exports.isPosError = isPosError;
7
+ exports.posFieldErrors = posFieldErrors;
8
+ const errors_js_1 = require("../client/errors.js");
9
+ /**
10
+ * Fehler der Kassen-Aufrufe um den Verkauf herum (Einstellungen, Logo,
11
+ * Artikel, Drucker, Trinkgeld-Empfaenger) auswerten: am `code`, nie am Text.
12
+ * Belege, Storno und Belegmail haben eigene Listen (`RECEIPT_ERROR_CODES`,
13
+ * `CANCELLATION_ERROR_CODES`, `RECEIPT_EMAIL_ERROR_CODES`), die Anmeldung
14
+ * `REGISTER_ERROR_CODES` im Unterpfad `./register`.
15
+ *
16
+ * Abgeleitet aus dem Vertrags-Export (Fehlerfaelle dieser zehn Endpunkte in
17
+ * `fixtures/v3/antworten/kasse.json` und ihre Handler-Codes); ein Test haelt
18
+ * die Liste deckungsgleich. `validation` traegt `data.errors[]` mit dem
19
+ * aeusseren Feldpfad (`business.theme`, `device.shortcuts.splitPayment`).
20
+ * Dazu kommen die Codes, die der Rand auf jedem Kassen-Endpunkt erzeugen kann:
21
+ * die Anmelde- und Pruefcodes (`errorCodes.auth` ohne die sieben des
22
+ * Partner-Zugangs, z. B. `register_user_not_found`, wenn der Chef einen
23
+ * angemeldeten Benutzer loescht) und die des Rands selbst (`errorCodes.edge`:
24
+ * `validation`, `not_found`, `internal_translation_error`, `dialect_mismatch`,
25
+ * `response_translation_failed`). Ein Code, der in keiner Liste steht, bleibt
26
+ * ueber `KasseneckApiError.code` lesbar; die Kasse braucht dafuer einen
27
+ * Rueckfallzweig.
28
+ */
29
+ exports.POS_ERROR_CODES = Object.freeze([
30
+ 'account_not_found',
31
+ 'admin_required',
32
+ 'cashregister_not_assigned',
33
+ 'cashregister_not_found',
34
+ 'cashregister_token_invalid',
35
+ 'cashregister_token_missing',
36
+ 'device_not_found',
37
+ 'dialect_mismatch',
38
+ 'internal_translation_error',
39
+ 'live_not_enabled',
40
+ 'logo_invalid',
41
+ 'logo_invalid_type',
42
+ 'logo_too_large',
43
+ 'method_not_allowed',
44
+ 'mfa_required',
45
+ 'module_inactive',
46
+ 'not_found',
47
+ 'not_permitted',
48
+ 'print_job_not_found',
49
+ 'print_layout_failed',
50
+ 'printer_not_found',
51
+ 'register_user_no_business',
52
+ 'register_user_not_allowed',
53
+ 'register_user_not_found',
54
+ 'response_translation_failed',
55
+ 'session_expired',
56
+ 'session_other_cashregister',
57
+ 'unauthorized',
58
+ 'user_disabled',
59
+ 'user_verification_failed',
60
+ 'validation',
61
+ // Code des Pakets (CLIENT_ERROR_CODES): HTML statt Backend, der Aufruf kam nie an
62
+ 'route_missing',
63
+ ]);
64
+ const BEKANNT = new Set(exports.POS_ERROR_CODES);
65
+ function isPosErrorCode(value) {
66
+ return typeof value === 'string' && BEKANNT.has(value);
67
+ }
68
+ /** Der Code eines geworfenen Fehlers, wenn er in [POS_ERROR_CODES] steht; sonst `undefined`. */
69
+ function posErrorCode(error) {
70
+ if (!(error instanceof errors_js_1.KasseneckApiError))
71
+ return undefined;
72
+ return isPosErrorCode(error.code) ? error.code : undefined;
73
+ }
74
+ /** Kurzform fuer `catch (e) { if (isPosError(e, 'logo_too_large')) … }`. */
75
+ function isPosError(error, code) {
76
+ const gefunden = posErrorCode(error);
77
+ return gefunden !== undefined && (code === undefined || gefunden === code);
78
+ }
79
+ /** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
80
+ function posFieldErrors(error) {
81
+ if (!(error instanceof errors_js_1.KasseneckApiError))
82
+ return [];
83
+ const roh = error.details['errors'];
84
+ if (!Array.isArray(roh))
85
+ return [];
86
+ const raus = [];
87
+ for (const eintrag of roh) {
88
+ if (eintrag === null || typeof eintrag !== 'object')
89
+ continue;
90
+ const { field, message } = eintrag;
91
+ if (typeof field === 'string' && typeof message === 'string')
92
+ raus.push({ field, message });
93
+ }
94
+ return raus;
95
+ }