@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,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.receiptLayoutFromResult = receiptLayoutFromResult;
3
4
  exports.createReceipt = createReceipt;
4
5
  exports.sellReceipt = sellReceipt;
5
6
  exports.sellReceiptWithCompany = sellReceiptWithCompany;
6
7
  exports.cancelReceipt = cancelReceipt;
7
- exports.createCancelReceipt = createCancelReceipt;
8
8
  exports.zeroReceipt = zeroReceipt;
9
9
  exports.listMyReceipts = listMyReceipts;
10
10
  exports.getReceipt = getReceipt;
@@ -13,22 +13,57 @@ exports.generateFullReceiptId = generateFullReceiptId;
13
13
  exports.getFirstReceiptDate = getFirstReceiptDate;
14
14
  exports.sendReceiptEmail = sendReceiptEmail;
15
15
  exports.checkVoucherCombinationError = checkVoucherCombinationError;
16
+ exports.cardRefundReference = cardRefundReference;
17
+ exports.belegAusHuelle = belegAusHuelle;
18
+ exports.belegMitFirmaAusHuelle = belegMitFirmaAusHuelle;
19
+ exports.paymentsExpectedCents = paymentsExpectedCents;
16
20
  const index_js_1 = require("../enums/index.js");
17
21
  const index_js_2 = require("../models/index.js");
18
22
  const vienna_time_js_1 = require("../vienna-time.js");
19
23
  const money_js_1 = require("../money.js");
20
24
  const errors_js_1 = require("./errors.js");
25
+ const layout_js_1 = require("../receipt/layout.js");
26
+ /**
27
+ * Das Zeilenmodell zum Drucken und Anzeigen eines Belegs aus einer Antwort.
28
+ *
29
+ * **Ein Server-Layout gewinnt immer.** Liefert der Server `data.layout`, gilt
30
+ * genau dieses, in seiner Breite (80 mm): im oeffentlichen Kanal traegt nur
31
+ * es den Kartenblock (der Beleg selbst kommt dort ohne Anbieterdaten), und
32
+ * Bildschirm, Bon und PDF zeigen so denselben Beleg. Fehlt es, wird das
33
+ * Layout hier gebaut, mit den Angaben derselben Antwort (`testCashregister`,
34
+ * `testSignature`, `registrationInfo`) und in `fallbackPaperSize` (Vorgabe
35
+ * `mm58` wie in 0.x). Die Druckbreite waehlt allein der Druckweg
36
+ * (`paperSize` bei `escPosLayoutBytes`, `charsPerLine` bei ePOS und Blatt), nie
37
+ * dieser Helfer.
38
+ */
39
+ function receiptLayoutFromResult(result, options = {}) {
40
+ for (const name of Object.keys(options)) {
41
+ if (name !== 'fallbackPaperSize') {
42
+ throw new errors_js_1.KasseneckValidationError('receiptLayoutFromResult', `Unbekannte Option "${name}" (die Druckbreite waehlt der Druckweg)`, 'request');
43
+ }
44
+ }
45
+ if (result.layout != null)
46
+ return result.layout;
47
+ return (0, layout_js_1.buildReceiptLayout)(result.receipt, result.company, {
48
+ paperSize: options.fallbackPaperSize ?? 'mm58',
49
+ testCashregister: result.testCashregister,
50
+ testSignature: result.testSignature,
51
+ registrationInfo: result.registrationInfo,
52
+ });
53
+ }
21
54
  /**
22
55
  * Gemeinsame Umsetzung aller Belegarten (Zwilling von `_createReceipt`).
23
56
  * Bewusst **nicht** Teil der Paketoberflaeche: der Belegtyp gehoert nicht in
24
57
  * die Hand des Aufrufers, sondern zu einem der benannten Aufrufe darunter.
25
58
  */
26
59
  async function createReceipt(rufen, options) {
27
- return belegAusHuelle(await rufen('createReceipt', createReceiptParams(options)), 'createReceipt');
60
+ const daten = await rufen('createReceipt', createReceiptParams(options));
61
+ return signiertGelesen('createReceipt', () => belegAusHuelle(daten, 'createReceipt'));
28
62
  }
29
63
  /** Wie [createReceipt], liest aus derselben Antwort zusaetzlich die Firmendaten. */
30
64
  async function createReceiptWithCompany(rufen, options) {
31
- return belegMitFirmaAusHuelle(await rufen('createReceipt', createReceiptParams(options)), 'createReceipt');
65
+ const daten = await rufen('createReceipt', createReceiptParams(options));
66
+ return signiertGelesen('createReceipt', () => belegMitFirmaAusHuelle(daten, 'createReceipt'));
32
67
  }
