@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
@@ -1,19 +1,50 @@
1
1
  import { ReceiptType, KeckPaymentMethod, CreditCardProvider, VoucherAction, VoucherType, } from '../enums/index.js';
2
- import { fromReceiptCompanyPayload, fromReceiptPayload, toReceiptItemPayload, toVoucherPayload, receiptItemIsValid, voucherIsValid, fromReceiptSummaryPayload, isCancellationReason, } from '../models/index.js';
2
+ import { fromReceiptCompanyPayload, fromReceiptPayload, toReceiptItemPayload, toVoucherPayload, receiptItemIsValid, voucherIsValid, fromReceiptSummaryPayload, isCancellationReason, RECEIPT_EMAIL_VIAS, readRegistrationInfo, } from '../models/index.js';
3
3
  import { parseServerTimeStamp, toViennaWallClock } from '../vienna-time.js';
4
4
  import { euroToCents } from '../money.js';
5
- import { KasseneckValidationError } from './errors.js';
5
+ import { KasseneckApiError, KasseneckValidationError, isKasseneckApiError } from './errors.js';
6
+ import { buildReceiptLayout } from '../receipt/layout.js';
7
+ /**
8
+ * Das Zeilenmodell zum Drucken und Anzeigen eines Belegs aus einer Antwort.
9
+ *
10
+ * **Ein Server-Layout gewinnt immer.** Liefert der Server `data.layout`, gilt
11
+ * genau dieses, in seiner Breite (80 mm): im oeffentlichen Kanal traegt nur
12
+ * es den Kartenblock (der Beleg selbst kommt dort ohne Anbieterdaten), und
13
+ * Bildschirm, Bon und PDF zeigen so denselben Beleg. Fehlt es, wird das
14
+ * Layout hier gebaut, mit den Angaben derselben Antwort (`testCashregister`,
15
+ * `testSignature`, `registrationInfo`) und in `fallbackPaperSize` (Vorgabe
16
+ * `mm58` wie in 0.x). Die Druckbreite waehlt allein der Druckweg
17
+ * (`paperSize` bei `escPosLayoutBytes`, `charsPerLine` bei ePOS und Blatt), nie
18
+ * dieser Helfer.
19
+ */
20
+ export function receiptLayoutFromResult(result, options = {}) {
21
+ for (const name of Object.keys(options)) {
22
+ if (name !== 'fallbackPaperSize') {
23
+ throw new KasseneckValidationError('receiptLayoutFromResult', `Unbekannte Option "${name}" (die Druckbreite waehlt der Druckweg)`, 'request');
24
+ }
25
+ }
26
+ if (result.layout != null)
27
+ return result.layout;
28
+ return buildReceiptLayout(result.receipt, result.company, {
29
+ paperSize: options.fallbackPaperSize ?? 'mm58',
30
+ testCashregister: result.testCashregister,
31
+ testSignature: result.testSignature,
32
+ registrationInfo: result.registrationInfo,
33
+ });
34
+ }
6
35
  /**
7
36
  * Gemeinsame Umsetzung aller Belegarten (Zwilling von `_createReceipt`).
8
37
  * Bewusst **nicht** Teil der Paketoberflaeche: der Belegtyp gehoert nicht in
9
38
  * die Hand des Aufrufers, sondern zu einem der benannten Aufrufe darunter.
10
39
  */
11
40
  export async function createReceipt(rufen, options) {
12
- return belegAusHuelle(await rufen('createReceipt', createReceiptParams(options)), 'createReceipt');
41
+ const daten = await rufen('createReceipt', createReceiptParams(options));
42
+ return signiertGelesen('createReceipt', () => belegAusHuelle(daten, 'createReceipt'));
13
43
  }
14
44
  /** Wie [createReceipt], liest aus derselben Antwort zusaetzlich die Firmendaten. */
15
45
  async function createReceiptWithCompany(rufen, options) {
16
- return belegMitFirmaAusHuelle(await rufen('createReceipt', createReceiptParams(options)), 'createReceipt');
46
+ const daten = await rufen('createReceipt', createReceiptParams(options));
47
+ return signiertGelesen('createReceipt', () => belegMitFirmaAusHuelle(daten, 'createReceipt'));
17
48
  }
