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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (712) hide show
  1. package/CHANGELOG.md +317 -0
  2. package/README.de.md +11 -7
  3. package/README.md +509 -126
  4. package/dist/cjs/client/api.d.ts +7 -6
  5. package/dist/cjs/client/api.js +2 -2
  6. package/dist/cjs/client/aufrufe.d.ts +29 -5
  7. package/dist/cjs/client/aufrufe.js +114 -2
  8. package/dist/cjs/client/auth.d.ts +2 -0
  9. package/dist/cjs/client/auth.js +17 -1
  10. package/dist/cjs/client/cashregisters.d.ts +1 -1
  11. package/dist/cjs/client/cashregisters.js +2 -2
  12. package/dist/cjs/client/errors.d.ts +94 -19
  13. package/dist/cjs/client/errors.js +132 -28
  14. package/dist/cjs/client/fehlercodes.d.ts +9 -0
  15. package/dist/cjs/client/fehlercodes.js +36 -0
  16. package/dist/cjs/client/index.d.ts +5 -5
  17. package/dist/cjs/client/index.js +11 -3
  18. package/dist/cjs/client/receipts.d.ts +131 -124
  19. package/dist/cjs/client/receipts.js +196 -137
  20. package/dist/cjs/client/reports.d.ts +26 -4
  21. package/dist/cjs/client/reports.js +37 -4
  22. package/dist/cjs/client/status.d.ts +3 -3
  23. package/dist/cjs/client/status.js +7 -7
  24. package/dist/cjs/client/transport.d.ts +56 -4
  25. package/dist/cjs/client/transport.js +234 -25
  26. package/dist/cjs/enums/vat-rate.d.ts +2 -2
  27. package/dist/cjs/enums/vat-rate.js +1 -1
  28. package/dist/cjs/index.d.ts +4 -3
  29. package/dist/cjs/index.js +42 -13
  30. package/dist/{esm/rechnung → cjs/invoice}/api.d.ts +18 -17
  31. package/dist/cjs/{rechnung → invoice}/api.js +6 -6
  32. package/dist/{esm/rechnung → cjs/invoice}/auth.d.ts +2 -2
  33. package/dist/cjs/{rechnung → invoice}/auth.js +5 -5
  34. package/dist/{esm/rechnung/rechnen.d.ts → cjs/invoice/calc.d.ts} +27 -27
  35. package/dist/cjs/{rechnung/rechnen.js → invoice/calc.js} +54 -54
  36. package/dist/{esm/rechnung → cjs/invoice}/endpunkte.d.ts +23 -21
  37. package/dist/cjs/{rechnung → invoice}/endpunkte.js +52 -42
  38. package/dist/cjs/invoice/fehler.d.ts +31 -0
  39. package/dist/cjs/invoice/fehler.js +39 -0
  40. package/dist/cjs/invoice/index.d.ts +21 -0
  41. package/dist/cjs/invoice/index.js +86 -0
  42. package/dist/cjs/{rechnung → invoice}/summen.d.ts +12 -12
  43. package/dist/cjs/{rechnung → invoice}/summen.js +14 -14
  44. package/dist/cjs/invoice/texte.d.ts +224 -0
  45. package/dist/cjs/invoice/texte.js +425 -0
  46. package/dist/{esm/rechnung → cjs/invoice}/typen.d.ts +32 -11
  47. package/dist/cjs/{rechnung → invoice}/vertrag.d.ts +97 -71
  48. package/dist/cjs/{rechnung → invoice}/vertrag.js +144 -82
  49. package/dist/cjs/models/cancellation.d.ts +43 -24
  50. package/dist/cjs/models/cancellation.js +94 -46
  51. package/dist/cjs/models/hobex-receipt.d.ts +3 -3
  52. package/dist/cjs/models/hobex-receipt.js +35 -35
  53. package/dist/cjs/models/index.d.ts +6 -5
  54. package/dist/cjs/models/index.js +22 -2
  55. package/dist/cjs/models/payment-errors.d.ts +32 -15
  56. package/dist/cjs/models/payment-errors.js +80 -32
  57. package/dist/cjs/models/receipt-company.d.ts +6 -5
  58. package/dist/cjs/models/receipt-company.js +4 -4
  59. package/dist/cjs/models/receipt-email.d.ts +32 -18
  60. package/dist/cjs/models/receipt-email.js +69 -24
  61. package/dist/cjs/models/receipt-errors.d.ts +39 -0
  62. package/dist/cjs/models/receipt-errors.js +94 -0
  63. package/dist/cjs/models/receipt-item.d.ts +9 -1
  64. package/dist/cjs/models/receipt-item.js +3 -0
  65. package/dist/cjs/models/receipt-summary.d.ts +10 -4
  66. package/dist/cjs/models/receipt-summary.js +10 -4
  67. package/dist/cjs/models/receipt.d.ts +31 -2
  68. package/dist/cjs/models/receipt.js +12 -1
  69. package/dist/cjs/models/voucher.d.ts +7 -6
  70. package/dist/cjs/models/voucher.js +2 -7
  71. package/dist/cjs/partner/ablauf.d.ts +10 -10
  72. package/dist/cjs/partner/ablauf.js +29 -29
  73. package/dist/cjs/partner/api.d.ts +26 -23
  74. package/dist/cjs/partner/api.js +11 -13
  75. package/dist/cjs/partner/auth.d.ts +1 -1
  76. package/dist/cjs/partner/auth.js +2 -2
  77. package/dist/cjs/partner/betrieb.d.ts +7 -7
  78. package/dist/cjs/partner/betrieb.js +10 -10
  79. package/dist/cjs/partner/endpunkte.d.ts +27 -14
  80. package/dist/cjs/partner/endpunkte.js +80 -39
  81. package/dist/cjs/partner/fehler.d.ts +60 -30
  82. package/dist/cjs/partner/fehler.js +99 -43
  83. package/dist/cjs/partner/index.d.ts +13 -12
  84. package/dist/cjs/partner/index.js +35 -22
  85. package/dist/cjs/partner/secret.d.ts +3 -3
  86. package/dist/cjs/partner/secret.js +6 -6
  87. package/dist/cjs/partner/typen.d.ts +129 -71
  88. package/dist/cjs/partner/typen.js +76 -3
  89. package/dist/cjs/partner/webhook-signatur.d.ts +2 -2
  90. package/dist/cjs/partner/webhook-signatur.js +12 -12
  91. package/dist/cjs/partner/webhooks.d.ts +60 -32
  92. package/dist/cjs/partner/webhooks.js +40 -34
  93. package/dist/cjs/payments/hobex.d.ts +11 -3
  94. package/dist/cjs/payments/hobex.js +17 -5
  95. package/dist/cjs/payments/stripe.d.ts +5 -2
  96. package/dist/cjs/payments/stripe.js +10 -5
  97. package/dist/cjs/pos/artikel.d.ts +90 -0
  98. package/dist/cjs/pos/artikel.js +89 -0
  99. package/dist/cjs/pos/client.d.ts +27 -0
  100. package/dist/cjs/pos/client.js +144 -0
  101. package/dist/cjs/pos/drucker.d.ts +86 -0
  102. package/dist/cjs/pos/drucker.js +78 -0
  103. package/dist/cjs/pos/errors.d.ts +36 -0
  104. package/dist/cjs/pos/errors.js +95 -0
  105. package/dist/cjs/pos/index.d.ts +15 -0
  106. package/dist/cjs/pos/index.js +102 -0
  107. package/dist/cjs/pos/settings.d.ts +313 -0
  108. package/dist/cjs/pos/settings.js +376 -0
  109. package/dist/cjs/pos/texte.d.ts +883 -0
  110. package/dist/cjs/pos/texte.js +489 -0
  111. package/dist/cjs/{kasse → pos}/trinkgeld.d.ts +1 -1
  112. package/dist/cjs/{kasse → pos}/trinkgeld.js +2 -2
  113. package/dist/cjs/printing/escpos.d.ts +29 -29
  114. package/dist/cjs/printing/escpos.js +61 -61
  115. package/dist/cjs/printing/index.d.ts +2 -2
  116. package/dist/cjs/printing/index.js +17 -17
  117. package/dist/cjs/printing/qr-groesse.d.ts +38 -38
  118. package/dist/cjs/printing/qr-groesse.js +47 -47
  119. package/dist/cjs/printing/webusb.d.ts +2 -2
  120. package/dist/cjs/printing/webusb.js +4 -4
  121. package/dist/cjs/react/index.d.ts +21 -21
  122. package/dist/cjs/react/index.js +40 -30
  123. package/dist/cjs/receipt/bild.d.ts +4 -4
  124. package/dist/cjs/receipt/bild.js +11 -11
  125. package/dist/cjs/receipt/blatt.d.ts +46 -46
  126. package/dist/cjs/receipt/blatt.js +59 -59
  127. package/dist/cjs/receipt/discount.d.ts +1 -1
  128. package/dist/cjs/receipt/discount.js +8 -8
  129. package/dist/cjs/receipt/due.d.ts +86 -0
  130. package/dist/cjs/receipt/due.js +261 -0
  131. package/dist/cjs/receipt/epos.d.ts +22 -22
  132. package/dist/cjs/receipt/epos.js +45 -45
  133. package/dist/cjs/receipt/grid.d.ts +10 -10
  134. package/dist/cjs/receipt/grid.js +20 -20
  135. package/dist/cjs/receipt/index.d.ts +9 -8
  136. package/dist/cjs/receipt/index.js +26 -23
  137. package/dist/cjs/receipt/layout-escpos.d.ts +24 -24
  138. package/dist/cjs/receipt/layout-escpos.js +49 -49
  139. package/dist/cjs/receipt/layout.d.ts +28 -23
  140. package/dist/cjs/receipt/layout.js +45 -21
  141. package/dist/cjs/receipt/marke-daten.d.ts +8 -8
  142. package/dist/cjs/receipt/marke-daten.js +8 -8
  143. package/dist/cjs/receipt/marke.d.ts +7 -7
  144. package/dist/cjs/receipt/marke.js +10 -10
  145. package/dist/cjs/register/errors.d.ts +61 -0
  146. package/dist/cjs/register/errors.js +112 -0
  147. package/dist/cjs/register/index.d.ts +14 -1
  148. package/dist/cjs/register/index.js +20 -1
  149. package/dist/cjs/register/pairing.d.ts +55 -36
  150. package/dist/cjs/register/pairing.js +33 -29
  151. package/dist/cjs/register/session.d.ts +5 -5
  152. package/dist/cjs/register/session.js +7 -7
  153. package/dist/cjs/stored/draht.d.ts +45 -0
  154. package/dist/cjs/stored/draht.js +220 -0
  155. package/dist/cjs/stored/einstellungen.d.ts +23 -0
  156. package/dist/cjs/stored/einstellungen.js +200 -0
  157. package/dist/cjs/stored/index.d.ts +109 -0
  158. package/dist/cjs/stored/index.js +225 -0
  159. package/dist/cjs/stored/vokabular.d.ts +18 -0
  160. package/dist/cjs/stored/vokabular.js +389 -0
  161. package/dist/cjs/version.d.ts +7 -0
  162. package/dist/cjs/version.js +10 -0
  163. package/dist/cjs/vienna-time.d.ts +1 -1
  164. package/dist/cjs/vienna-time.js +2 -2
  165. package/dist/esm/client/api.d.ts +7 -6
  166. package/dist/esm/client/api.js +4 -4
  167. package/dist/esm/client/aufrufe.d.ts +29 -5
  168. package/dist/esm/client/aufrufe.js +111 -1
  169. package/dist/esm/client/auth.d.ts +2 -0
  170. package/dist/esm/client/auth.js +16 -1
  171. package/dist/esm/client/cashregisters.d.ts +1 -1
  172. package/dist/esm/client/cashregisters.js +2 -2
  173. package/dist/esm/client/errors.d.ts +94 -19
  174. package/dist/esm/client/errors.js +129 -27
  175. package/dist/esm/client/fehlercodes.d.ts +9 -0
  176. package/dist/esm/client/fehlercodes.js +32 -0
  177. package/dist/esm/client/index.d.ts +5 -5
  178. package/dist/esm/client/index.js +5 -5
  179. package/dist/esm/client/receipts.d.ts +131 -124
  180. package/dist/esm/client/receipts.js +195 -140
  181. package/dist/esm/client/reports.d.ts +26 -4
  182. package/dist/esm/client/reports.js +36 -4
  183. package/dist/esm/client/status.d.ts +3 -3
  184. package/dist/esm/client/status.js +7 -7
  185. package/dist/esm/client/transport.d.ts +56 -4
  186. package/dist/esm/client/transport.js +233 -24
  187. package/dist/esm/enums/vat-rate.d.ts +2 -2
  188. package/dist/esm/enums/vat-rate.js +1 -1
  189. package/dist/esm/index.d.ts +4 -3
  190. package/dist/esm/index.js +4 -3
  191. package/dist/{cjs/rechnung → esm/invoice}/api.d.ts +18 -17
  192. package/dist/esm/{rechnung → invoice}/api.js +6 -6
  193. package/dist/{cjs/rechnung → esm/invoice}/auth.d.ts +2 -2
  194. package/dist/esm/{rechnung → invoice}/auth.js +4 -4
  195. package/dist/{cjs/rechnung/rechnen.d.ts → esm/invoice/calc.d.ts} +27 -27
  196. package/dist/esm/{rechnung/rechnen.js → invoice/calc.js} +45 -45
  197. package/dist/{cjs/rechnung → esm/invoice}/endpunkte.d.ts +23 -21
  198. package/dist/esm/{rechnung → invoice}/endpunkte.js +52 -42
  199. package/dist/esm/invoice/fehler.d.ts +31 -0
  200. package/dist/esm/invoice/fehler.js +33 -0
  201. package/dist/esm/invoice/index.d.ts +21 -0
  202. package/dist/esm/invoice/index.js +20 -0
  203. package/dist/esm/{rechnung → invoice}/summen.d.ts +12 -12
  204. package/dist/esm/{rechnung → invoice}/summen.js +12 -12
  205. package/dist/esm/invoice/texte.d.ts +224 -0
  206. package/dist/esm/invoice/texte.js +421 -0
  207. package/dist/{cjs/rechnung → esm/invoice}/typen.d.ts +32 -11
  208. package/dist/esm/{rechnung → invoice}/vertrag.d.ts +97 -71
  209. package/dist/esm/{rechnung → invoice}/vertrag.js +143 -81
  210. package/dist/esm/models/cancellation.d.ts +43 -24
  211. package/dist/esm/models/cancellation.js +90 -45
  212. package/dist/esm/models/hobex-receipt.d.ts +3 -3
  213. package/dist/esm/models/hobex-receipt.js +35 -35
  214. package/dist/esm/models/index.d.ts +6 -5
  215. package/dist/esm/models/index.js +6 -5
  216. package/dist/esm/models/payment-errors.d.ts +32 -15
  217. package/dist/esm/models/payment-errors.js +77 -32
  218. package/dist/esm/models/receipt-company.d.ts +6 -5
  219. package/dist/esm/models/receipt-company.js +4 -4
  220. package/dist/esm/models/receipt-email.d.ts +32 -18
  221. package/dist/esm/models/receipt-email.js +65 -23
  222. package/dist/esm/models/receipt-errors.d.ts +39 -0
  223. package/dist/esm/models/receipt-errors.js +87 -0
  224. package/dist/esm/models/receipt-item.d.ts +9 -1
  225. package/dist/esm/models/receipt-item.js +3 -0
  226. package/dist/esm/models/receipt-summary.d.ts +10 -4
  227. package/dist/esm/models/receipt-summary.js +9 -3
  228. package/dist/esm/models/receipt.d.ts +31 -2
  229. package/dist/esm/models/receipt.js +12 -2
  230. package/dist/esm/models/voucher.d.ts +7 -6
  231. package/dist/esm/models/voucher.js +2 -7
  232. package/dist/esm/partner/ablauf.d.ts +10 -10
  233. package/dist/esm/partner/ablauf.js +27 -27
  234. package/dist/esm/partner/api.d.ts +26 -23
  235. package/dist/esm/partner/api.js +13 -15
  236. package/dist/esm/partner/auth.d.ts +1 -1
  237. package/dist/esm/partner/auth.js +2 -2
  238. package/dist/esm/partner/betrieb.d.ts +7 -7
  239. package/dist/esm/partner/betrieb.js +8 -8
  240. package/dist/esm/partner/endpunkte.d.ts +27 -14
  241. package/dist/esm/partner/endpunkte.js +79 -39
  242. package/dist/esm/partner/fehler.d.ts +60 -30
  243. package/dist/esm/partner/fehler.js +91 -35
  244. package/dist/esm/partner/index.d.ts +13 -12
  245. package/dist/esm/partner/index.js +12 -11
  246. package/dist/esm/partner/secret.d.ts +3 -3
  247. package/dist/esm/partner/secret.js +5 -5
  248. package/dist/esm/partner/typen.d.ts +129 -71
  249. package/dist/esm/partner/typen.js +75 -2
  250. package/dist/esm/partner/webhook-signatur.d.ts +2 -2
  251. package/dist/esm/partner/webhook-signatur.js +12 -12
  252. package/dist/esm/partner/webhooks.d.ts +60 -32
  253. package/dist/esm/partner/webhooks.js +38 -32
  254. package/dist/esm/payments/hobex.d.ts +11 -3
  255. package/dist/esm/payments/hobex.js +18 -6
  256. package/dist/esm/payments/stripe.d.ts +5 -2
  257. package/dist/esm/payments/stripe.js +11 -6
  258. package/dist/esm/pos/artikel.d.ts +90 -0
  259. package/dist/esm/pos/artikel.js +79 -0
  260. package/dist/esm/pos/client.d.ts +27 -0
  261. package/dist/esm/pos/client.js +137 -0
  262. package/dist/esm/pos/drucker.d.ts +86 -0
  263. package/dist/esm/pos/drucker.js +71 -0
  264. package/dist/esm/pos/errors.d.ts +36 -0
  265. package/dist/esm/pos/errors.js +88 -0
  266. package/dist/esm/pos/index.d.ts +15 -0
  267. package/dist/esm/pos/index.js +20 -0
  268. package/dist/esm/pos/settings.d.ts +313 -0
  269. package/dist/esm/pos/settings.js +367 -0
  270. package/dist/esm/pos/texte.d.ts +883 -0
  271. package/dist/esm/pos/texte.js +481 -0
  272. package/dist/esm/{kasse → pos}/trinkgeld.d.ts +1 -1
  273. package/dist/esm/{kasse → pos}/trinkgeld.js +2 -2
  274. package/dist/esm/printing/escpos.d.ts +29 -29
  275. package/dist/esm/printing/escpos.js +56 -56
  276. package/dist/esm/printing/index.d.ts +2 -2
  277. package/dist/esm/printing/index.js +2 -2
  278. package/dist/esm/printing/qr-groesse.d.ts +38 -38
  279. package/dist/esm/printing/qr-groesse.js +42 -42
  280. package/dist/esm/printing/webusb.d.ts +2 -2
  281. package/dist/esm/printing/webusb.js +4 -4
  282. package/dist/esm/react/index.d.ts +21 -21
  283. package/dist/esm/react/index.js +39 -29
  284. package/dist/esm/receipt/bild.d.ts +4 -4
  285. package/dist/esm/receipt/bild.js +11 -11
  286. package/dist/esm/receipt/blatt.d.ts +46 -46
  287. package/dist/esm/receipt/blatt.js +55 -55
  288. package/dist/esm/receipt/discount.d.ts +1 -1
  289. package/dist/esm/receipt/discount.js +7 -7
  290. package/dist/esm/receipt/due.d.ts +86 -0
  291. package/dist/esm/receipt/due.js +257 -0
  292. package/dist/esm/receipt/epos.d.ts +22 -22
  293. package/dist/esm/receipt/epos.js +47 -47
  294. package/dist/esm/receipt/grid.d.ts +10 -10
  295. package/dist/esm/receipt/grid.js +18 -18
  296. package/dist/esm/receipt/index.d.ts +9 -8
  297. package/dist/esm/receipt/index.js +9 -8
  298. package/dist/esm/receipt/layout-escpos.d.ts +24 -24
  299. package/dist/esm/receipt/layout-escpos.js +51 -51
  300. package/dist/esm/receipt/layout.d.ts +28 -23
  301. package/dist/esm/receipt/layout.js +44 -20
  302. package/dist/esm/receipt/marke-daten.d.ts +8 -8
  303. package/dist/esm/receipt/marke-daten.js +7 -7
  304. package/dist/esm/receipt/marke.d.ts +7 -7
  305. package/dist/esm/receipt/marke.js +10 -10
  306. package/dist/esm/register/errors.d.ts +61 -0
  307. package/dist/esm/register/errors.js +104 -0
  308. package/dist/esm/register/index.d.ts +14 -1
  309. package/dist/esm/register/index.js +13 -0
  310. package/dist/esm/register/pairing.d.ts +55 -36
  311. package/dist/esm/register/pairing.js +33 -29
  312. package/dist/esm/register/session.d.ts +5 -5
  313. package/dist/esm/register/session.js +7 -7
  314. package/dist/esm/stored/draht.d.ts +45 -0
  315. package/dist/esm/stored/draht.js +208 -0
  316. package/dist/esm/stored/einstellungen.d.ts +23 -0
  317. package/dist/esm/stored/einstellungen.js +196 -0
  318. package/dist/esm/stored/index.d.ts +109 -0
  319. package/dist/esm/stored/index.js +217 -0
  320. package/dist/esm/stored/vokabular.d.ts +18 -0
  321. package/dist/esm/stored/vokabular.js +386 -0
  322. package/dist/esm/version.d.ts +7 -0
  323. package/dist/esm/version.js +7 -0
  324. package/dist/esm/vienna-time.d.ts +1 -1
  325. package/dist/esm/vienna-time.js +2 -2
  326. package/fixtures/{erwartet/storno-rabatt.lines.json → expected/cancellation-discount.lines.json} +2 -2
  327. package/fixtures/expected/cancellation-discount.sheet32.json +248 -0
  328. package/fixtures/{erwartet/storno-rabatt.blatt48.json → expected/cancellation-discount.sheet48.json} +119 -119
  329. package/fixtures/{erwartet/storno-voll.lines.json → expected/cancellation-full.lines.json} +2 -2
  330. package/fixtures/expected/cancellation-full.sheet32.json +218 -0
  331. package/fixtures/{erwartet/storno-voll.blatt48.json → expected/cancellation-full.sheet48.json} +107 -107
  332. package/fixtures/{erwartet/storno-teil.lines.json → expected/cancellation-partial.lines.json} +2 -2
  333. package/fixtures/expected/cancellation-partial.sheet32.json +206 -0
  334. package/fixtures/{erwartet/storno-teil.blatt48.json → expected/cancellation-partial.sheet48.json} +101 -101
  335. package/fixtures/{erwartet/storno-split-voll.lines.json → expected/cancellation-split-full.lines.json} +2 -2
  336. package/fixtures/expected/cancellation-split-full.sheet32.json +320 -0
  337. package/fixtures/{erwartet/storno-split-voll.blatt48.json → expected/cancellation-split-full.sheet48.json} +158 -158
  338. package/fixtures/{erwartet/storno-split-teil.lines.json → expected/cancellation-split-partial.lines.json} +2 -2
  339. package/fixtures/expected/cancellation-split-partial.sheet32.json +230 -0
  340. package/fixtures/{erwartet/storno-split-teil.blatt48.json → expected/cancellation-split-partial.sheet48.json} +113 -113
  341. package/fixtures/{erwartet/karte-eigener.lines.json → expected/card-custom.lines.json} +1 -1
  342. package/fixtures/expected/card-custom.sheet32.json +158 -0
  343. package/fixtures/{erwartet/karte-eigener.blatt48.json → expected/card-custom.sheet48.json} +80 -80
  344. package/fixtures/{erwartet/karte-gptom-ios.lines.json → expected/card-gptom-ios.lines.json} +1 -1
  345. package/fixtures/expected/card-gptom-ios.sheet32.json +230 -0
  346. package/fixtures/{erwartet/karte-gptom-ios.blatt48.json → expected/card-gptom-ios.sheet48.json} +116 -116
  347. package/fixtures/{erwartet/karte-gptom.lines.json → expected/card-gptom.lines.json} +1 -1
  348. package/fixtures/expected/card-gptom.sheet32.json +230 -0
  349. package/fixtures/{erwartet/karte-gptom.blatt48.json → expected/card-gptom.sheet48.json} +116 -116
  350. package/fixtures/{erwartet/karte-hobex-cloud.lines.json → expected/card-hobex-cloud.lines.json} +1 -1
  351. package/fixtures/expected/card-hobex-cloud.sheet32.json +200 -0
  352. package/fixtures/{erwartet/karte-hobex-cloud.blatt48.json → expected/card-hobex-cloud.sheet48.json} +101 -101
  353. package/fixtures/{erwartet/karte-hobex-hps.lines.json → expected/card-hobex-hps.lines.json} +1 -1
  354. package/fixtures/expected/card-hobex-hps.sheet32.json +224 -0
  355. package/fixtures/{erwartet/karte-hobex-hps.blatt48.json → expected/card-hobex-hps.sheet48.json} +113 -113
  356. package/fixtures/{erwartet/karte-mypos.lines.json → expected/card-mypos.lines.json} +1 -1
  357. package/fixtures/expected/card-mypos.sheet32.json +254 -0
  358. package/fixtures/{erwartet/karte-mypos.blatt48.json → expected/card-mypos.sheet48.json} +122 -122
  359. package/fixtures/{erwartet/karte-stripe-eps.lines.json → expected/card-stripe-eps.lines.json} +1 -1
  360. package/fixtures/expected/card-stripe-eps.sheet32.json +194 -0
  361. package/fixtures/{erwartet/karte-stripe-eps.blatt48.json → expected/card-stripe-eps.sheet48.json} +98 -98
  362. package/fixtures/{erwartet/karte-stripe.lines.json → expected/card-stripe.lines.json} +1 -1
  363. package/fixtures/expected/card-stripe.sheet32.json +212 -0
  364. package/fixtures/{erwartet/karte-stripe.blatt48.json → expected/card-stripe.sheet48.json} +107 -107
  365. package/fixtures/{erwartet/karte-sumup.lines.json → expected/card-sumup.lines.json} +1 -1
  366. package/fixtures/expected/card-sumup.sheet32.json +218 -0
  367. package/fixtures/{erwartet/karte-sumup.blatt48.json → expected/card-sumup.sheet48.json} +104 -104
  368. package/fixtures/{erwartet/rabattzeilen.lines.json → expected/discount-lines.lines.json} +1 -1
  369. package/fixtures/expected/discount-lines.sheet32.json +200 -0
  370. package/fixtures/{erwartet/rabattzeilen.blatt48.json → expected/discount-lines.sheet48.json} +98 -98
  371. package/fixtures/{erwartet/rabatt-chef-trinkgeld.lines.json → expected/discount-owner-tip.lines.json} +1 -1
  372. package/fixtures/expected/discount-owner-tip.sheet32.json +212 -0
  373. package/fixtures/{erwartet/rabatt-chef-trinkgeld.blatt48.json → expected/discount-owner-tip.sheet48.json} +104 -104
  374. package/fixtures/{erwartet/rabatt-einfach.lines.json → expected/discount-simple.lines.json} +1 -1
  375. package/fixtures/expected/discount-simple.sheet32.json +182 -0
  376. package/fixtures/{erwartet/rabatt-einfach.blatt48.json → expected/discount-simple.sheet48.json} +89 -89
  377. package/fixtures/{erwartet/rabatt-trinkgeld.lines.json → expected/discount-tip.lines.json} +1 -1
  378. package/fixtures/expected/discount-tip.sheet32.json +212 -0
  379. package/fixtures/{erwartet/rabatt-trinkgeld.blatt48.json → expected/discount-tip.sheet48.json} +104 -104
  380. package/fixtures/{erwartet/rabatt-wertgutschein.lines.json → expected/discount-value-voucher.lines.json} +1 -1
  381. package/fixtures/expected/discount-value-voucher.sheet32.json +218 -0
  382. package/fixtures/{erwartet/rabatt-wertgutschein.blatt48.json → expected/discount-value-voucher.sheet48.json} +107 -107
  383. package/fixtures/{erwartet/langer-artikelname.lines.json → expected/long-item-name.lines.json} +1 -1
  384. package/fixtures/expected/long-item-name.sheet32.json +176 -0
  385. package/fixtures/{erwartet/langer-artikelname.blatt48.json → expected/long-item-name.sheet48.json} +86 -86
  386. package/fixtures/{erwartet/verkauf-karte.lines.json → expected/sale-card.lines.json} +1 -1
  387. package/fixtures/expected/sale-card.sheet32.json +176 -0
  388. package/fixtures/{erwartet/verkauf-karte.blatt48.json → expected/sale-card.sheet48.json} +86 -86
  389. package/fixtures/{erwartet/verkauf-bar.lines.json → expected/sale-cash.lines.json} +1 -1
  390. package/fixtures/expected/sale-cash.sheet32.json +176 -0
  391. package/fixtures/{erwartet/verkauf-bar.blatt48.json → expected/sale-cash.sheet48.json} +86 -86
  392. package/fixtures/{erwartet/verkauf-kleinunternehmer.lines.json → expected/sale-small-business.lines.json} +1 -1
  393. package/fixtures/expected/sale-small-business.sheet32.json +182 -0
  394. package/fixtures/{erwartet/verkauf-kleinunternehmer.blatt48.json → expected/sale-small-business.sheet48.json} +89 -89
  395. package/fixtures/{erwartet/signaturausfall-verkauf.lines.json → expected/signature-outage-sale.lines.json} +1 -1
  396. package/fixtures/expected/signature-outage-sale.sheet32.json +194 -0
  397. package/fixtures/{erwartet/signaturausfall-verkauf.blatt48.json → expected/signature-outage-sale.sheet48.json} +92 -92
  398. package/fixtures/{erwartet/split-karte-karte-bar.lines.json → expected/split-card-card-cash.lines.json} +1 -1
  399. package/fixtures/expected/split-card-card-cash.sheet32.json +356 -0
  400. package/fixtures/{erwartet/split-karte-karte-bar.blatt48.json → expected/split-card-card-cash.sheet48.json} +170 -170
  401. package/fixtures/{erwartet/split-bar-rueckgeld.lines.json → expected/split-cash-change.lines.json} +1 -1
  402. package/fixtures/expected/split-cash-change.sheet32.json +194 -0
  403. package/fixtures/{erwartet/split-bar-rueckgeld.blatt48.json → expected/split-cash-change.sheet48.json} +92 -92
  404. package/fixtures/{erwartet/split-langer-betrag.lines.json → expected/split-long-amount.lines.json} +1 -1
  405. package/fixtures/expected/split-long-amount.sheet32.json +266 -0
  406. package/fixtures/{erwartet/split-langer-betrag.blatt48.json → expected/split-long-amount.sheet48.json} +131 -131
  407. package/fixtures/{erwartet/split-eine-karte-trinkgeld.lines.json → expected/split-one-card-tip.lines.json} +1 -1
  408. package/fixtures/expected/split-one-card-tip.sheet32.json +242 -0
  409. package/fixtures/{erwartet/split-eine-karte-trinkgeld.blatt48.json → expected/split-one-card-tip.sheet48.json} +113 -113
  410. package/fixtures/{erwartet/split-tischrunde-trinkgeld.lines.json → expected/split-table-round-tip.lines.json} +1 -1
  411. package/fixtures/expected/split-table-round-tip.sheet32.json +470 -0
  412. package/fixtures/{erwartet/split-tischrunde-trinkgeld.blatt48.json → expected/split-table-round-tip.sheet48.json} +218 -218
  413. package/fixtures/{erwartet/split-trinkgeld-karte.lines.json → expected/split-tip-card.lines.json} +1 -1
  414. package/fixtures/expected/split-tip-card.sheet32.json +272 -0
  415. package/fixtures/{erwartet/split-trinkgeld-karte.blatt48.json → expected/split-tip-card.sheet48.json} +128 -128
  416. package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.lines.json → expected/split-two-cards-same-provider.lines.json} +1 -1
  417. package/fixtures/expected/split-two-cards-same-provider.sheet32.json +326 -0
  418. package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.blatt48.json → expected/split-two-cards-same-provider.sheet48.json} +149 -149
  419. package/fixtures/{erwartet/testkasse-verkauf.lines.json → expected/test-cashregister-sale.lines.json} +3 -3
  420. package/fixtures/expected/test-cashregister-sale.sheet32.json +224 -0
  421. package/fixtures/{erwartet/testkasse-verkauf.blatt48.json → expected/test-cashregister-sale.sheet48.json} +110 -110
  422. package/fixtures/{erwartet/testsignatur-verkauf.lines.json → expected/test-signature-sale.lines.json} +3 -3
  423. package/fixtures/expected/test-signature-sale.sheet32.json +236 -0
  424. package/fixtures/{erwartet/testsignatur-verkauf.blatt48.json → expected/test-signature-sale.sheet48.json} +110 -110
  425. package/fixtures/{erwartet → expected}/training.lines.json +2 -2
  426. package/fixtures/expected/training.sheet32.json +236 -0
  427. package/fixtures/{erwartet/training.blatt48.json → expected/training.sheet48.json} +110 -110
  428. package/fixtures/{erwartet/null-jahr.lines.json → expected/zero-annual.lines.json} +2 -2
  429. package/fixtures/expected/zero-annual.sheet32.json +212 -0
  430. package/fixtures/{erwartet/null-jahr.blatt48.json → expected/zero-annual.sheet48.json} +95 -95
  431. package/fixtures/{erwartet/null-schluss.lines.json → expected/zero-final.lines.json} +2 -2
  432. package/fixtures/expected/zero-final.sheet32.json +206 -0
  433. package/fixtures/{erwartet/null-schluss.blatt48.json → expected/zero-final.sheet48.json} +95 -95
  434. package/fixtures/{erwartet/null-pruef.lines.json → expected/zero-manual.lines.json} +2 -2
  435. package/fixtures/expected/zero-manual.sheet32.json +206 -0
  436. package/fixtures/{erwartet/null-pruef.blatt48.json → expected/zero-manual.sheet48.json} +95 -95
  437. package/fixtures/{erwartet/null-monat.lines.json → expected/zero-monthly.lines.json} +2 -2
  438. package/fixtures/expected/zero-monthly.sheet32.json +206 -0
  439. package/fixtures/{erwartet/null-monat.blatt48.json → expected/zero-monthly.sheet48.json} +95 -95
  440. package/fixtures/{erwartet/null-ausfall.lines.json → expected/zero-outage-end.lines.json} +2 -2
  441. package/fixtures/expected/zero-outage-end.sheet32.json +206 -0
  442. package/fixtures/{erwartet/null-ausfall.blatt48.json → expected/zero-outage-end.sheet48.json} +95 -95
  443. package/fixtures/{erwartet/null-start.lines.json → expected/zero-start.lines.json} +2 -2
  444. package/fixtures/expected/zero-start.sheet32.json +206 -0
  445. package/fixtures/{erwartet/null-start.blatt48.json → expected/zero-start.sheet48.json} +95 -95
  446. package/fixtures/hobex-hps-codes.json +12 -12
  447. package/fixtures/invoice-api-examples/brands-ok.json +8 -0
  448. package/fixtures/{rechnung-api-beispiele/credit-fehler-grund.json → invoice-api-examples/credit-error-reason.json} +6 -6
  449. package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/credit-ok.json +6 -6
  450. package/fixtures/{rechnung-api-beispiele/customer-fehler-uid.json → invoice-api-examples/customer-error-vat-id.json} +4 -4
  451. package/fixtures/invoice-api-examples/customer-get-error-both.json +15 -0
  452. package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/customer-ok.json +4 -4
  453. package/fixtures/{rechnung-api-beispiele/customer-search-fehler-leer.json → invoice-api-examples/customer-search-error-empty.json} +4 -4
  454. package/fixtures/{rechnung-api-beispiele/issue-rabatt.json → invoice-api-examples/issue-discount.json} +6 -6
  455. package/fixtures/{rechnung-api-beispiele/issue-englisch.json → invoice-api-examples/issue-english.json} +7 -7
  456. package/fixtures/{rechnung-api-beispiele/issue-fehler-cent.json → invoice-api-examples/issue-error-cent.json} +6 -6
  457. package/fixtures/{rechnung-api-beispiele/issue-fehler-sprache.json → invoice-api-examples/issue-error-language.json} +5 -5
  458. package/fixtures/{rechnung-api-beispiele/issue-fehler-negativ.json → invoice-api-examples/issue-error-negative.json} +6 -6
  459. package/fixtures/{rechnung-api-beispiele/issue-fehler-zahlungsart.json → invoice-api-examples/issue-error-payment-method.json} +8 -6
  460. package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-beide.json → invoice-api-examples/issue-error-price-both.json} +6 -6
  461. package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-fehlt.json → invoice-api-examples/issue-error-price-missing.json} +6 -6
  462. package/fixtures/{rechnung-api-beispiele/issue-fehler-menge.json → invoice-api-examples/issue-error-quantity.json} +6 -6
  463. package/fixtures/{rechnung-api-beispiele/issue-fehler-satz.json → invoice-api-examples/issue-error-rate.json} +6 -6
  464. package/fixtures/{rechnung-api-beispiele/issue-fehler-einheit.json → invoice-api-examples/issue-error-unit.json} +5 -5
  465. package/fixtures/{rechnung-api-beispiele/issue-fehler-unbekannt.json → invoice-api-examples/issue-error-unknown.json} +6 -6
  466. package/fixtures/{rechnung-api-beispiele/issue-brutto-20.json → invoice-api-examples/issue-gross-20.json} +6 -6
  467. package/fixtures/{rechnung-api-beispiele/issue-mikropreis.json → invoice-api-examples/issue-micro-price.json} +6 -6
  468. package/fixtures/{rechnung-api-beispiele/issue-gemischt.json → invoice-api-examples/issue-mixed.json} +6 -6
  469. package/fixtures/{rechnung-api-beispiele/issue-netto-20.json → invoice-api-examples/issue-net-20.json} +6 -6
  470. package/fixtures/{rechnung-api-beispiele/issue-bezahlt.json → invoice-api-examples/issue-paid.json} +7 -7
  471. package/fixtures/{rechnung-api-beispiele/issue-kleinunternehmer.json → invoice-api-examples/issue-small-business.json} +6 -6
  472. package/fixtures/invoice-api-examples/payment-error-on-site.json +17 -0
  473. package/fixtures/invoice-api-examples/payment-error-without-key.json +16 -0
  474. package/fixtures/invoice-api-examples/payment-recorded-later.json +14 -0
  475. package/fixtures/{rechnung-api-beispiele/setup-status-fehler-feld.json → invoice-api-examples/setup-status-error-field.json} +4 -4
  476. package/fixtures/invoice-api-examples/setup-status-ok.json +8 -0
  477. package/fixtures/{rechnung-api.schema.json → invoice-api.schema.json} +24 -24
  478. package/fixtures/{rechnung-rechnen-zufall.json → invoice-calc-random.json} +828 -828
  479. package/fixtures/{rechnung-rechnen.json → invoice-calc.json} +47 -47
  480. package/fixtures/invoice-texts.json +464 -0
  481. package/fixtures/{rechnung-summen.json → invoice-totals.json} +25 -25
  482. package/fixtures/{position-aus-euro.json → item-from-euro.json} +26 -26
  483. package/fixtures/manifest.json +252 -252
  484. package/fixtures/pos-message-cases.json +32 -0
  485. package/fixtures/pos-settings-defaults.json +149 -0
  486. package/fixtures/{kasse-texte.json → pos-texts.json} +416 -416
  487. package/fixtures/receipt-due-generated.json +1218 -0
  488. package/fixtures/{belege/storno-rabatt.json → receipts/cancellation-discount.json} +3 -3
  489. package/fixtures/{belege/storno-voll.json → receipts/cancellation-full.json} +3 -3
  490. package/fixtures/{belege/storno-teil.json → receipts/cancellation-partial.json} +3 -3
  491. package/fixtures/{belege/storno-split-voll.json → receipts/cancellation-split-full.json} +3 -3
  492. package/fixtures/{belege/storno-split-teil.json → receipts/cancellation-split-partial.json} +3 -3
  493. package/fixtures/{belege/karte-eigener.json → receipts/card-custom.json} +2 -2
  494. package/fixtures/{belege/karte-gptom-ios.json → receipts/card-gptom-ios.json} +2 -2
  495. package/fixtures/{belege/karte-gptom.json → receipts/card-gptom.json} +2 -2
  496. package/fixtures/{belege/karte-hobex-cloud.json → receipts/card-hobex-cloud.json} +2 -2
  497. package/fixtures/{belege/karte-hobex-hps.json → receipts/card-hobex-hps.json} +2 -2
  498. package/fixtures/{belege/karte-mypos.json → receipts/card-mypos.json} +2 -2
  499. package/fixtures/{belege/karte-stripe-eps.json → receipts/card-stripe-eps.json} +2 -2
  500. package/fixtures/{belege/karte-stripe.json → receipts/card-stripe.json} +2 -2
  501. package/fixtures/{belege/karte-sumup.json → receipts/card-sumup.json} +2 -2
  502. package/fixtures/{belege/rabattzeilen.json → receipts/discount-lines.json} +2 -2
  503. package/fixtures/{belege/rabatt-chef-trinkgeld.json → receipts/discount-owner-tip.json} +2 -2
  504. package/fixtures/{belege/rabatt-einfach.json → receipts/discount-simple.json} +2 -2
  505. package/fixtures/{belege/rabatt-trinkgeld.json → receipts/discount-tip.json} +2 -2
  506. package/fixtures/{belege/rabatt-wertgutschein.json → receipts/discount-value-voucher.json} +2 -2
  507. package/fixtures/{belege/langer-artikelname.json → receipts/long-item-name.json} +2 -2
  508. package/fixtures/{belege/verkauf-karte.json → receipts/sale-card.json} +2 -2
  509. package/fixtures/{belege/verkauf-bar.json → receipts/sale-cash.json} +2 -2
  510. package/fixtures/{belege/verkauf-kleinunternehmer.json → receipts/sale-small-business.json} +1 -1
  511. package/fixtures/{belege/signaturausfall-verkauf.json → receipts/signature-outage-sale.json} +2 -2
  512. package/fixtures/{belege/split-karte-karte-bar.json → receipts/split-card-card-cash.json} +2 -2
  513. package/fixtures/{belege/split-bar-rueckgeld.json → receipts/split-cash-change.json} +2 -2
  514. package/fixtures/{belege/split-langer-betrag.json → receipts/split-long-amount.json} +2 -2
  515. package/fixtures/{belege/split-eine-karte-trinkgeld.json → receipts/split-one-card-tip.json} +2 -2
  516. package/fixtures/{belege/split-tischrunde-trinkgeld.json → receipts/split-table-round-tip.json} +2 -2
  517. package/fixtures/{belege/split-trinkgeld-karte.json → receipts/split-tip-card.json} +2 -2
  518. package/fixtures/{belege/split-zwei-karten-gleicher-anbieter.json → receipts/split-two-cards-same-provider.json} +2 -2
  519. package/fixtures/{belege/testsignatur-verkauf.json → receipts/test-cashregister-sale.json} +3 -3
  520. package/fixtures/{belege/testkasse-verkauf.json → receipts/test-signature-sale.json} +3 -3
  521. package/fixtures/{belege → receipts}/training.json +2 -2
  522. package/fixtures/{belege/null-jahr.json → receipts/zero-annual.json} +5 -5
  523. package/fixtures/{belege/null-schluss.json → receipts/zero-final.json} +5 -5
  524. package/fixtures/{belege/null-pruef.json → receipts/zero-manual.json} +5 -5
  525. package/fixtures/{belege/null-monat.json → receipts/zero-monthly.json} +5 -5
  526. package/fixtures/{belege/null-ausfall.json → receipts/zero-outage-end.json} +5 -5
  527. package/fixtures/{belege/null-start.json → receipts/zero-start.json} +5 -5
  528. package/fixtures/renames-1.0.json +1490 -0
  529. package/fixtures/{kasse-settings-standard.json → stored/pos-settings-defaults.json} +7 -7
  530. package/fixtures/surface.json +877 -0
  531. package/fixtures/v3/README.md +125 -0
  532. package/fixtures/v3/antworten/belege.json +4738 -0
  533. package/fixtures/v3/antworten/belegmail.json +154 -0
  534. package/fixtures/v3/antworten/kasse-belege.json +4304 -0
  535. package/fixtures/v3/antworten/kasse.json +12716 -0
  536. package/fixtures/v3/antworten/rechnungen.json +1712 -0
  537. package/fixtures/v3/antworten/storno.json +737 -0
  538. package/fixtures/v3/stored/belege.json +502 -0
  539. package/fixtures/v3/stored/kasse.json +3461 -0
  540. package/fixtures/v3/stored/rechnungen.json +750 -0
  541. package/fixtures/v3/v3-vokabular.json +3375 -0
  542. package/fixtures/v3/zahlbetrag-faelle.json +794 -0
  543. package/package.json +32 -18
  544. package/dist/cjs/kasse/artikel.d.ts +0 -83
  545. package/dist/cjs/kasse/artikel.js +0 -79
  546. package/dist/cjs/kasse/client.d.ts +0 -10
  547. package/dist/cjs/kasse/client.js +0 -38
  548. package/dist/cjs/kasse/drucker.d.ts +0 -59
  549. package/dist/cjs/kasse/drucker.js +0 -50
  550. package/dist/cjs/kasse/index.d.ts +0 -13
  551. package/dist/cjs/kasse/index.js +0 -83
  552. package/dist/cjs/kasse/settings.d.ts +0 -229
  553. package/dist/cjs/kasse/settings.js +0 -172
  554. package/dist/cjs/kasse/texte.d.ts +0 -868
  555. package/dist/cjs/kasse/texte.js +0 -474
  556. package/dist/cjs/rechnung/fehler.d.ts +0 -21
  557. package/dist/cjs/rechnung/fehler.js +0 -44
  558. package/dist/cjs/rechnung/index.d.ts +0 -21
  559. package/dist/cjs/rechnung/index.js +0 -82
  560. package/dist/cjs/rechnung/texte.d.ts +0 -222
  561. package/dist/cjs/rechnung/texte.js +0 -425
  562. package/dist/esm/kasse/artikel.d.ts +0 -83
  563. package/dist/esm/kasse/artikel.js +0 -70
  564. package/dist/esm/kasse/client.d.ts +0 -10
  565. package/dist/esm/kasse/client.js +0 -33
  566. package/dist/esm/kasse/drucker.d.ts +0 -59
  567. package/dist/esm/kasse/drucker.js +0 -45
  568. package/dist/esm/kasse/index.d.ts +0 -13
  569. package/dist/esm/kasse/index.js +0 -18
  570. package/dist/esm/kasse/settings.d.ts +0 -229
  571. package/dist/esm/kasse/settings.js +0 -168
  572. package/dist/esm/kasse/texte.d.ts +0 -868
  573. package/dist/esm/kasse/texte.js +0 -466
  574. package/dist/esm/rechnung/fehler.d.ts +0 -21
  575. package/dist/esm/rechnung/fehler.js +0 -39
  576. package/dist/esm/rechnung/index.d.ts +0 -21
  577. package/dist/esm/rechnung/index.js +0 -20
  578. package/dist/esm/rechnung/texte.d.ts +0 -222
  579. package/dist/esm/rechnung/texte.js +0 -421
  580. package/fixtures/erwartet/karte-eigener.blatt32.json +0 -158
  581. package/fixtures/erwartet/karte-gptom-ios.blatt32.json +0 -230
  582. package/fixtures/erwartet/karte-gptom.blatt32.json +0 -230
  583. package/fixtures/erwartet/karte-hobex-cloud.blatt32.json +0 -200
  584. package/fixtures/erwartet/karte-hobex-hps.blatt32.json +0 -224
  585. package/fixtures/erwartet/karte-mypos.blatt32.json +0 -254
  586. package/fixtures/erwartet/karte-stripe-eps.blatt32.json +0 -194
  587. package/fixtures/erwartet/karte-stripe.blatt32.json +0 -212
  588. package/fixtures/erwartet/karte-sumup.blatt32.json +0 -218
  589. package/fixtures/erwartet/langer-artikelname.blatt32.json +0 -176
  590. package/fixtures/erwartet/null-ausfall.blatt32.json +0 -206
  591. package/fixtures/erwartet/null-jahr.blatt32.json +0 -212
  592. package/fixtures/erwartet/null-monat.blatt32.json +0 -206
  593. package/fixtures/erwartet/null-pruef.blatt32.json +0 -206
  594. package/fixtures/erwartet/null-schluss.blatt32.json +0 -206
  595. package/fixtures/erwartet/null-start.blatt32.json +0 -206
  596. package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt32.json +0 -212
  597. package/fixtures/erwartet/rabatt-einfach.blatt32.json +0 -182
  598. package/fixtures/erwartet/rabatt-trinkgeld.blatt32.json +0 -212
  599. package/fixtures/erwartet/rabatt-wertgutschein.blatt32.json +0 -218
  600. package/fixtures/erwartet/rabattzeilen.blatt32.json +0 -200
  601. package/fixtures/erwartet/signaturausfall-verkauf.blatt32.json +0 -194
  602. package/fixtures/erwartet/split-bar-rueckgeld.blatt32.json +0 -194
  603. package/fixtures/erwartet/split-eine-karte-trinkgeld.blatt32.json +0 -242
  604. package/fixtures/erwartet/split-karte-karte-bar.blatt32.json +0 -356
  605. package/fixtures/erwartet/split-langer-betrag.blatt32.json +0 -266
  606. package/fixtures/erwartet/split-tischrunde-trinkgeld.blatt32.json +0 -470
  607. package/fixtures/erwartet/split-trinkgeld-karte.blatt32.json +0 -272
  608. package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.blatt32.json +0 -326
  609. package/fixtures/erwartet/storno-rabatt.blatt32.json +0 -248
  610. package/fixtures/erwartet/storno-split-teil.blatt32.json +0 -230
  611. package/fixtures/erwartet/storno-split-voll.blatt32.json +0 -320
  612. package/fixtures/erwartet/storno-teil.blatt32.json +0 -206
  613. package/fixtures/erwartet/storno-voll.blatt32.json +0 -218
  614. package/fixtures/erwartet/testkasse-verkauf.blatt32.json +0 -224
  615. package/fixtures/erwartet/testsignatur-verkauf.blatt32.json +0 -236
  616. package/fixtures/erwartet/training.blatt32.json +0 -236
  617. package/fixtures/erwartet/verkauf-bar.blatt32.json +0 -176
  618. package/fixtures/erwartet/verkauf-karte.blatt32.json +0 -176
  619. package/fixtures/erwartet/verkauf-kleinunternehmer.blatt32.json +0 -182
  620. package/fixtures/kasse-meldungen-faelle.json +0 -32
  621. package/fixtures/oberflaeche.json +0 -558
  622. package/fixtures/rechnung-api-beispiele/brands-ok.json +0 -8
  623. package/fixtures/rechnung-api-beispiele/customer-get-fehler-beide.json +0 -15
  624. package/fixtures/rechnung-api-beispiele/setup-status-ok.json +0 -8
  625. package/fixtures/rechnung-api-beispiele/zahlung-fehler-ohne-schluessel.json +0 -14
  626. package/fixtures/rechnung-api-beispiele/zahlung-fehler-vor-ort.json +0 -15
  627. package/fixtures/rechnung-api-beispiele/zahlung-nachtrag.json +0 -14
  628. package/fixtures/rechnung-texte.json +0 -464
  629. /package/dist/cjs/{rechnung → invoice}/typen.js +0 -0
  630. /package/dist/esm/{rechnung → invoice}/typen.js +0 -0
  631. /package/fixtures/{erwartet/storno-rabatt.grid32.txt → expected/cancellation-discount.grid32.txt} +0 -0
  632. /package/fixtures/{erwartet/storno-rabatt.grid48.txt → expected/cancellation-discount.grid48.txt} +0 -0
  633. /package/fixtures/{erwartet/storno-voll.grid32.txt → expected/cancellation-full.grid32.txt} +0 -0
  634. /package/fixtures/{erwartet/storno-voll.grid48.txt → expected/cancellation-full.grid48.txt} +0 -0
  635. /package/fixtures/{erwartet/storno-teil.grid32.txt → expected/cancellation-partial.grid32.txt} +0 -0
  636. /package/fixtures/{erwartet/storno-teil.grid48.txt → expected/cancellation-partial.grid48.txt} +0 -0
  637. /package/fixtures/{erwartet/storno-split-voll.grid32.txt → expected/cancellation-split-full.grid32.txt} +0 -0
  638. /package/fixtures/{erwartet/storno-split-voll.grid48.txt → expected/cancellation-split-full.grid48.txt} +0 -0
  639. /package/fixtures/{erwartet/storno-split-teil.grid32.txt → expected/cancellation-split-partial.grid32.txt} +0 -0
  640. /package/fixtures/{erwartet/storno-split-teil.grid48.txt → expected/cancellation-split-partial.grid48.txt} +0 -0
  641. /package/fixtures/{erwartet/karte-eigener.grid32.txt → expected/card-custom.grid32.txt} +0 -0
  642. /package/fixtures/{erwartet/karte-eigener.grid48.txt → expected/card-custom.grid48.txt} +0 -0
  643. /package/fixtures/{erwartet/karte-gptom-ios.grid32.txt → expected/card-gptom-ios.grid32.txt} +0 -0
  644. /package/fixtures/{erwartet/karte-gptom-ios.grid48.txt → expected/card-gptom-ios.grid48.txt} +0 -0
  645. /package/fixtures/{erwartet/karte-gptom.grid32.txt → expected/card-gptom.grid32.txt} +0 -0
  646. /package/fixtures/{erwartet/karte-gptom.grid48.txt → expected/card-gptom.grid48.txt} +0 -0
  647. /package/fixtures/{erwartet/karte-hobex-cloud.grid32.txt → expected/card-hobex-cloud.grid32.txt} +0 -0
  648. /package/fixtures/{erwartet/karte-hobex-cloud.grid48.txt → expected/card-hobex-cloud.grid48.txt} +0 -0
  649. /package/fixtures/{erwartet/karte-hobex-hps.grid32.txt → expected/card-hobex-hps.grid32.txt} +0 -0
  650. /package/fixtures/{erwartet/karte-hobex-hps.grid48.txt → expected/card-hobex-hps.grid48.txt} +0 -0
  651. /package/fixtures/{erwartet/karte-mypos.grid32.txt → expected/card-mypos.grid32.txt} +0 -0
  652. /package/fixtures/{erwartet/karte-mypos.grid48.txt → expected/card-mypos.grid48.txt} +0 -0
  653. /package/fixtures/{erwartet/karte-stripe-eps.grid32.txt → expected/card-stripe-eps.grid32.txt} +0 -0
  654. /package/fixtures/{erwartet/karte-stripe-eps.grid48.txt → expected/card-stripe-eps.grid48.txt} +0 -0
  655. /package/fixtures/{erwartet/karte-stripe.grid32.txt → expected/card-stripe.grid32.txt} +0 -0
  656. /package/fixtures/{erwartet/karte-stripe.grid48.txt → expected/card-stripe.grid48.txt} +0 -0
  657. /package/fixtures/{erwartet/karte-sumup.grid32.txt → expected/card-sumup.grid32.txt} +0 -0
  658. /package/fixtures/{erwartet/karte-sumup.grid48.txt → expected/card-sumup.grid48.txt} +0 -0
  659. /package/fixtures/{erwartet/rabattzeilen.grid32.txt → expected/discount-lines.grid32.txt} +0 -0
  660. /package/fixtures/{erwartet/rabattzeilen.grid48.txt → expected/discount-lines.grid48.txt} +0 -0
  661. /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid32.txt → expected/discount-owner-tip.grid32.txt} +0 -0
  662. /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid48.txt → expected/discount-owner-tip.grid48.txt} +0 -0
  663. /package/fixtures/{erwartet/rabatt-einfach.grid32.txt → expected/discount-simple.grid32.txt} +0 -0
  664. /package/fixtures/{erwartet/rabatt-einfach.grid48.txt → expected/discount-simple.grid48.txt} +0 -0
  665. /package/fixtures/{erwartet/rabatt-trinkgeld.grid32.txt → expected/discount-tip.grid32.txt} +0 -0
  666. /package/fixtures/{erwartet/rabatt-trinkgeld.grid48.txt → expected/discount-tip.grid48.txt} +0 -0
  667. /package/fixtures/{erwartet/rabatt-wertgutschein.grid32.txt → expected/discount-value-voucher.grid32.txt} +0 -0
  668. /package/fixtures/{erwartet/rabatt-wertgutschein.grid48.txt → expected/discount-value-voucher.grid48.txt} +0 -0
  669. /package/fixtures/{erwartet/logo-probe-hoch.raster32.txt → expected/logo-sample-tall.raster32.txt} +0 -0
  670. /package/fixtures/{erwartet/logo-probe.raster32.txt → expected/logo-sample.raster32.txt} +0 -0
  671. /package/fixtures/{erwartet/langer-artikelname.grid32.txt → expected/long-item-name.grid32.txt} +0 -0
  672. /package/fixtures/{erwartet/langer-artikelname.grid48.txt → expected/long-item-name.grid48.txt} +0 -0
  673. /package/fixtures/{erwartet/verkauf-karte.grid32.txt → expected/sale-card.grid32.txt} +0 -0
  674. /package/fixtures/{erwartet/verkauf-karte.grid48.txt → expected/sale-card.grid48.txt} +0 -0
  675. /package/fixtures/{erwartet/verkauf-bar.grid32.txt → expected/sale-cash.grid32.txt} +0 -0
  676. /package/fixtures/{erwartet/verkauf-bar.grid48.txt → expected/sale-cash.grid48.txt} +0 -0
  677. /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid32.txt → expected/sale-small-business.grid32.txt} +0 -0
  678. /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid48.txt → expected/sale-small-business.grid48.txt} +0 -0
  679. /package/fixtures/{erwartet/signaturausfall-verkauf.grid32.txt → expected/signature-outage-sale.grid32.txt} +0 -0
  680. /package/fixtures/{erwartet/signaturausfall-verkauf.grid48.txt → expected/signature-outage-sale.grid48.txt} +0 -0
  681. /package/fixtures/{erwartet/split-karte-karte-bar.grid32.txt → expected/split-card-card-cash.grid32.txt} +0 -0
  682. /package/fixtures/{erwartet/split-karte-karte-bar.grid48.txt → expected/split-card-card-cash.grid48.txt} +0 -0
  683. /package/fixtures/{erwartet/split-bar-rueckgeld.grid32.txt → expected/split-cash-change.grid32.txt} +0 -0
  684. /package/fixtures/{erwartet/split-bar-rueckgeld.grid48.txt → expected/split-cash-change.grid48.txt} +0 -0
  685. /package/fixtures/{erwartet/split-langer-betrag.grid32.txt → expected/split-long-amount.grid32.txt} +0 -0
  686. /package/fixtures/{erwartet/split-langer-betrag.grid48.txt → expected/split-long-amount.grid48.txt} +0 -0
  687. /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid32.txt → expected/split-one-card-tip.grid32.txt} +0 -0
  688. /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid48.txt → expected/split-one-card-tip.grid48.txt} +0 -0
  689. /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid32.txt → expected/split-table-round-tip.grid32.txt} +0 -0
  690. /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid48.txt → expected/split-table-round-tip.grid48.txt} +0 -0
  691. /package/fixtures/{erwartet/split-trinkgeld-karte.grid32.txt → expected/split-tip-card.grid32.txt} +0 -0
  692. /package/fixtures/{erwartet/split-trinkgeld-karte.grid48.txt → expected/split-tip-card.grid48.txt} +0 -0
  693. /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid32.txt → expected/split-two-cards-same-provider.grid32.txt} +0 -0
  694. /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid48.txt → expected/split-two-cards-same-provider.grid48.txt} +0 -0
  695. /package/fixtures/{erwartet/testkasse-verkauf.grid32.txt → expected/test-cashregister-sale.grid32.txt} +0 -0
  696. /package/fixtures/{erwartet/testkasse-verkauf.grid48.txt → expected/test-cashregister-sale.grid48.txt} +0 -0
  697. /package/fixtures/{erwartet/testsignatur-verkauf.grid32.txt → expected/test-signature-sale.grid32.txt} +0 -0
  698. /package/fixtures/{erwartet/testsignatur-verkauf.grid48.txt → expected/test-signature-sale.grid48.txt} +0 -0
  699. /package/fixtures/{erwartet → expected}/training.grid32.txt +0 -0
  700. /package/fixtures/{erwartet → expected}/training.grid48.txt +0 -0
  701. /package/fixtures/{erwartet/null-jahr.grid32.txt → expected/zero-annual.grid32.txt} +0 -0
  702. /package/fixtures/{erwartet/null-jahr.grid48.txt → expected/zero-annual.grid48.txt} +0 -0
  703. /package/fixtures/{erwartet/null-schluss.grid32.txt → expected/zero-final.grid32.txt} +0 -0
  704. /package/fixtures/{erwartet/null-schluss.grid48.txt → expected/zero-final.grid48.txt} +0 -0
  705. /package/fixtures/{erwartet/null-pruef.grid32.txt → expected/zero-manual.grid32.txt} +0 -0
  706. /package/fixtures/{erwartet/null-pruef.grid48.txt → expected/zero-manual.grid48.txt} +0 -0
  707. /package/fixtures/{erwartet/null-monat.grid32.txt → expected/zero-monthly.grid32.txt} +0 -0
  708. /package/fixtures/{erwartet/null-monat.grid48.txt → expected/zero-monthly.grid48.txt} +0 -0
  709. /package/fixtures/{erwartet/null-ausfall.grid32.txt → expected/zero-outage-end.grid32.txt} +0 -0
  710. /package/fixtures/{erwartet/null-ausfall.grid48.txt → expected/zero-outage-end.grid48.txt} +0 -0
  711. /package/fixtures/{erwartet/null-start.grid32.txt → expected/zero-start.grid32.txt} +0 -0
  712. /package/fixtures/{erwartet/null-start.grid48.txt → expected/zero-start.grid48.txt} +0 -0
