@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,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 (0, errors_js_1.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 (0, errors_js_1.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.');
75
- }
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.`);
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).');
78
118
  }
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 (0, errors_js_1.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) {
@@ -653,6 +696,9 @@ function antwortfehler(functionName, grund) {
653
696
  * models/receipt.ts), und die bestehenden Aufrufe sollen ihre Zusage behalten.
654
697
  * Wer beides braucht, nimmt [belegMitFirmaAusHuelle] ueber die
655
698
  * `…WithCompany`-Varianten.
699
+ *
700
+ * Paketintern exportiert, damit `./stored` gespeicherte Belege mit demselben
701
+ * Leser liest; nicht Teil der Paketoberflaeche.
656
702
  */
657
703
  function belegAusHuelle(daten, functionName) {
658
704
  const huelle = daten;
@@ -682,21 +728,34 @@ function belegAusHuelle(daten, functionName) {
682
728
  * fehlt er, ist die Antwort unbrauchbar. Die Firmendaten duerfen dagegen
683
729
  * luecken haben — ein Kundendokument ohne gepflegte Fusszeile ist kein Grund,
684
730
  * einen ausgestellten Beleg nicht anzuzeigen (siehe models/receipt-company.ts).
731
+ * Paketintern exportiert wie [belegAusHuelle].
685
732
  */
686
733
  function belegMitFirmaAusHuelle(daten, functionName) {
687
734
  const receipt = belegAusHuelle(daten, functionName);
688
735
  const d = (daten ?? {});
689
736
  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);
737
+ const angaben = d.registrationInfo && typeof d.registrationInfo === 'object' ? (0, index_js_2.readRegistrationInfo)(d.registrationInfo) : null;
692
738
  return {
693
739
  receipt,
694
740
  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,
741
+ testCashregister: d.testCashregister === true,
742
+ testSignature: d.testSignature === true,
743
+ headerVersionId: typeof d.headerVersionId === 'string' && d.headerVersionId !== '' ? d.headerVersionId : null,
698
744
  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',
745
+ registrationInfo: angaben,
746
+ logoScale: d.logo_scale === 'S' || d.logo_scale === 'M' || d.logo_scale === 'L' || d.logo_scale === 'XL' ? d.logo_scale : 'M',
701
747
  };
702
748
  }
749
+ /**
750
+ * Zahlbetrag des Servers aus einem `payments_sum_mismatch`
751
+ * (`details.expectedCents`), sonst `undefined`. Das Paket wiederholt nie
752
+ * selbst mit diesem Betrag: eine Kartenzahlung ist schon belastet. Die Kasse
753
+ * entscheidet (Differenz nachkassieren oder erstatten) und schickt dann einen
754
+ * neuen Verkauf.
755
+ */
756
+ function paymentsExpectedCents(error) {
757
+ if (!(0, errors_js_1.isKasseneckApiError)(error) || error.code !== 'payments_sum_mismatch')
758
+ return undefined;
759
+ const wert = error.details['expectedCents'];
760
+ return Number.isSafeInteger(wert) ? wert : undefined;
761
+ }
@@ -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>;