33
68
  /**
34
69
  * Baut die Nutzlast von `createReceipt` und prueft die Eingabe. Wirft, bevor
@@ -37,8 +72,17 @@ async function createReceiptWithCompany(rufen, options) {
37
72
  function createReceiptParams(options) {
38
73
  const typ = belegtyp(options.receiptType);
39
74
  const { items, vouchers } = options;
75
+ // Unter /v3 weist der Server diese Felder ab (payment_method_not_supported);
76
+ // ein Aufrufer ohne Typen erfaehrt es hier, bevor etwas hinausgeht.
77
+ const altfeld = ALTE_ZAHLFELDER.find((feld) => options[feld] != null);
78
+ if (altfeld != null) {
79
+ throw eingabefehler(`${altfeld} gibt es unter /v3 nicht mehr: Zahlungen und Kartenangaben gehen als payments hinaus.`);
80
+ }
81
+ if (typ.value === index_js_1.ReceiptType.cancellation.value) {
82
+ throw eingabefehler('Ein Storno geht nur ueber cancelReceipt (Bezug, Grund, Restmengen).');
83
+ }
40
84
  if (typ.needsItems) {
41
- // Ein reiner Gutscheinverkauf ist ein Umsatz ohne Positionen — deshalb
85
+ // Ein reiner Gutscheinverkauf ist ein Umsatz ohne Positionen, deshalb
42
86
  // zaehlt er hier wie eine Position (wie im Flutter-Vorbild).
43
87
  const hatVerkaufsgutschein = vouchers?.some((v) => v.action === index_js_1.VoucherAction.sell) ?? false;
44
88
  if ((items == null || items.length === 0) && !hatVerkaufsgutschein) {
@@ -65,47 +109,20 @@ function createReceiptParams(options) {
65
109
  if (items != null && items.length > 0) {
66
110
  params['items'] = alsNutzlast(items, index_js_2.toReceiptItemPayload);
67
111
  }
68
- // `payments: null` gilt wie im Backend (zahlungs-eingang.js) als nicht angegeben.
69
- if (options.payments != null) {
70
- // Der alte Storno-Weg und der Null-/Startbeleg nehmen keine Zahlungsliste
71
- // (Backend: PAYMENTS_NOT_ALLOWED); ein Storno mit mehreren Zahlungen
72
- // laeuft ueber cancelReceipt.
73
- if (typ.value === index_js_1.ReceiptType.cancellation.value) {
74
- throw eingabefehler('payments am Storno gehen nur ueber cancelReceipt.');
112
+ const umsatz = typ.value === index_js_1.ReceiptType.standard.value || typ.value === index_js_1.ReceiptType.training.value;
113
+ if (umsatz) {
114
+ // Pflicht unter /v3 (payments_required); eine leere Liste ist erlaubt,
115
+ // wenn nichts zu zahlen ist (Rabatt deckt alles).
116
+ if (options.payments == null) {
117
+ throw eingabefehler('payments fehlt: unter /v3 ist die Zahlungsliste Pflicht (Summe = receiptDueCents).');
75
118
  }
76
- if (typ.value !== index_js_1.ReceiptType.standard.value && typ.value !== index_js_1.ReceiptType.training.value) {
77
- throw eingabefehler(`payments sind bei receiptType "${typ.value}" nicht erlaubt.`);
78
- }
79
- const konflikt = zahlungsKonflikt(options);
80
- if (konflikt != null)
81
- throw eingabefehler(konflikt);
82
119
  params['payments'] = gepruefteZahlungen(options.payments, false, 'createReceipt');
83
120
  }
84
- // Vom Aufrufer kommt sie geprueft, vom Server roh — siehe die beiden Felder
85
- // in [CreateReceiptOptions]. Die Typpruefung allein reicht dafuer nicht: ein
86
- // Verbraucher ohne Typen faellt durch dieses Netz, und ein Tippfehler in der
87
- // Zahlungsart faellt sonst erst am Server auf.
88
- const zahlungsart = options.paymentMethod != null ? gepruefteZahlungsart(options.paymentMethod) : options.paymentMethodFromServer;
89
- if (zahlungsart != null) {
90
- params['paymentMethod'] = zahlungsart;
91
- const anbieter = options.creditCardProvider ?? index_js_1.CreditCardProvider.custom;
92
- if (zahlungsart === index_js_1.KeckPaymentMethod.creditCard.value) {
93
- if (options.cardPaymentId != null) {
94
- params['cardPaymentId'] = options.cardPaymentId;
95
- // Der Kartenanbieter kommt dagegen vom Aufrufer, nicht vom Server —
96
- // hier bleibt der Schreibpfad streng.
97
- params['creditCardProvider'] = kartenanbieter(anbieter);
98
- // Bewusst auch als `null`, wenn der Anbieter keine Rohdaten liefert:
99
- // das Feld gehoert zur Kartenzahlung und das Backend nimmt null an.
100
- params['cardPaymentData'] = options.cardPaymentData ?? null;
101
- }
102
- else if (anbieter !== index_js_1.CreditCardProvider.custom) {
103
- throw eingabefehler(`cardPaymentId ist Pflicht bei creditCardProvider "${anbieter}".`);
104
- }
105
- }
121
+ else if (options.payments != null) {
122
+ throw eingabefehler(`payments sind bei receiptType "${typ.value}" nicht erlaubt.`);
106
123
  }
107
124
  if (options.tip != null) {
108
- if (typ.value !== index_js_1.ReceiptType.standard.value && typ.value !== index_js_1.ReceiptType.training.value) {
125
+ if (!umsatz) {
109
126
  throw eingabefehler(`Trinkgeld ist nur bei receiptType standard oder training moeglich, nicht bei "${typ.value}".`);
110
127
  }
111
128
  params['tip'] = gepruefterTip(options.tip);
@@ -121,16 +138,18 @@ function createReceiptParams(options) {
121
138
  }
122
139
  return params;
123
140
  }
141
+ /** Felder des alten Einzel-Zahlungswegs; unter /v3 abgewiesen. */
142
+ const ALTE_ZAHLFELDER = ['paymentMethod', 'paymentMethodFromServer', 'creditCardProvider', 'cardPaymentId', 'cardPaymentData'];
124
143
  /** Normalbeleg (Verkauf) nach RKSV. */