@@ -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 { KasseneckValidationError, isKasseneckApiError, signiertGelesen } 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.');
60
- }
61
- if (typ.value !== ReceiptType.standard.value && typ.value !== ReceiptType.training.value) {
62
- throw eingabefehler(`payments sind bei receiptType "${typ.value}" nicht erlaubt.`);
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).');
63
99
  }
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) {
@@ -638,8 +677,11 @@ function antwortfehler(functionName, grund) {
638
677
  * models/receipt.ts), und die bestehenden Aufrufe sollen ihre Zusage behalten.
639
678
  * Wer beides braucht, nimmt [belegMitFirmaAusHuelle] ueber die
640
679
  * `…WithCompany`-Varianten.
680
+ *
681
+ * Paketintern exportiert, damit `./stored` gespeicherte Belege mit demselben
682
+ * Leser liest; nicht Teil der Paketoberflaeche.
641
683
  */
642
- function belegAusHuelle(daten, functionName) {
684
+ export function belegAusHuelle(daten, functionName) {
643
685
  const huelle = daten;
644
686
  if (huelle == null || typeof huelle !== 'object' || huelle.receipt == null) {
645
687
  throw antwortfehler(functionName, 'Antwort enthaelt keinen Beleg (data.receipt fehlt)');
@@ -667,21 +709,34 @@ function belegAusHuelle(daten, functionName) {
667
709
  * fehlt er, ist die Antwort unbrauchbar. Die Firmendaten duerfen dagegen
668
710
  * luecken haben — ein Kundendokument ohne gepflegte Fusszeile ist kein Grund,
669
711
  * einen ausgestellten Beleg nicht anzuzeigen (siehe models/receipt-company.ts).
712
+ * Paketintern exportiert wie [belegAusHuelle].
670
713
  */
671
- function belegMitFirmaAusHuelle(daten, functionName) {
714
+ export function belegMitFirmaAusHuelle(daten, functionName) {
672
715
  const receipt = belegAusHuelle(daten, functionName);
673
716
  const d = (daten ?? {});
674
717
  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);
718
+ const angaben = d.registrationInfo && typeof d.registrationInfo === 'object' ? readRegistrationInfo(d.registrationInfo) : null;
677
719
  return {
678
720
  receipt,
679
721
  company: fromReceiptCompanyPayload(daten),
680
- testKasse: d.testKasse === true,
681
- testSignatur: d.testSignatur === true,
682
- kopfId: typeof d.kopfId === 'string' ? d.kopfId : null,
722
+ testCashregister: d.testCashregister === true,
723
+ testSignature: d.testSignature === true,
724
+ headerVersionId: typeof d.headerVersionId === 'string' && d.headerVersionId !== '' ? d.headerVersionId : null,
683
725
  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',
726
+ registrationInfo: angaben,
727
+ logoScale: d.logo_scale === 'S' || d.logo_scale === 'M' || d.logo_scale === 'L' || d.logo_scale === 'XL' ? d.logo_scale : 'M',
686
728
  };
687
729
  }
730
+ /**
731
+ * Zahlbetrag des Servers aus einem `payments_sum_mismatch`
732
+ * (`details.expectedCents`), sonst `undefined`. Das Paket wiederholt nie
733
+ * selbst mit diesem Betrag: eine Kartenzahlung ist schon belastet. Die Kasse
734
+ * entscheidet (Differenz nachkassieren oder erstatten) und schickt dann einen
735
+ * neuen Verkauf.
736
+ */
737
+ export function paymentsExpectedCents(error) {
738
+ if (!isKasseneckApiError(error) || error.code !== 'payments_sum_mismatch')
739
+ return undefined;
740
+ const wert = error.details['expectedCents'];
741
+ return Number.isSafeInteger(wert) ? wert : undefined;
742
+ }
@@ -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>;