18
49
  /**
19
50
  * Baut die Nutzlast von `createReceipt` und prueft die Eingabe. Wirft, bevor
@@ -22,8 +53,17 @@ async function createReceiptWithCompany(rufen, options) {
22
53
  function createReceiptParams(options) {
23
54
  const typ = belegtyp(options.receiptType);
24
55
  const { items, vouchers } = options;
56
+ // Unter /v3 weist der Server diese Felder ab (payment_method_not_supported);
57
+ // ein Aufrufer ohne Typen erfaehrt es hier, bevor etwas hinausgeht.
58
+ const altfeld = ALTE_ZAHLFELDER.find((feld) => options[feld] != null);
59
+ if (altfeld != null) {
60
+ throw eingabefehler(`${altfeld} gibt es unter /v3 nicht mehr: Zahlungen und Kartenangaben gehen als payments hinaus.`);
61
+ }
62
+ if (typ.value === ReceiptType.cancellation.value) {
63
+ throw eingabefehler('Ein Storno geht nur ueber cancelReceipt (Bezug, Grund, Restmengen).');
64
+ }
25
65
  if (typ.needsItems) {
26
- // Ein reiner Gutscheinverkauf ist ein Umsatz ohne Positionen — deshalb
66
+ // Ein reiner Gutscheinverkauf ist ein Umsatz ohne Positionen, deshalb
27
67
  // zaehlt er hier wie eine Position (wie im Flutter-Vorbild).
28
68
  const hatVerkaufsgutschein = vouchers?.some((v) => v.action === VoucherAction.sell) ?? false;
29
69
  if ((items == null || items.length === 0) && !hatVerkaufsgutschein) {
@@ -50,47 +90,20 @@ function createReceiptParams(options) {
50
90
  if (items != null && items.length > 0) {
51
91
  params['items'] = alsNutzlast(items, toReceiptItemPayload);
52
92
  }
53
- // `payments: null` gilt wie im Backend (zahlungs-eingang.js) als nicht angegeben.
54
- if (options.payments != null) {
55
- // Der alte Storno-Weg und der Null-/Startbeleg nehmen keine Zahlungsliste
56
- // (Backend: PAYMENTS_NOT_ALLOWED); ein Storno mit mehreren Zahlungen
57
- // laeuft ueber cancelReceipt.
58
- if (typ.value === ReceiptType.cancellation.value) {
59
- throw eingabefehler('payments am Storno gehen nur ueber cancelReceipt.');
93
+ const umsatz = typ.value === ReceiptType.standard.value || typ.value === ReceiptType.training.value;
94
+ if (umsatz) {
95
+ // Pflicht unter /v3 (payments_required); eine leere Liste ist erlaubt,
96
+ // wenn nichts zu zahlen ist (Rabatt deckt alles).
97
+ if (options.payments == null) {
98
+ throw eingabefehler('payments fehlt: unter /v3 ist die Zahlungsliste Pflicht (Summe = receiptDueCents).');
60
99
  }
61
- if (typ.value !== ReceiptType.standard.value && typ.value !== ReceiptType.training.value) {
62
- throw eingabefehler(`payments sind bei receiptType "${typ.value}" nicht erlaubt.`);
63
- }
64
- const konflikt = zahlungsKonflikt(options);
65
- if (konflikt != null)
66
- throw eingabefehler(konflikt);
67
100
  params['payments'] = gepruefteZahlungen(options.payments, false, 'createReceipt');
68
101
  }
69
- // Vom Aufrufer kommt sie geprueft, vom Server roh — siehe die beiden Felder
70
- // in [CreateReceiptOptions]. Die Typpruefung allein reicht dafuer nicht: ein
71
- // Verbraucher ohne Typen faellt durch dieses Netz, und ein Tippfehler in der
72
- // Zahlungsart faellt sonst erst am Server auf.
73
- const zahlungsart = options.paymentMethod != null ? gepruefteZahlungsart(options.paymentMethod) : options.paymentMethodFromServer;
74
- if (zahlungsart != null) {
75
- params['paymentMethod'] = zahlungsart;
76
- const anbieter = options.creditCardProvider ?? CreditCardProvider.custom;
77
- if (zahlungsart === KeckPaymentMethod.creditCard.value) {
78
- if (options.cardPaymentId != null) {
79
- params['cardPaymentId'] = options.cardPaymentId;
80
- // Der Kartenanbieter kommt dagegen vom Aufrufer, nicht vom Server —
81
- // hier bleibt der Schreibpfad streng.
82
- params['creditCardProvider'] = kartenanbieter(anbieter);
83
- // Bewusst auch als `null`, wenn der Anbieter keine Rohdaten liefert:
84
- // das Feld gehoert zur Kartenzahlung und das Backend nimmt null an.
85
- params['cardPaymentData'] = options.cardPaymentData ?? null;
86
- }
87
- else if (anbieter !== CreditCardProvider.custom) {
88
- throw eingabefehler(`cardPaymentId ist Pflicht bei creditCardProvider "${anbieter}".`);
89
- }
90
- }
102
+ else if (options.payments != null) {
103
+ throw eingabefehler(`payments sind bei receiptType "${typ.value}" nicht erlaubt.`);
91
104
  }
92
105
  if (options.tip != null) {
93
- if (typ.value !== ReceiptType.standard.value && typ.value !== ReceiptType.training.value) {
106
+ if (!umsatz) {
94
107
  throw eingabefehler(`Trinkgeld ist nur bei receiptType standard oder training moeglich, nicht bei "${typ.value}".`);
95
108
  }
96
109
  params['tip'] = gepruefterTip(options.tip);
@@ -106,16 +119,18 @@ function createReceiptParams(options) {
106
119
  }
107
120
  return params;
108
121
  }
122
+ /** Felder des alten Einzel-Zahlungswegs; unter /v3 abgewiesen. */
123
+ const ALTE_ZAHLFELDER = ['paymentMethod', 'paymentMethodFromServer', 'creditCardProvider', 'cardPaymentId', 'cardPaymentData'];
109
124
  /** Normalbeleg (Verkauf) nach RKSV. */