125
- function sellReceipt(rufen, options) {
126
- return createReceipt(rufen, { ...options, receiptType: index_js_1.ReceiptType.standard });
144
+ function sellReceipt(transport, options) {
145
+ return createReceipt(transport, { ...options, receiptType: index_js_1.ReceiptType.standard });
127
146
  }
128
147
  /**
129
148
  * Normalbeleg wie [sellReceipt], liefert zusaetzlich die Firmen-/Druckdaten
130
149
  * aus derselben Antwort — alles, was ein Belegdruck braucht, in einem Aufruf.
131
150
  */
132
- function sellReceiptWithCompany(rufen, options) {
133
- return createReceiptWithCompany(rufen, { ...options, receiptType: index_js_1.ReceiptType.standard });
151
+ function sellReceiptWithCompany(transport, options) {
152
+ return createReceiptWithCompany(transport, { ...options, receiptType: index_js_1.ReceiptType.standard });
134
153
  }
135
154
  const NOTE_MAX = 200;
136
155
  /**
@@ -139,7 +158,7 @@ const NOTE_MAX = 200;
139
158
  * Reichweite des Rechts (eigene/alle) und antwortet mit dem fertigen,
140
159
  * signierten Storno-Beleg. Gutscheine des Originals wandern nicht mit.
141
160
  */
142
- async function cancelReceipt(rufen, options) {
161
+ async function cancelReceipt(transport, options) {
143
162
  const cashregisterId = options.receipt?.cashregisterId ?? options.cashregisterId;
144
163
  const originalReceiptId = options.receipt?.receiptId ?? options.originalReceiptId;
145
164
  if (typeof cashregisterId !== 'string' || cashregisterId.trim() === '') {
@@ -164,8 +183,14 @@ async function cancelReceipt(rufen, options) {
164
183
  if (options.note !== undefined && options.note.length > NOTE_MAX) {
165
184
  throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Anmerkung ist zu lang (hoechstens ${NOTE_MAX} Zeichen)`, 'request');
166
185
  }
186
+ const altfeld = ALTE_ZAHLFELDER.find((feld) => options[feld] != null);
187
+ if (altfeld != null) {
188
+ throw new errors_js_1.KasseneckValidationError('cancelReceipt', `${altfeld} gibt es unter /v3 nicht mehr: Rueckzahlungen gehen als payments hinaus.`, 'request');
189
+ }
167
190
  // `payments: null` gilt wie im Backend als nicht angegeben.
168
- const zahlungen = options.payments != null ? gepruefteStornoZahlungen(options) : undefined;
191
+ const zahlungen = options.payments != null ? gepruefteZahlungen(options.payments, true, 'cancelReceipt') : undefined;
192
+ if (zahlungen !== undefined)
193
+ pruefeKartenRueckbuchung(zahlungen, options.receipt);
169
194
  const params = { cashregisterId, originalReceiptId, reason: options.reason };
170
195
  if (options.items !== undefined)
171
196
  params.items = options.items.map((p) => ({ index: p.index, quantity: p.quantity }));
@@ -173,27 +198,11 @@ async function cancelReceipt(rufen, options) {
173
198
  params.note = options.note;
174
199
  if (zahlungen !== undefined)
175
200
  params.payments = zahlungen;
176
- if (options.paymentMethod != null)
177
- params.paymentMethod = gepruefteZahlungsart(options.paymentMethod);
178
- const karte = options.creditCardProvider != null || options.cardPaymentId != null || options.cardPaymentData != null;
179
- if (karte) {
180
- // Ohne paymentMethod entscheidet das Backend an der Zahlungsart des
181
- // Originals; ein ausdruecklich anderer Rueckzahlweg ist hier schon falsch.
182
- if (params.paymentMethod != null && params.paymentMethod !== index_js_1.KeckPaymentMethod.creditCard.value) {
183
- throw new errors_js_1.KasseneckValidationError('cancelReceipt', 'Kartendaten gibt es nur bei paymentMethod creditCard', 'request');
184
- }
185
- if (options.creditCardProvider != null) {
186
- if (!Object.prototype.hasOwnProperty.call(index_js_1.CreditCardProvider, options.creditCardProvider)) {
187
- throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Kartenanbieter: unbekannter Schluessel "${options.creditCardProvider}"`, 'request');
188
- }
189
- params.creditCardProvider = options.creditCardProvider;
190
- }
191
- if (options.cardPaymentId != null && options.cardPaymentId !== '')
192
- params.cardPaymentId = options.cardPaymentId;
193
- if (options.cardPaymentData != null)
194
- params.cardPaymentData = options.cardPaymentData;
195
- }
196
- const daten = await rufen('cancelReceipt', params);
201
+ const daten = await transport('cancelReceipt', params);
202
+ return signiertGelesen('cancelReceipt', () => stornoAusHuelle(daten));
203
+ }
204
+ /** Liest die Storno-Antwort `{ receipt, cancellationOf, remaining }`. */
205
+ function stornoAusHuelle(daten) {
197
206
  const receipt = belegAusHuelle(daten, 'cancelReceipt');
198
207
  const huelle = daten;
199
208
  const bezug = huelle.cancellationOf;
@@ -205,27 +214,17 @@ async function cancelReceipt(rufen, options) {
205
214
  }
206
215
  return {
207
216
  receipt,
208
- cancellationOf: { receiptId: bezug.receiptId, fullReceiptId: typeof bezug.fullReceiptId === 'string' ? bezug.fullReceiptId : null },
217
+ cancellationOf: {
218
+ receiptId: bezug.receiptId,
219
+ fullReceiptId: typeof bezug.fullReceiptId === 'string' ? bezug.fullReceiptId : null,
220
+ ...(typeof bezug.timeStamp === 'string' && bezug.timeStamp !== '' ? { timeStamp: bezug.timeStamp } : {}),
221
+ },
209
222
  remaining: huelle.remaining,
210
223
  };
211
224
  }
212
- /**
213
- * Stornobeleg aus frei uebergebenen Positionen — fuer den Fall, dass der
214
- * Originalbeleg nicht als Objekt vorliegt. Die Positionen gehen **unveraendert**
215
- * hinaus; das Vorzeichen setzt der Aufrufer.
216
- *
217
- * @deprecated Alter Storno-Weg ohne Bezug: kein Verweis auf das Original,
218
- * keine Restmengen, kein Schutz vor doppeltem Storno, Gutscheine werden nicht
219
- * zurueckgenommen. Das Backend nimmt ihn weiter an und legt `deprecation` in
220
- * die Antwort. Stattdessen [cancelReceipt] (Endpunkt `cancelReceipt`): Bezug,
221
- * Grund, Teilstorno, Fehlercodes.
222
- */
223
- function createCancelReceipt(rufen, options) {
224
- return createReceipt(rufen, { ...options, receiptType: index_js_1.ReceiptType.cancellation });
225
- }
226
225
  /** Nullbeleg (RKSV-Pruefbeleg) — ohne Positionen und ohne Zahlungsart. */
227
- function zeroReceipt(rufen) {
228
- return createReceipt(rufen, { receiptType: index_js_1.ReceiptType.zero });
226
+ function zeroReceipt(transport) {
227
+ return createReceipt(transport, { receiptType: index_js_1.ReceiptType.zero });
229
228
  }
230
229
  /**
231
230
  * Belege einer Kasse auflisten — die Grundlage jeder Belegliste in der
@@ -242,7 +241,7 @@ function zeroReceipt(rufen) {
242
241
  * (der Endpunkt laeuft mit `checkCashRegister: false`), ein Kassen-Benutzer
243
242
  * bekommt also nur die ihm zugewiesenen Kassen.
244
243
  */
245
- async function listMyReceipts(rufen, options) {
244
+ async function listMyReceipts(transport, options) {
246
245
  if (typeof options.cashregisterId !== 'string' || options.cashregisterId.trim() === '') {
247
246
  throw new errors_js_1.KasseneckValidationError('listMyReceipts', 'cashregisterId fehlt', 'request');
248
247
  }
@@ -255,8 +254,8 @@ async function listMyReceipts(rufen, options) {
255
254
  throw new errors_js_1.KasseneckValidationError('listMyReceipts', `${feld} muss mit YYYY-MM-DD beginnen, war "${wert}"`, 'request');
256
255
  }
257
256
  }
258
- const daten = await rufen('listMyReceipts', {
259
- cashregisterid: options.cashregisterId,
257
+ const daten = await transport('listMyReceipts', {
258
+ cashregisterId: options.cashregisterId,
260
259
  limit: options.limit,
261
260
  ...(options.from !== undefined ? { from: options.from } : {}),
262
261
  ...(options.to !== undefined ? { to: options.to } : {}),
@@ -280,7 +279,7 @@ function kennzahlen(roh) {
280
279
  const tage = Array.isArray(quelle.days) ? quelle.days : [];
281
280
  return {
282
281
  today: {
283
- revenueCents: (0, money_js_1.euroToCents)(quelle.today?.umsatz),
282
+ revenueCents: (0, money_js_1.euroToCents)(quelle.today?.revenue),
284
283
  count: typeof quelle.today?.count === 'number' ? quelle.today.count : 0,
285
284
  },
286
285
  trendPercent: typeof quelle.trendPct === 'number' ? quelle.trendPct : null,
@@ -288,14 +287,14 @@ function kennzahlen(roh) {
288
287
  const eintrag = (typeof tag === 'object' && tag !== null ? tag : {});
289
288
  return {
290
289
  date: typeof eintrag.date === 'string' ? eintrag.date : '',
291
- revenueCents: (0, money_js_1.euroToCents)(eintrag.umsatz),
290
+ revenueCents: (0, money_js_1.euroToCents)(eintrag.revenue),
292
291
  };
293
292
  }),
294
293
  };
295
294
  }
296
295
  /** Einzelnen Beleg der angemeldeten Kasse holen. */
297
- async function getReceipt(rufen, receiptId) {
298
- return belegAusHuelle(await rufen('getReceipt', { receiptId }), 'getReceipt');
296
+ async function getReceipt(transport, receiptId) {
297
+ return belegAusHuelle(await transport('getReceipt', { receiptId }), 'getReceipt');
299
298
  }
300
299
  /**
301
300
  * Wie [getReceipt], liefert zusaetzlich die Firmen-/Druckdaten aus derselben
@@ -303,15 +302,15 @@ async function getReceipt(rufen, receiptId) {
303
302
  * Kleinunternehmer-Kennzeichen) — die Angaben, die ein Beleg im Kopf und Fuss
304
303
  * traegt (siehe models/receipt-company.ts).
305
304
  */
306
- async function getReceiptWithCompany(rufen, receiptId) {
307
- return belegMitFirmaAusHuelle(await rufen('getReceipt', { receiptId }), 'getReceipt');
305
+ async function getReceiptWithCompany(transport, receiptId) {
306
+ return belegMitFirmaAusHuelle(await transport('getReceipt', { receiptId }), 'getReceipt');
308
307
  }
309
308
  /**
310
309
  * Verschluesselte Volltext-Belegnummer erzeugen — der Bezeichner, unter dem der
311
310
  * Beleg oeffentlich abrufbar ist (Beleg-Download, Pruefportal).
312
311
  */
313
- async function generateFullReceiptId(rufen, receiptId) {
314
- const daten = await rufen('generateFullReceiptId', { receiptId });
312
+ async function generateFullReceiptId(transport, receiptId) {
313
+ const daten = await transport('generateFullReceiptId', { receiptId });
315
314
  const id = daten?.fullReceiptId;
316
315
  if (typeof id !== 'string') {
317
316
  throw antwortfehler('generateFullReceiptId', 'Antwort enthaelt keine fullReceiptId');
@@ -326,8 +325,8 @@ async function generateFullReceiptId(rufen, receiptId) {
326
325
  * fuehrt kein `allowRegisterUser`, das Backend weist die Browser-Kasse hier ab
327
326
  * (siehe Modulkommentar oben). Mit `apiKeyAuth` ist er offen.
328
327
  */
329
- async function getFirstReceiptDate(rufen) {
330
- const roh = await rufen('getFirstReceiptDate');
328
+ async function getFirstReceiptDate(transport) {
329
+ const roh = await transport('getFirstReceiptDate');
331
330
  if (typeof roh !== 'string') {
332
331
  throw antwortfehler('getFirstReceiptDate', 'Antwort enthaelt keinen Zeitstempel');
333
332
  }
@@ -348,6 +347,8 @@ async function getFirstReceiptDate(rufen) {
348
347
  throw antwortfehler('getFirstReceiptDate', 'Antwort enthaelt keinen lesbaren Zeitstempel');
349
348
  }
350
349
  }
350
+ /** Felder von [SendReceiptEmailOptions]; jedes andere wirft vor dem Senden. */
351
+ const MAIL_FELDER = ['fullReceiptId', 'to', 'language'];
351
352
  /**
352
353
  * Schickt einen bereits ausgestellten Beleg als **Link auf die oeffentliche
353
354
  * Belegseite** an eine Adresse (Endpunkt `sendReceiptEmail`, Backend
@@ -358,17 +359,23 @@ async function getFirstReceiptDate(rufen) {
358
359
  * das Backend in einer Unter-Sammlung neben dem Beleg.
359
360
  *
360
361
  * **Am Code entscheiden, nie am Text:** fachliche Fehler kommen als
361
- * [KasseneckApiError] mit `code` aus [RECEIPT_EMAIL_ERROR_CODES] heraus —
362
- * `adresse_ungueltig`, `beleg_nicht_gefunden` (auch fuer einen Beleg einer
363
- * fremden Kasse: das Backend gibt darueber bewusst keine Auskunft), `zu_oft`
364
- * (5 Mails je Beleg in 24 Stunden, 30 je Kasse und Stunde) und
365
- * `versand_fehlgeschlagen`. Dieses Paket reicht sie unveraendert durch und
362
+ * [KasseneckApiError] mit `code` aus [RECEIPT_EMAIL_ERROR_CODES] heraus:
363
+ * `invalid_address`, `receipt_not_found` (auch fuer einen Beleg einer
364
+ * fremden Kasse: das Backend gibt darueber bewusst keine Auskunft),
365
+ * `too_many_requests` (5 Mails je Beleg in 24 Stunden, 30 je Kasse und
366
+ * Stunde) und `send_failed`. Dieses Paket reicht sie unveraendert durch und
366
367
  * legt keine eigenen Codes an.
367
368
  *
368
369
  * **Kein Wiederholen ohne Zutun des Bedieners:** ein zweiter Versuch schickt
369
370
  * eine zweite Mail und zaehlt auf die Schleuse.
370
371
  */
371
- async function sendReceiptEmail(rufen, options) {
372
+ async function sendReceiptEmail(transport, options) {
373
+ // Ein unbekanntes Feld (etwa das alte `sprache`) ginge sonst still verloren,
374
+ // und die Mail kaeme in der falschen Sprache.
375
+ const fremd = Object.keys(options ?? {}).find((k) => !MAIL_FELDER.includes(k));
376
+ if (fremd != null) {
377
+ throw new errors_js_1.KasseneckValidationError('sendReceiptEmail', `unbekanntes Feld "${fremd}"`, 'request');
378
+ }
372
379
  // Getrimmt, weil beides von Hand oder per Scanner ins Feld kommt und ein
373
380
  // angehaengtes Leerzeichen sonst als ungueltige Adresse zurueckkaeme --
374
381
  // nach einem Aufruf, der schon eine Zeile im Protokoll gekostet hat.
@@ -381,20 +388,21 @@ async function sendReceiptEmail(rufen, options) {
381
388
  throw new errors_js_1.KasseneckValidationError('sendReceiptEmail', 'to fehlt (Empfaengeradresse)', 'request');
382
389
  }
383
390
  // Die Adresse selbst wird hier NICHT geprueft: das Backend prueft sie mit
384
- // kreiseck_validator und antwortet mit `adresse_ungueltig`. Eine zweite,
391
+ // kreiseck_validator und antwortet mit `invalid_address`. Eine zweite,
385
392
  // eigene Regel im Paket koennte strenger sein als die des Backends und eine
386
393
  // gueltige Adresse abweisen, ohne dass jemand die Abweichung bemerkt.
387
394
  const params = { fullReceiptId, to };
388
- if (options.sprache !== undefined && options.sprache !== '')
389
- params.sprache = options.sprache;
390
- const daten = await rufen('sendReceiptEmail', params);
395
+ if (options.language !== undefined && options.language !== '')
396
+ params.language = options.language;
397
+ const daten = await transport('sendReceiptEmail', params);
391
398
  if (typeof daten?.to !== 'string' || daten.to === '') {
392
399
  throw antwortfehler('sendReceiptEmail', 'Antwort nennt keine Empfaengeradresse (data.to fehlt)');
393
400
  }
394
401
  if (typeof daten.at !== 'string' || daten.at === '') {
395
402
  throw antwortfehler('sendReceiptEmail', 'Antwort nennt keinen Zeitpunkt (data.at fehlt)');
396
403
  }
397
- return { to: daten.to, at: daten.at, via: typeof daten.via === 'string' && daten.via !== '' ? daten.via : null };
404
+ const via = index_js_2.RECEIPT_EMAIL_VIAS.includes(daten.via) ? daten.via : null;
405
+ return { to: daten.to, at: daten.at, via };
398
406
  }
399
407
  /**
400
408
  * Prueft die Gutschein-Kombination eines Belegs und liefert den ersten
@@ -489,6 +497,11 @@ function gepruefterTip(tip) {
489
497
  if (tip == null || typeof tip !== 'object' || !istCentBetrag(tip.cents)) {
490
498
  throw eingabefehler('Trinkgeld: Betrag muss eine ganze Zahl in Cent > 0 sein.');
491
499
  }
500
+ // Ein unbekannter Schluessel (etwa das alte `sofortErhalten`) weist der
501
+ // Server unter /v3 ab; hier faellt er vor dem Senden.
502
+ const fremd = Object.keys(tip).find((k) => !TIP_FELDER.includes(k));
503
+ if (fremd != null)
504
+ throw eingabefehler(`Trinkgeld: unbekanntes Feld "${fremd}".`);
492
505
  const nutzlast = { cents: tip.cents };
493
506
  if (tip.paymentMethod != null)
494
507
  nutzlast['paymentMethod'] = gepruefteZahlungsart(tip.paymentMethod);
@@ -496,11 +509,11 @@ function gepruefterTip(tip) {
496
509
  // Voreinstellung des Betriebs. Ein `false` waere dort eine Aussage, kein
497
510
  // Weglassen. Der Wortlaut des Fehlers ist der des Backends
498
511
  // (tip-core.normalizeTip) -- wer ihn hier sieht, sieht denselben Satz.
499
- if (tip.sofortErhalten != null) {
500
- if (typeof tip.sofortErhalten !== 'boolean') {
501
- throw eingabefehler('Trinkgeld: sofortErhalten muss true oder false sein.');
512
+ if (tip.receivedImmediately != null) {
513
+ if (typeof tip.receivedImmediately !== 'boolean') {
514
+ throw eingabefehler('Trinkgeld: receivedImmediately muss true oder false sein.');
502
515
  }
503
- nutzlast['sofortErhalten'] = tip.sofortErhalten;
516
+ nutzlast['receivedImmediately'] = tip.receivedImmediately;
504
517
  }
505
518
  if (tip.recipients != null) {
506
519
  if (!Array.isArray(tip.recipients) || tip.recipients.length === 0) {
@@ -526,6 +539,7 @@ function gepruefterTip(tip) {
526
539
  }
527
540
  return nutzlast;
528
541
  }
542
+ const TIP_FELDER = ['cents', 'paymentMethod', 'recipients', 'receivedImmediately'];
529
543
  /**
530
544
  * Zahlungsart des Aufrufers pruefen — unbekannt wirft, bevor etwas rausgeht.
531
545
  * `mixed` wirft ebenfalls: den Wert vergibt nur der Server (Beleg mit
@@ -549,18 +563,6 @@ function gepruefteZahlungsart(wert) {
549
563
  }
550
564
  /** Hoechstzahl der Zahlungen je Beleg (Backend: MAX_ZAHLUNGEN). */
551
565
  const MAX_ZAHLUNGEN = 20;
552
- /**
553
- * `payments` neben einer Einzel-Zahlungsart oder Kartenfeldern? Liefert den
554
- * Grund (Backend: PAYMENTS_CONFLICT), sonst null. Nie still eines bevorzugen.
555
- */
556
- function zahlungsKonflikt(options) {
557
- for (const feld of ['paymentMethod', 'paymentMethodFromServer', 'creditCardProvider', 'cardPaymentId', 'cardPaymentData']) {
558
- if (options[feld] != null) {
559
- return `payments und ${feld} duerfen nicht gemeinsam gesendet werden – Kartenangaben gehoeren in die Zahlung.`;
560
- }
561
- }
562
- return null;
563
- }
564
566
  /**
565
567
  * Zahlungsliste pruefen und in Nutzlast-Form bringen — Formpruefung wie
566
568
  * `pruefeZahlungen` im Backend, soweit sie ohne Beleg und Zahlbetrag geht
@@ -624,12 +626,53 @@ function gepruefteZahlungen(roh, storno, functionName) {
624
626
  return aus;
625
627
  });
626
628
  }
627
- /** `payments` am Storno: Konflikt mit Zahlungsart/Kartenfeldern, dann Form. */
628
- function gepruefteStornoZahlungen(options) {
629
- const konflikt = zahlungsKonflikt(options);
630
- if (konflikt != null)
631
- throw new errors_js_1.KasseneckValidationError('cancelReceipt', konflikt, 'request');
632
- return gepruefteZahlungen(options.payments, true, 'cancelReceipt');
629
+ /** Zahlarten mit Kartenterminal (Backend: KARTEN_ZAHLARTEN). */
630
+ const KARTEN_ZAHLARTEN = new Set(['creditCard', 'uberCard', 'boltCard']);
631
+ /**
632
+ * Kennung der Originalzahlung fuer die Rueckbuchung am Terminal (Hobex
633
+ * `originalTransactionId`, SumUp-Transaktion, ...): `providerPaymentId` der
634
+ * Zahlung `paymentId` des Originals. Die liefert nur der Kassenweg (Kanal
635
+ * `app`, `registerUserAuth`); am oeffentlichen Weg fehlt sie, und dann wirft
636
+ * dieser Aufruf, statt `undefined` an ein Terminal weiterzugeben.
637
+ */
638
+ function cardRefundReference(receipt, paymentId) {
639
+ const zahlung = receipt.payments?.find((z) => z.id === paymentId);
640
+ if (zahlung == null) {
641
+ throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Zahlung "${paymentId}" gibt es am Beleg nicht`, 'request');
642
+ }
643
+ const methode = typeof zahlung.method === 'object' ? zahlung.method.value : zahlung.method;
644
+ if (!KARTEN_ZAHLARTEN.has(methode)) {
645
+ throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Zahlung "${paymentId}" ist keine Kartenzahlung`, 'request');
646
+ }
647
+ if (typeof zahlung.providerPaymentId !== 'string' || zahlung.providerPaymentId === '') {
648
+ throw new errors_js_1.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');
649
+ }
650
+ return zahlung.providerPaymentId;
651
+ }
652
+ /**
653
+ * Karten-Rueckbuchung am Storno, geprueft vor dem Senden:
654
+ * - Sie nennt ihren Anbieter (`provider`; `custom` fuer eine Erstattung
655
+ * ohne angebundenes Terminal). Ganz ohne Anbieterfelder faellt sie.
656
+ * - Ueber einen Anbieter (nicht `custom`) braucht sie einen Bezug: ihre eigene
657
+ * Terminal-Kennung (`providerPaymentId` der Erstattung) oder, liegt das
658
+ * Original vor, die Kennung der erstatteten Kartenzahlung dort. Erst wenn
659
+ * beides fehlt, wirft sie.
660
+ */
661
+ function pruefeKartenRueckbuchung(zahlungen, original) {
662
+ zahlungen.forEach((z, i) => {
663
+ if (!KARTEN_ZAHLARTEN.has(String(z['method'])))
664
+ return;
665
+ const anbieter = z['provider'];
666
+ if (anbieter == null && z['providerPaymentId'] == null) {
667
+ throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Zahlung ${i + 1}: Karten-Rueckbuchung ohne Anbieter und ohne Kennung (provider angeben, custom fuer eine Erstattung ohne angebundenes Terminal)`, 'request');
668
+ }
669
+ if (anbieter === index_js_1.CreditCardProvider.custom || z['providerPaymentId'] != null)
670
+ return;
671
+ const orig = original != null && typeof z['refundOf'] === 'string' ? original.payments?.find((o) => o.id === z['refundOf']) : undefined;
672
+ if (typeof orig?.providerPaymentId === 'string' && orig.providerPaymentId !== '')
673
+ return;
674
+ throw new errors_js_1.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');
675
+ });
633
676
  }
634
677
  /** Kartenanbieter pruefen — er stammt vom Aufrufer, nicht aus Serverdaten. */
635
678
  function kartenanbieter(wert) {
@@ -642,6 +685,24 @@ function kartenanbieter(wert) {
642
685
  function eingabefehler(grund) {
643
686
  return new errors_js_1.KasseneckValidationError('createReceipt', grund, 'request');
644
687
  }
688
+ /**
689
+ * Liest die Erfolgsantwort eines **signierenden** Aufrufs. Scheitert das
690
+ * Lesen (fehlender Beleg, fehlender Bezug, unbrauchbares Feld oder ein
691
+ * Laufzeitfehler beim Umwandeln), hat der Server trotzdem Erfolg gemeldet:
692
+ * der Beleg ist signiert und im DEP. Das darf nie als gewoehnlicher Fehler
693
+ * enden, sonst kassiert die Kasse ein zweites Mal. Darum wird daraus
694
+ * `KasseneckApiError` mit Code `response_unreadable` und `outcome: 'unknown'`.
695
+ * Der Grund stammt vom Paket; aus der Antwort selbst wird nichts uebernommen.
696
+ */
697
+ function signiertGelesen(functionName, lesen) {
698
+ try {
699
+ return lesen();
700
+ }
701
+ catch (ursache) {
702
+ const grund = ursache instanceof errors_js_1.KasseneckValidationError ? ursache.reason : 'Antwort nicht lesbar';
703
+ throw new errors_js_1.KasseneckApiError(functionName, `Erfolg gemeldet, Antwort aber unlesbar (${grund}). Der Vorgang kann ausgefuehrt sein: nicht wiederholen, sondern nachlesen.`, {}, 'response_unreadable');
704
+ }
705
+ }
645
706
  /** Die Antwort meldete Erfolg, trug aber nicht, was der Aufruf zusagt. */
646
707
  function antwortfehler(functionName, grund) {
647
708
  return new errors_js_1.KasseneckValidationError(functionName, grund, 'response');
@@ -653,6 +714,9 @@ function antwortfehler(functionName, grund) {
653
714
  * models/receipt.ts), und die bestehenden Aufrufe sollen ihre Zusage behalten.
654
715
  * Wer beides braucht, nimmt [belegMitFirmaAusHuelle] ueber die
655
716
  * `…WithCompany`-Varianten.
717
+ *
718
+ * Paketintern exportiert, damit `./stored` gespeicherte Belege mit demselben
719
+ * Leser liest; nicht Teil der Paketoberflaeche.
656
720
  */
657
721
  function belegAusHuelle(daten, functionName) {
658
722
  const huelle = daten;
@@ -682,21 +746,34 @@ function belegAusHuelle(daten, functionName) {
682
746
  * fehlt er, ist die Antwort unbrauchbar. Die Firmendaten duerfen dagegen
683
747
  * luecken haben — ein Kundendokument ohne gepflegte Fusszeile ist kein Grund,
684
748
  * einen ausgestellten Beleg nicht anzuzeigen (siehe models/receipt-company.ts).
749
+ * Paketintern exportiert wie [belegAusHuelle].
685
750
  */
686
751
  function belegMitFirmaAusHuelle(daten, functionName) {
687
752
  const receipt = belegAusHuelle(daten, functionName);
688
753
  const d = (daten ?? {});
689
754
  const layout = d.layout && typeof d.layout === 'object' && Array.isArray(d.layout.lines) ? d.layout : null;
690
- const pa = d.pruefangaben && typeof d.pruefangaben === 'object' ? d.pruefangaben : null;
691
- const text = (v) => (typeof v === 'string' && v ? v : null);
755
+ const angaben = d.registrationInfo && typeof d.registrationInfo === 'object' ? (0, index_js_2.readRegistrationInfo)(d.registrationInfo) : null;
692
756
  return {
693
757
  receipt,
694
758
  company: (0, index_js_2.fromReceiptCompanyPayload)(daten),
695
- testKasse: d.testKasse === true,
696
- testSignatur: d.testSignatur === true,
697
- kopfId: typeof d.kopfId === 'string' ? d.kopfId : null,
759
+ testCashregister: d.testCashregister === true,
760
+ testSignature: d.testSignature === true,
761
+ headerVersionId: typeof d.headerVersionId === 'string' && d.headerVersionId !== '' ? d.headerVersionId : null,
698
762
  layout,
699
- pruefangaben: pa ? { karteRegistriertAm: text(pa.karteRegistriertAm), kasseRegistriertAm: text(pa.kasseRegistriertAm) } : null,
700
- logoStufe: d.logo_skala === 'S' || d.logo_skala === 'M' || d.logo_skala === 'L' || d.logo_skala === 'XL' ? d.logo_skala : 'M',
763
+ registrationInfo: angaben,
764
+ logoScale: d.logo_scale === 'S' || d.logo_scale === 'M' || d.logo_scale === 'L' || d.logo_scale === 'XL' ? d.logo_scale : 'M',
701
765
  };
702
766
  }
767
+ /**
768
+ * Zahlbetrag des Servers aus einem `payments_sum_mismatch`
769
+ * (`details.expectedCents`), sonst `undefined`. Das Paket wiederholt nie
770
+ * selbst mit diesem Betrag: eine Kartenzahlung ist schon belastet. Die Kasse
771
+ * entscheidet (Differenz nachkassieren oder erstatten) und schickt dann einen
772
+ * neuen Verkauf.
773
+ */
774
+ function paymentsExpectedCents(error) {
775
+ if (!(0, errors_js_1.isKasseneckApiError)(error) || error.code !== 'payments_sum_mismatch')
776
+ return undefined;
777
+ const wert = error.details['expectedCents'];
778
+ return Number.isSafeInteger(wert) ? wert : undefined;
779
+ }
@@ -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>;