110
- export function sellReceipt(rufen, options) {
111
- return createReceipt(rufen, { ...options, receiptType: ReceiptType.standard });
125
+ export function sellReceipt(transport, options) {
126
+ return createReceipt(transport, { ...options, receiptType: ReceiptType.standard });
112
127
  }
113
128
  /**
114
129
  * Normalbeleg wie [sellReceipt], liefert zusaetzlich die Firmen-/Druckdaten
115
130
  * aus derselben Antwort — alles, was ein Belegdruck braucht, in einem Aufruf.
116
131
  */
117
- export function sellReceiptWithCompany(rufen, options) {
118
- return createReceiptWithCompany(rufen, { ...options, receiptType: ReceiptType.standard });
132
+ export function sellReceiptWithCompany(transport, options) {
133
+ return createReceiptWithCompany(transport, { ...options, receiptType: ReceiptType.standard });
119
134
  }
120
135
  const NOTE_MAX = 200;
121
136
  /**
@@ -124,7 +139,7 @@ const NOTE_MAX = 200;
124
139
  * Reichweite des Rechts (eigene/alle) und antwortet mit dem fertigen,
125
140
  * signierten Storno-Beleg. Gutscheine des Originals wandern nicht mit.
126
141
  */
127
- export async function cancelReceipt(rufen, options) {
142
+ export async function cancelReceipt(transport, options) {
128
143
  const cashregisterId = options.receipt?.cashregisterId ?? options.cashregisterId;
129
144
  const originalReceiptId = options.receipt?.receiptId ?? options.originalReceiptId;
130
145
  if (typeof cashregisterId !== 'string' || cashregisterId.trim() === '') {
@@ -149,8 +164,14 @@ export async function cancelReceipt(rufen, options) {
149
164
  if (options.note !== undefined && options.note.length > NOTE_MAX) {
150
165
  throw new KasseneckValidationError('cancelReceipt', `Anmerkung ist zu lang (hoechstens ${NOTE_MAX} Zeichen)`, 'request');
151
166
  }
167
+ const altfeld = ALTE_ZAHLFELDER.find((feld) => options[feld] != null);
168
+ if (altfeld != null) {
169
+ throw new KasseneckValidationError('cancelReceipt', `${altfeld} gibt es unter /v3 nicht mehr: Rueckzahlungen gehen als payments hinaus.`, 'request');
170
+ }
152
171
  // `payments: null` gilt wie im Backend als nicht angegeben.
153
- const zahlungen = options.payments != null ? gepruefteStornoZahlungen(options) : undefined;
172
+ const zahlungen = options.payments != null ? gepruefteZahlungen(options.payments, true, 'cancelReceipt') : undefined;
173
+ if (zahlungen !== undefined)
174
+ pruefeKartenRueckbuchung(zahlungen, options.receipt);
154
175
  const params = { cashregisterId, originalReceiptId, reason: options.reason };
155
176
  if (options.items !== undefined)
156
177
  params.items = options.items.map((p) => ({ index: p.index, quantity: p.quantity }));
@@ -158,27 +179,11 @@ export async function cancelReceipt(rufen, options) {
158
179
  params.note = options.note;
159
180
  if (zahlungen !== undefined)
160
181
  params.payments = zahlungen;
161
- if (options.paymentMethod != null)
162
- params.paymentMethod = gepruefteZahlungsart(options.paymentMethod);
163
- const karte = options.creditCardProvider != null || options.cardPaymentId != null || options.cardPaymentData != null;
164
- if (karte) {
165
- // Ohne paymentMethod entscheidet das Backend an der Zahlungsart des
166
- // Originals; ein ausdruecklich anderer Rueckzahlweg ist hier schon falsch.
167
- if (params.paymentMethod != null && params.paymentMethod !== KeckPaymentMethod.creditCard.value) {
168
- throw new KasseneckValidationError('cancelReceipt', 'Kartendaten gibt es nur bei paymentMethod creditCard', 'request');
169
- }
170
- if (options.creditCardProvider != null) {
171
- if (!Object.prototype.hasOwnProperty.call(CreditCardProvider, options.creditCardProvider)) {
172
- throw new KasseneckValidationError('cancelReceipt', `Kartenanbieter: unbekannter Schluessel "${options.creditCardProvider}"`, 'request');
173
- }
174
- params.creditCardProvider = options.creditCardProvider;
175
- }
176
- if (options.cardPaymentId != null && options.cardPaymentId !== '')
177
- params.cardPaymentId = options.cardPaymentId;
178
- if (options.cardPaymentData != null)
179
- params.cardPaymentData = options.cardPaymentData;
180
- }
181
- const daten = await rufen('cancelReceipt', params);
182
+ const daten = await transport('cancelReceipt', params);
183
+ return signiertGelesen('cancelReceipt', () => stornoAusHuelle(daten));
184
+ }
185
+ /** Liest die Storno-Antwort `{ receipt, cancellationOf, remaining }`. */
186
+ function stornoAusHuelle(daten) {
182
187
  const receipt = belegAusHuelle(daten, 'cancelReceipt');
183
188
  const huelle = daten;
184
189
  const bezug = huelle.cancellationOf;
@@ -190,27 +195,17 @@ export async function cancelReceipt(rufen, options) {
190
195
  }
191
196
  return {
192
197
  receipt,
193
- cancellationOf: { receiptId: bezug.receiptId, fullReceiptId: typeof bezug.fullReceiptId === 'string' ? bezug.fullReceiptId : null },
198
+ cancellationOf: {
199
+ receiptId: bezug.receiptId,
200
+ fullReceiptId: typeof bezug.fullReceiptId === 'string' ? bezug.fullReceiptId : null,
201
+ ...(typeof bezug.timeStamp === 'string' && bezug.timeStamp !== '' ? { timeStamp: bezug.timeStamp } : {}),
202
+ },
194
203
  remaining: huelle.remaining,
195
204
  };
196
205
  }
197
- /**
198
- * Stornobeleg aus frei uebergebenen Positionen — fuer den Fall, dass der
199
- * Originalbeleg nicht als Objekt vorliegt. Die Positionen gehen **unveraendert**
200
- * hinaus; das Vorzeichen setzt der Aufrufer.
201
- *
202
- * @deprecated Alter Storno-Weg ohne Bezug: kein Verweis auf das Original,
203
- * keine Restmengen, kein Schutz vor doppeltem Storno, Gutscheine werden nicht
204
- * zurueckgenommen. Das Backend nimmt ihn weiter an und legt `deprecation` in
205
- * die Antwort. Stattdessen [cancelReceipt] (Endpunkt `cancelReceipt`): Bezug,
206
- * Grund, Teilstorno, Fehlercodes.
207
- */
208
- export function createCancelReceipt(rufen, options) {
209
- return createReceipt(rufen, { ...options, receiptType: ReceiptType.cancellation });
210
- }
211
206
  /** Nullbeleg (RKSV-Pruefbeleg) — ohne Positionen und ohne Zahlungsart. */
212
- export function zeroReceipt(rufen) {
213
- return createReceipt(rufen, { receiptType: ReceiptType.zero });
207
+ export function zeroReceipt(transport) {
208
+ return createReceipt(transport, { receiptType: ReceiptType.zero });
214
209
  }
215
210
  /**
216
211
  * Belege einer Kasse auflisten — die Grundlage jeder Belegliste in der
@@ -227,7 +222,7 @@ export function zeroReceipt(rufen) {
227
222
  * (der Endpunkt laeuft mit `checkCashRegister: false`), ein Kassen-Benutzer
228
223
  * bekommt also nur die ihm zugewiesenen Kassen.
229
224
  */
230
- export async function listMyReceipts(rufen, options) {
225
+ export async function listMyReceipts(transport, options) {
231
226
  if (typeof options.cashregisterId !== 'string' || options.cashregisterId.trim() === '') {
232
227
  throw new KasseneckValidationError('listMyReceipts', 'cashregisterId fehlt', 'request');
233
228
  }
@@ -240,8 +235,8 @@ export async function listMyReceipts(rufen, options) {
240
235
  throw new KasseneckValidationError('listMyReceipts', `${feld} muss mit YYYY-MM-DD beginnen, war "${wert}"`, 'request');
241
236
  }
242
237
  }
243
- const daten = await rufen('listMyReceipts', {
244
- cashregisterid: options.cashregisterId,
238
+ const daten = await transport('listMyReceipts', {
239
+ cashregisterId: options.cashregisterId,
245
240
  limit: options.limit,
246
241
  ...(options.from !== undefined ? { from: options.from } : {}),
247
242
  ...(options.to !== undefined ? { to: options.to } : {}),
@@ -265,7 +260,7 @@ function kennzahlen(roh) {
265
260
  const tage = Array.isArray(quelle.days) ? quelle.days : [];
266
261
  return {
267
262
  today: {
268
- revenueCents: euroToCents(quelle.today?.umsatz),
263
+ revenueCents: euroToCents(quelle.today?.revenue),
269
264
  count: typeof quelle.today?.count === 'number' ? quelle.today.count : 0,
270
265
  },
271
266
  trendPercent: typeof quelle.trendPct === 'number' ? quelle.trendPct : null,
@@ -273,14 +268,14 @@ function kennzahlen(roh) {
273
268
  const eintrag = (typeof tag === 'object' && tag !== null ? tag : {});
274
269
  return {
275
270
  date: typeof eintrag.date === 'string' ? eintrag.date : '',
276
- revenueCents: euroToCents(eintrag.umsatz),
271
+ revenueCents: euroToCents(eintrag.revenue),
277
272
  };
278
273
  }),
279
274
  };
280
275
  }
281
276
  /** Einzelnen Beleg der angemeldeten Kasse holen. */
282
- export async function getReceipt(rufen, receiptId) {
283
- return belegAusHuelle(await rufen('getReceipt', { receiptId }), 'getReceipt');
277
+ export async function getReceipt(transport, receiptId) {
278
+ return belegAusHuelle(await transport('getReceipt', { receiptId }), 'getReceipt');
284
279
  }
285
280
  /**
286
281
  * Wie [getReceipt], liefert zusaetzlich die Firmen-/Druckdaten aus derselben
@@ -288,15 +283,15 @@ export async function getReceipt(rufen, receiptId) {
288
283
  * Kleinunternehmer-Kennzeichen) — die Angaben, die ein Beleg im Kopf und Fuss
289
284
  * traegt (siehe models/receipt-company.ts).
290
285
  */
291
- export async function getReceiptWithCompany(rufen, receiptId) {
292
- return belegMitFirmaAusHuelle(await rufen('getReceipt', { receiptId }), 'getReceipt');
286
+ export async function getReceiptWithCompany(transport, receiptId) {
287
+ return belegMitFirmaAusHuelle(await transport('getReceipt', { receiptId }), 'getReceipt');
293
288
  }
294
289
  /**
295
290
  * Verschluesselte Volltext-Belegnummer erzeugen — der Bezeichner, unter dem der
296
291
  * Beleg oeffentlich abrufbar ist (Beleg-Download, Pruefportal).
297
292
  */
298
- export async function generateFullReceiptId(rufen, receiptId) {
299
- const daten = await rufen('generateFullReceiptId', { receiptId });
293
+ export async function generateFullReceiptId(transport, receiptId) {
294
+ const daten = await transport('generateFullReceiptId', { receiptId });
300
295
  const id = daten?.fullReceiptId;
301
296
  if (typeof id !== 'string') {
302
297
  throw antwortfehler('generateFullReceiptId', 'Antwort enthaelt keine fullReceiptId');
@@ -311,8 +306,8 @@ export async function generateFullReceiptId(rufen, receiptId) {
311
306
  * fuehrt kein `allowRegisterUser`, das Backend weist die Browser-Kasse hier ab
312
307
  * (siehe Modulkommentar oben). Mit `apiKeyAuth` ist er offen.
313
308
  */
314
- export async function getFirstReceiptDate(rufen) {
315
- const roh = await rufen('getFirstReceiptDate');
309
+ export async function getFirstReceiptDate(transport) {
310
+ const roh = await transport('getFirstReceiptDate');
316
311
  if (typeof roh !== 'string') {
317
312
  throw antwortfehler('getFirstReceiptDate', 'Antwort enthaelt keinen Zeitstempel');
318
313
  }
@@ -333,6 +328,8 @@ export async function getFirstReceiptDate(rufen) {
333
328
  throw antwortfehler('getFirstReceiptDate', 'Antwort enthaelt keinen lesbaren Zeitstempel');
334
329
  }
335
330
  }
331
+ /** Felder von [SendReceiptEmailOptions]; jedes andere wirft vor dem Senden. */
332
+ const MAIL_FELDER = ['fullReceiptId', 'to', 'language'];
336
333
  /**
337
334
  * Schickt einen bereits ausgestellten Beleg als **Link auf die oeffentliche
338
335
  * Belegseite** an eine Adresse (Endpunkt `sendReceiptEmail`, Backend
@@ -343,17 +340,23 @@ export async function getFirstReceiptDate(rufen) {
343
340
  * das Backend in einer Unter-Sammlung neben dem Beleg.
344
341
  *
345
342
  * **Am Code entscheiden, nie am Text:** fachliche Fehler kommen als
346
- * [KasseneckApiError] mit `code` aus [RECEIPT_EMAIL_ERROR_CODES] heraus —
347
- * `adresse_ungueltig`, `beleg_nicht_gefunden` (auch fuer einen Beleg einer
348
- * fremden Kasse: das Backend gibt darueber bewusst keine Auskunft), `zu_oft`
349
- * (5 Mails je Beleg in 24 Stunden, 30 je Kasse und Stunde) und
350
- * `versand_fehlgeschlagen`. Dieses Paket reicht sie unveraendert durch und
343
+ * [KasseneckApiError] mit `code` aus [RECEIPT_EMAIL_ERROR_CODES] heraus:
344
+ * `invalid_address`, `receipt_not_found` (auch fuer einen Beleg einer
345
+ * fremden Kasse: das Backend gibt darueber bewusst keine Auskunft),
346
+ * `too_many_requests` (5 Mails je Beleg in 24 Stunden, 30 je Kasse und
347
+ * Stunde) und `send_failed`. Dieses Paket reicht sie unveraendert durch und
351
348
  * legt keine eigenen Codes an.
352
349
  *
353
350
  * **Kein Wiederholen ohne Zutun des Bedieners:** ein zweiter Versuch schickt
354
351
  * eine zweite Mail und zaehlt auf die Schleuse.
355
352
  */
356
- export async function sendReceiptEmail(rufen, options) {
353
+ export async function sendReceiptEmail(transport, options) {
354
+ // Ein unbekanntes Feld (etwa das alte `sprache`) ginge sonst still verloren,
355
+ // und die Mail kaeme in der falschen Sprache.
356
+ const fremd = Object.keys(options ?? {}).find((k) => !MAIL_FELDER.includes(k));
357
+ if (fremd != null) {
358
+ throw new KasseneckValidationError('sendReceiptEmail', `unbekanntes Feld "${fremd}"`, 'request');
359
+ }
357
360
  // Getrimmt, weil beides von Hand oder per Scanner ins Feld kommt und ein
358
361
  // angehaengtes Leerzeichen sonst als ungueltige Adresse zurueckkaeme --
359
362
  // nach einem Aufruf, der schon eine Zeile im Protokoll gekostet hat.
@@ -366,20 +369,21 @@ export async function sendReceiptEmail(rufen, options) {
366
369
  throw new KasseneckValidationError('sendReceiptEmail', 'to fehlt (Empfaengeradresse)', 'request');
367
370
  }
368
371
  // Die Adresse selbst wird hier NICHT geprueft: das Backend prueft sie mit
369
- // kreiseck_validator und antwortet mit `adresse_ungueltig`. Eine zweite,
372
+ // kreiseck_validator und antwortet mit `invalid_address`. Eine zweite,
370
373
  // eigene Regel im Paket koennte strenger sein als die des Backends und eine
371
374
  // gueltige Adresse abweisen, ohne dass jemand die Abweichung bemerkt.
372
375
  const params = { fullReceiptId, to };
373
- if (options.sprache !== undefined && options.sprache !== '')
374
- params.sprache = options.sprache;
375
- const daten = await rufen('sendReceiptEmail', params);
376
+ if (options.language !== undefined && options.language !== '')
377
+ params.language = options.language;
378
+ const daten = await transport('sendReceiptEmail', params);
376
379
  if (typeof daten?.to !== 'string' || daten.to === '') {
377
380
  throw antwortfehler('sendReceiptEmail', 'Antwort nennt keine Empfaengeradresse (data.to fehlt)');
378
381
  }
379
382
  if (typeof daten.at !== 'string' || daten.at === '') {
380
383
  throw antwortfehler('sendReceiptEmail', 'Antwort nennt keinen Zeitpunkt (data.at fehlt)');
381
384
  }
382
- return { to: daten.to, at: daten.at, via: typeof daten.via === 'string' && daten.via !== '' ? daten.via : null };
385
+ const via = RECEIPT_EMAIL_VIAS.includes(daten.via) ? daten.via : null;
386
+ return { to: daten.to, at: daten.at, via };
383
387
  }
384
388
  /**
385
389
  * Prueft die Gutschein-Kombination eines Belegs und liefert den ersten
@@ -474,6 +478,11 @@ function gepruefterTip(tip) {
474
478
  if (tip == null || typeof tip !== 'object' || !istCentBetrag(tip.cents)) {
475
479
  throw eingabefehler('Trinkgeld: Betrag muss eine ganze Zahl in Cent > 0 sein.');
476
480
  }
481
+ // Ein unbekannter Schluessel (etwa das alte `sofortErhalten`) weist der
482
+ // Server unter /v3 ab; hier faellt er vor dem Senden.
483
+ const fremd = Object.keys(tip).find((k) => !TIP_FELDER.includes(k));
484
+ if (fremd != null)
485
+ throw eingabefehler(`Trinkgeld: unbekanntes Feld "${fremd}".`);
477
486
  const nutzlast = { cents: tip.cents };
478
487
  if (tip.paymentMethod != null)
479
488
  nutzlast['paymentMethod'] = gepruefteZahlungsart(tip.paymentMethod);
@@ -481,11 +490,11 @@ function gepruefterTip(tip) {
481
490
  // Voreinstellung des Betriebs. Ein `false` waere dort eine Aussage, kein
482
491
  // Weglassen. Der Wortlaut des Fehlers ist der des Backends
483
492
  // (tip-core.normalizeTip) -- wer ihn hier sieht, sieht denselben Satz.
484
- if (tip.sofortErhalten != null) {
485
- if (typeof tip.sofortErhalten !== 'boolean') {
486
- throw eingabefehler('Trinkgeld: sofortErhalten muss true oder false sein.');
493
+ if (tip.receivedImmediately != null) {
494
+ if (typeof tip.receivedImmediately !== 'boolean') {
495
+ throw eingabefehler('Trinkgeld: receivedImmediately muss true oder false sein.');
487
496
  }
488
- nutzlast['sofortErhalten'] = tip.sofortErhalten;
497
+ nutzlast['receivedImmediately'] = tip.receivedImmediately;
489
498
  }
490
499
  if (tip.recipients != null) {
491
500
  if (!Array.isArray(tip.recipients) || tip.recipients.length === 0) {
@@ -511,6 +520,7 @@ function gepruefterTip(tip) {
511
520
  }
512
521
  return nutzlast;
513
522
  }
523
+ const TIP_FELDER = ['cents', 'paymentMethod', 'recipients', 'receivedImmediately'];
514
524
  /**
515
525
  * Zahlungsart des Aufrufers pruefen — unbekannt wirft, bevor etwas rausgeht.
516
526
  * `mixed` wirft ebenfalls: den Wert vergibt nur der Server (Beleg mit
@@ -534,18 +544,6 @@ function gepruefteZahlungsart(wert) {
534
544
  }
535
545
  /** Hoechstzahl der Zahlungen je Beleg (Backend: MAX_ZAHLUNGEN). */
536
546
  const MAX_ZAHLUNGEN = 20;
537
- /**
538
- * `payments` neben einer Einzel-Zahlungsart oder Kartenfeldern? Liefert den
539
- * Grund (Backend: PAYMENTS_CONFLICT), sonst null. Nie still eines bevorzugen.
540
- */
541
- function zahlungsKonflikt(options) {
542
- for (const feld of ['paymentMethod', 'paymentMethodFromServer', 'creditCardProvider', 'cardPaymentId', 'cardPaymentData']) {
543
- if (options[feld] != null) {
544
- return `payments und ${feld} duerfen nicht gemeinsam gesendet werden – Kartenangaben gehoeren in die Zahlung.`;
545
- }
546
- }
547
- return null;
548
- }
549
547
  /**
550
548
  * Zahlungsliste pruefen und in Nutzlast-Form bringen — Formpruefung wie
551
549
  * `pruefeZahlungen` im Backend, soweit sie ohne Beleg und Zahlbetrag geht
@@ -609,12 +607,53 @@ function gepruefteZahlungen(roh, storno, functionName) {
609
607
  return aus;
610
608
  });
611
609
  }
612
- /** `payments` am Storno: Konflikt mit Zahlungsart/Kartenfeldern, dann Form. */
613
- function gepruefteStornoZahlungen(options) {
614
- const konflikt = zahlungsKonflikt(options);
615
- if (konflikt != null)
616
- throw new KasseneckValidationError('cancelReceipt', konflikt, 'request');
617
- return gepruefteZahlungen(options.payments, true, 'cancelReceipt');
610
+ /** Zahlarten mit Kartenterminal (Backend: KARTEN_ZAHLARTEN). */
611
+ const KARTEN_ZAHLARTEN = new Set(['creditCard', 'uberCard', 'boltCard']);
612
+ /**
613
+ * Kennung der Originalzahlung fuer die Rueckbuchung am Terminal (Hobex
614
+ * `originalTransactionId`, SumUp-Transaktion, ...): `providerPaymentId` der
615
+ * Zahlung `paymentId` des Originals. Die liefert nur der Kassenweg (Kanal
616
+ * `app`, `registerUserAuth`); am oeffentlichen Weg fehlt sie, und dann wirft
617
+ * dieser Aufruf, statt `undefined` an ein Terminal weiterzugeben.
618
+ */
619
+ export function cardRefundReference(receipt, paymentId) {
620
+ const zahlung = receipt.payments?.find((z) => z.id === paymentId);
621
+ if (zahlung == null) {
622
+ throw new KasseneckValidationError('cancelReceipt', `Zahlung "${paymentId}" gibt es am Beleg nicht`, 'request');
623
+ }
624
+ const methode = typeof zahlung.method === 'object' ? zahlung.method.value : zahlung.method;
625
+ if (!KARTEN_ZAHLARTEN.has(methode)) {
626
+ throw new KasseneckValidationError('cancelReceipt', `Zahlung "${paymentId}" ist keine Kartenzahlung`, 'request');
627
+ }
628
+ if (typeof zahlung.providerPaymentId !== 'string' || zahlung.providerPaymentId === '') {
629
+ throw new KasseneckValidationError('cancelReceipt', `Kennung der Kartenzahlung "${paymentId}" fehlt: sie kommt nur ueber den Kassenweg (registerUserAuth, kasse.kasseneck.at/api/v3), nicht ueber den oeffentlichen Weg`, 'request');
630
+ }
631
+ return zahlung.providerPaymentId;
632
+ }
633
+ /**
634
+ * Karten-Rueckbuchung am Storno, geprueft vor dem Senden:
635
+ * - Sie nennt ihren Anbieter (`provider`; `custom` fuer eine Erstattung
636
+ * ohne angebundenes Terminal). Ganz ohne Anbieterfelder faellt sie.
637
+ * - Ueber einen Anbieter (nicht `custom`) braucht sie einen Bezug: ihre eigene
638
+ * Terminal-Kennung (`providerPaymentId` der Erstattung) oder, liegt das
639
+ * Original vor, die Kennung der erstatteten Kartenzahlung dort. Erst wenn
640
+ * beides fehlt, wirft sie.
641
+ */
642
+ function pruefeKartenRueckbuchung(zahlungen, original) {
643
+ zahlungen.forEach((z, i) => {
644
+ if (!KARTEN_ZAHLARTEN.has(String(z['method'])))
645
+ return;
646
+ const anbieter = z['provider'];
647
+ if (anbieter == null && z['providerPaymentId'] == null) {
648
+ throw new KasseneckValidationError('cancelReceipt', `Zahlung ${i + 1}: Karten-Rueckbuchung ohne Anbieter und ohne Kennung (provider angeben, custom fuer eine Erstattung ohne angebundenes Terminal)`, 'request');
649
+ }
650
+ if (anbieter === CreditCardProvider.custom || z['providerPaymentId'] != null)
651
+ return;
652
+ const orig = original != null && typeof z['refundOf'] === 'string' ? original.payments?.find((o) => o.id === z['refundOf']) : undefined;
653
+ if (typeof orig?.providerPaymentId === 'string' && orig.providerPaymentId !== '')
654
+ return;
655
+ throw new KasseneckValidationError('cancelReceipt', `Zahlung ${i + 1}: Karten-Rueckbuchung ohne Bezug: providerPaymentId der Erstattung am Terminal angeben (oder das Original ueber den Kassenweg lesen, dort traegt es die Kennung der Kartenzahlung)`, 'request');
656
+ });
618
657
  }
619
658
  /** Kartenanbieter pruefen — er stammt vom Aufrufer, nicht aus Serverdaten. */
620
659
  function kartenanbieter(wert) {
@@ -627,6 +666,24 @@ function kartenanbieter(wert) {
627
666
  function eingabefehler(grund) {
628
667
  return new KasseneckValidationError('createReceipt', grund, 'request');
629
668
  }
669
+ /**
670
+ * Liest die Erfolgsantwort eines **signierenden** Aufrufs. Scheitert das
671
+ * Lesen (fehlender Beleg, fehlender Bezug, unbrauchbares Feld oder ein
672
+ * Laufzeitfehler beim Umwandeln), hat der Server trotzdem Erfolg gemeldet:
673
+ * der Beleg ist signiert und im DEP. Das darf nie als gewoehnlicher Fehler
674
+ * enden, sonst kassiert die Kasse ein zweites Mal. Darum wird daraus
675
+ * `KasseneckApiError` mit Code `response_unreadable` und `outcome: 'unknown'`.
676
+ * Der Grund stammt vom Paket; aus der Antwort selbst wird nichts uebernommen.
677
+ */
678
+ function signiertGelesen(functionName, lesen) {
679
+ try {
680
+ return lesen();
681
+ }
682
+ catch (ursache) {
683
+ const grund = ursache instanceof KasseneckValidationError ? ursache.reason : 'Antwort nicht lesbar';
684
+ throw new KasseneckApiError(functionName, `Erfolg gemeldet, Antwort aber unlesbar (${grund}). Der Vorgang kann ausgefuehrt sein: nicht wiederholen, sondern nachlesen.`, {}, 'response_unreadable');
685
+ }
686
+ }
630
687
  /** Die Antwort meldete Erfolg, trug aber nicht, was der Aufruf zusagt. */
631
688
  function antwortfehler(functionName, grund) {
632
689
  return new KasseneckValidationError(functionName, grund, 'response');
@@ -638,8 +695,11 @@ function antwortfehler(functionName, grund) {
638
695
  * models/receipt.ts), und die bestehenden Aufrufe sollen ihre Zusage behalten.
639
696
  * Wer beides braucht, nimmt [belegMitFirmaAusHuelle] ueber die
640
697
  * `…WithCompany`-Varianten.
698
+ *
699
+ * Paketintern exportiert, damit `./stored` gespeicherte Belege mit demselben
700
+ * Leser liest; nicht Teil der Paketoberflaeche.
641
701
  */
642
- function belegAusHuelle(daten, functionName) {
702
+ export function belegAusHuelle(daten, functionName) {
643
703
  const huelle = daten;
644
704
  if (huelle == null || typeof huelle !== 'object' || huelle.receipt == null) {
645
705
  throw antwortfehler(functionName, 'Antwort enthaelt keinen Beleg (data.receipt fehlt)');
@@ -667,21 +727,34 @@ function belegAusHuelle(daten, functionName) {
667
727
  * fehlt er, ist die Antwort unbrauchbar. Die Firmendaten duerfen dagegen
668
728
  * luecken haben — ein Kundendokument ohne gepflegte Fusszeile ist kein Grund,
669
729
  * einen ausgestellten Beleg nicht anzuzeigen (siehe models/receipt-company.ts).
730
+ * Paketintern exportiert wie [belegAusHuelle].
670
731
  */
671
- function belegMitFirmaAusHuelle(daten, functionName) {
732
+ export function belegMitFirmaAusHuelle(daten, functionName) {
672
733
  const receipt = belegAusHuelle(daten, functionName);
673
734
  const d = (daten ?? {});
674
735
  const layout = d.layout && typeof d.layout === 'object' && Array.isArray(d.layout.lines) ? d.layout : null;
675
- const pa = d.pruefangaben && typeof d.pruefangaben === 'object' ? d.pruefangaben : null;
676
- const text = (v) => (typeof v === 'string' && v ? v : null);
736
+ const angaben = d.registrationInfo && typeof d.registrationInfo === 'object' ? readRegistrationInfo(d.registrationInfo) : null;
677
737
  return {
678
738
  receipt,
679
739
  company: fromReceiptCompanyPayload(daten),
680
- testKasse: d.testKasse === true,
681
- testSignatur: d.testSignatur === true,
682
- kopfId: typeof d.kopfId === 'string' ? d.kopfId : null,
740
+ testCashregister: d.testCashregister === true,
741
+ testSignature: d.testSignature === true,
742
+ headerVersionId: typeof d.headerVersionId === 'string' && d.headerVersionId !== '' ? d.headerVersionId : null,
683
743
  layout,
684
- pruefangaben: pa ? { karteRegistriertAm: text(pa.karteRegistriertAm), kasseRegistriertAm: text(pa.kasseRegistriertAm) } : null,
685
- logoStufe: d.logo_skala === 'S' || d.logo_skala === 'M' || d.logo_skala === 'L' || d.logo_skala === 'XL' ? d.logo_skala : 'M',
744
+ registrationInfo: angaben,
745
+ logoScale: d.logo_scale === 'S' || d.logo_scale === 'M' || d.logo_scale === 'L' || d.logo_scale === 'XL' ? d.logo_scale : 'M',
686
746
  };
687
747
  }
748
+ /**
749
+ * Zahlbetrag des Servers aus einem `payments_sum_mismatch`
750
+ * (`details.expectedCents`), sonst `undefined`. Das Paket wiederholt nie
751
+ * selbst mit diesem Betrag: eine Kartenzahlung ist schon belastet. Die Kasse
752
+ * entscheidet (Differenz nachkassieren oder erstatten) und schickt dann einen
753
+ * neuen Verkauf.
754
+ */
755
+ export function paymentsExpectedCents(error) {
756
+ if (!isKasseneckApiError(error) || error.code !== 'payments_sum_mismatch')
757
+ return undefined;
758
+ const wert = error.details['expectedCents'];
759
+ return Number.isSafeInteger(wert) ? wert : undefined;
760
+ }
@@ -1,5 +1,5 @@
1
- import type { ReportMonth } from '../models/index.js';
2
- import type { InternerBinaerTransport } from './aufrufe.js';
1
+ import { type Receipt, type ReceiptCompany, type ReportMonth } from '../models/index.js';
2
+ import type { InternerBinaerTransport, InternerTransport } from './aufrufe.js';
3
3
  /**
4
4
  * Bericht-Downloads — Zwilling von `downloadDailyReport`/`downloadMonthlyReport`
5
5
  * in kasseneck_api/lib/kasseneck_api.dart (Zeilen 113-128).
@@ -29,7 +29,7 @@ import type { InternerBinaerTransport } from './aufrufe.js';
29
29
  * Vortags holen (das Dart-Vorbild nimmt hier die Geraetezeit, was auf einer
30
30
  * oesterreichischen Kasse zufaellig stimmt).
31
31
  */
32
- export declare function downloadDailyReport(rufen: InternerBinaerTransport, date: Date): Promise<Uint8Array>;
32
+ export declare function downloadDailyReport(transport: InternerBinaerTransport, date: Date): Promise<Uint8Array>;
33
33
  /**
34
34
  * Monatsbericht als PDF.
35
35
  *
@@ -40,4 +40,26 @@ export declare function downloadDailyReport(rufen: InternerBinaerTransport, date
40
40
  * `month` geht als **Zahl 1-12** raus (im Flutter-Paket `reportMonth.month.id`,
41
41
  * wo `KeckMonth.january.id === 1` ist) — kein Name, kein nullbasierter Index.
42
42
  */
43
- export declare function downloadMonthlyReport(rufen: InternerBinaerTransport, reportMonth: ReportMonth): Promise<Uint8Array>;
43
+ export declare function downloadMonthlyReport(transport: InternerBinaerTransport, reportMonth: ReportMonth): Promise<Uint8Array>;
44
+ /** Zeitfenster von [getReportV2]: Wiener Wanduhr, `YYYY-MM-DD` oder voller Zeitstempel, `end` ausschliesslich. */
45
+ export interface ReportV2Options {
46
+ start: string;
47
+ end: string;
48
+ }
49
+ /** Firmendaten des Berichts: die Beleg-Firmendaten plus die Bezeichnung der Kasse. */
50
+ export interface ReportV2Metadata extends ReceiptCompany {
51
+ /** Bezeichnung der Kasse; leer, wenn keine gepflegt ist. */
52
+ label: string;
53
+ }
54
+ export interface ReportV2 {
55
+ /** Alle Belege der angemeldeten Kasse mit `start <= timeStamp < end`. */
56
+ receipts: Receipt[];
57
+ metadata: ReportV2Metadata;
58
+ }
59
+ /**
60
+ * Rohdaten eines Zeitraums (`getReportV2`): alle Belege der Kasse und die
61
+ * Firmendaten fuer Kopf und Fuss. Der Server vergleicht die Zeitstempel als
62
+ * Text (`start <= timeStamp < end`), darum Wiener Wanduhr im Serverformat.
63
+ * Nur ueber den API-Schluessel-Weg (Kasse aus dem `cashregister-token`).
64
+ */
65
+ export declare function getReportV2(transport: InternerTransport, options: ReportV2Options): Promise<ReportV2>;