@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,4 +1,4 @@
1
- export const AUFRUFE = [
1
+ export const ALL_CALLS = [
2
2
  'activateCashregister',
3
3
  'cancelInvoice',
4
4
  'cancelReceipt',
@@ -30,6 +30,7 @@ export const AUFRUFE = [
30
30
  'getPartnerInfo',
31
31
  'getPrintJob',
32
32
  'getReceipt',
33
+ 'getReportV2',
33
34
  'hobexPayApi',
34
35
  'hobexRefundApi',
35
36
  'issueInvoice',
@@ -52,11 +53,13 @@ export const AUFRUFE = [
52
53
  'registerPinLogin',
53
54
  'registerUserLogin',
54
55
  'renewRegisterSession',
56
+ 'reportCustomerContract',
55
57
  'requestCustomerSignature',
56
58
  'searchCustomers',
57
59
  'sendPartnerCustomerFonLink',
58
60
  'sendPartnerWebhookTest',
59
61
  'sendReceiptEmail',
62
+ 'setMyKasseLogo',
60
63
  'setMyKasseSettings',
61
64
  'setMyRegisterDeviceSettings',
62
65
  'stripeCaptureIntent',
@@ -65,3 +68,110 @@ export const AUFRUFE = [
65
68
  'updateCustomer',
66
69
  'updatePartnerWebhook',
67
70
  ];
71
+ /**
72
+ * Die oeffentlichen Endpunkte unter `/v3` (`https://api.kasseneck.at/v3/<name>`),
73
+ * mit ihrem **aeusseren** Namen und in der Reihenfolge des Backend-Vertrags
74
+ * (`fixtures/v3/v3-vokabular.json`, `endpoints.public`, umbenannt nach
75
+ * `names`). Ein Test haelt beide Listen deckungsgleich.
76
+ */
77
+ export const PUBLIC_CALLS = [
78
+ 'createReceipt',
79
+ 'getReceipt',
80
+ 'cancelReceipt',
81
+ 'sendReceiptEmail',
82
+ 'generateFullReceiptId',
83
+ 'downloadReceipt',
84
+ 'getFirstReceiptDate',
85
+ 'getReportV2',
86
+ 'downloadReport',
87
+ 'downloadDailyReport',
88
+ 'createPaymentLinkStripe',
89
+ 'stripeCaptureIntent',
90
+ 'hobexPayApi',
91
+ 'hobexRefundApi',
92
+ 'hobexGetStatus',
93
+ 'financeWebService',
94
+ 'listMyTipRecipients',
95
+ 'getPartnerInfo',
96
+ 'createPartnerCustomer',
97
+ 'checkPartnerCustomerEmail',
98
+ 'listPartnerCustomers',
99
+ 'getPartnerCustomer',
100
+ 'sendPartnerCustomerFonLink',
101
+ 'createPartnerWebhook',
102
+ 'updatePartnerWebhook',
103
+ 'deletePartnerWebhook',
104
+ 'listPartnerWebhooks',
105
+ 'sendPartnerWebhookTest',
106
+ 'rotatePartnerWebhookSecret',
107
+ 'listPartnerWebhookDeliveries',
108
+ 'requestCustomerSignature',
109
+ 'getCustomerSignatureStatus',
110
+ 'createCustomerCashregister',
111
+ 'activateCashregister',
112
+ 'listCustomerCashregisters',
113
+ 'getCustomerCredentials',
114
+ 'reportCustomerContract',
115
+ 'createCustomer',
116
+ 'getCustomer',
117
+ 'updateCustomer',
118
+ 'searchCustomers',
119
+ 'issueInvoice',
120
+ 'cancelInvoice',
121
+ 'createCreditNote',
122
+ 'getInvoice',
123
+ 'listInvoices',
124
+ 'getInvoicePdf',
125
+ 'getInvoiceXml',
126
+ 'getInvoiceSetupStatus',
127
+ 'listBrands',
128
+ 'recordInvoicePayment',
129
+ ];
130
+ /**
131
+ * Die Endpunkte des Kassenwegs (`https://kasse.kasseneck.at/api/v3/<name>`,
132
+ * Web-Kasse: gleicher Ursprung `/api/v3`), in der Reihenfolge von
133
+ * `endpoints.register`. Sechs davon sind zugleich oeffentlich; die Kasse ruft
134
+ * sie trotzdem ueber diesen Weg (ein Dialekt je Client, Nachtrag §5.2).
135
+ */
136
+ export const POS_CALLS = [
137
+ 'pairRegisterDevice',
138
+ 'listRegisterUsersForDevice',
139
+ 'listRegisterSessionsForDevice',
140
+ 'registerUserLogin',
141
+ 'registerPinLogin',
142
+ 'renewRegisterSession',
143
+ 'endRegisterSession',
144
+ 'unpairRegisterDevice',
145
+ 'listMyCashregisters',
146
+ 'listMyReceipts',
147
+ 'getReceipt',
148
+ 'createReceipt',
149
+ 'generateFullReceiptId',
150
+ 'cancelReceipt',
151
+ 'sendReceiptEmail',
152
+ 'listMyArticleGroups',
153
+ 'listMyArticles',
154
+ 'getKasseSettings',
155
+ 'setMyKasseSettings',
156
+ 'setMyKasseLogo',
157
+ 'setMyRegisterDeviceSettings',
158
+ 'listMyPrinters',
159
+ 'createPrintJob',
160
+ 'getPrintJob',
161
+ 'listMyTipRecipients',
162
+ ];
163
+ const OEFFENTLICH = new Set(PUBLIC_CALLS);
164
+ const KASSENWEG = new Set(POS_CALLS);
165
+ const NUR_KASSE = new Set(POS_CALLS.filter((name) => !OEFFENTLICH.has(name)));
166
+ /** Einer der 25 Aufrufe des Kassenwegs. */
167
+ export function isPosCall(name) {
168
+ return KASSENWEG.has(name);
169
+ }
170
+ /**
171
+ * Nur ueber den Kassenweg erreichbar (19 Namen): unter `api.kasseneck.at/v3`
172
+ * gibt es sie nicht. Der Transport schickt sie darum ohne eigene Basis an
173
+ * [POS_BASE_URL] statt an die oeffentliche Basis.
174
+ */
175
+ export function isPosOnlyCall(name) {
176
+ return NUR_KASSE.has(name);
177
+ }
@@ -48,5 +48,7 @@ export interface RegisterUserAuthOptions {
48
48
  }
49
49
  /** Anmeldung per API-Schluessel und Kassen-Token (Geraete, POS-Apps, Dritte). */
50
50
  export declare function apiKeyAuth(options: ApiKeyAuthOptions): KasseneckAuth;
51
+ /** Nur fuer den Transport; nicht Teil der oeffentlichen Oberflaeche. */
52
+ export declare function isRegisterUserAuth(auth: KasseneckAuth): boolean;
51
53
  /** Anmeldung eines Kassen-Benutzers der Browser-Kasse (ID-Token + Sitzung). */
52
54
  export declare function registerUserAuth(options: RegisterUserAuthOptions): KasseneckAuth;
@@ -42,13 +42,26 @@ export function apiKeyAuth(options) {
42
42
  params: {},
43
43
  });
44
44
  }
45
+ /**
46
+ * Anmeldungen der Kassen-Benutzer. Ein Transport mit einer davon ruft ohne
47
+ * eigene Basis **jeden** Aufruf ueber den Kassenweg (`kasse.kasseneck.at/api/v3`,
48
+ * Kanal `app`), auch die sechs oeffentlichen: die Kasse spricht einen Dialekt
49
+ * und braucht am Beleg die Anbieterdaten der Kartenzahlung (Nachtrag §5.2, §8).
50
+ * Eine Menge statt eines Felds am Funktionsobjekt: niemand kann eine fremde
51
+ * Anmeldung von aussen zur Kassen-Anmeldung erklaeren.
52
+ */
53
+ const KASSENWEG = new WeakSet();
54
+ /** Nur fuer den Transport; nicht Teil der oeffentlichen Oberflaeche. */
55
+ export function isRegisterUserAuth(auth) {
56
+ return KASSENWEG.has(auth);
57
+ }
45
58
  /** Anmeldung eines Kassen-Benutzers der Browser-Kasse (ID-Token + Sitzung). */
46
59
  export function registerUserAuth(options) {
47
60
  if (!options.cashregisterId) {
48
61
  throw new KasseneckAuthError('registerUserAuth: cashregisterId fehlt');
49
62
  }
50
63
  const { getIdToken, getSessionId, cashregisterId } = options;
51
- return async () => {
64
+ const anmeldung = async () => {
52
65
  // Beides bei JEDEM Aufruf frisch — siehe Modulkommentar (Ablaufzeiten).
53
66
  const [idToken, sessionId] = await Promise.all([getIdToken(), getSessionId()]);
54
67
  if (!idToken) {
@@ -65,4 +78,6 @@ export function registerUserAuth(options) {
65
78
  params: { cashregisterId },
66
79
  };
67
80
  };
81
+ KASSENWEG.add(anmeldung);
82
+ return anmeldung;
68
83
  }
@@ -18,4 +18,4 @@ import type { InternerTransport } from './aufrufe.js';
18
18
  *
19
19
  * Ohne diesen Aufruf kann eine Browser-Kasse ihre Kasse nicht auswaehlen.
20
20
  */
21
- export declare function listMyCashregisters(rufen: InternerTransport): Promise<Cashregister[]>;
21
+ export declare function listMyCashregisters(transport: InternerTransport): Promise<Cashregister[]>;
@@ -18,8 +18,8 @@ import { KasseneckValidationError } from './errors.js';
18
18
  *
19
19
  * Ohne diesen Aufruf kann eine Browser-Kasse ihre Kasse nicht auswaehlen.
20
20
  */
21
- export async function listMyCashregisters(rufen) {
22
- const daten = await rufen('listMyCashregisters');
21
+ export async function listMyCashregisters(transport) {
22
+ const daten = await transport('listMyCashregisters');
23
23
  const liste = daten?.cashregisters;
24
24
  if (!Array.isArray(liste)) {
25
25
  throw new KasseneckValidationError('listMyCashregisters', 'Antwort enthaelt keine Kassenliste (data.cashregisters fehlt)', 'response');
@@ -11,24 +11,41 @@
11
11
  * `'response'`: das Backend meldete Erfolg, die Nutzlast enthielt aber
12
12
  * nicht, was der Aufruf zusagt.
13
13
  *
14
- * - `KasseneckApiError` — **fachlicher** Fehler. Das Backend antwortet immer
15
- * mit HTTP 200 und legt Erfolg/Misserfolg in den Rumpf
16
- * (`{status:'success'|'error', message, data}`, siehe `successResponse`/
17
- * `errorResponse` im Backend). Ein `status:'error'` heisst: die Anfrage kam
18
- * an und wurde abgelehnt (gesperrte Kasse, fehlendes Modul, ungueltiger
19
- * Parameter). Wiederholen hilft nicht.
14
+ * - `KasseneckApiError`: **fachlicher** Fehler mit `code`. Das Backend legt
15
+ * Erfolg/Misserfolg in den Rumpf (`{status:'success'|'error', message,
16
+ * code, data}`, siehe `successResponse`/`errorResponse` im Backend), meist
17
+ * unter HTTP 200, unter `/v3` bei unbekanntem Endpunkt auch unter HTTP 404
18
+ * (`not_found`). Dazu kommen drei Codes des Pakets selbst:
19
+ * `route_missing` (HTTP 200 mit HTML: die Auffangregel der
20
+ * Single-Page-App hat geantwortet, der Aufruf kam nie an),
21
+ * `dialect_mismatch` (Antwort ohne Kennzeichen `Kasseneck-Api-Version: v3`:
22
+ * ein Rand ohne `/v3` hat geantwortet, **Ausgang unklar**) und
23
+ * `response_unreadable` (ein Aufruf mit Wirkung meldete Erfolg, die
24
+ * Antwort traegt aber nicht, was er zusagt: **Ausgang unklar**).
25
+ * **Entscheidend ist `outcome`:** `'rejected'` heisst abgelehnt, nichts
26
+ * geschehen, Wiederholen hilft nicht. `'unknown'` heisst: der Vorgang kann
27
+ * ausgefuehrt sein (bei `createReceipt` ein signierter Beleg). Dann **nie
28
+ * wiederholen**, sondern das Ergebnis nachlesen (Belegliste, `getReceipt`).
20
29
  * - `KasseneckHttpError` — die Antwort war **keine** verwertbare Huelle:
21
- * HTTP 500/404, leerer Rumpf, oder HTTP 200 mit HTML statt JSON (typisch,
22
- * wenn ein Aufruf mangels Rewrite auf der Single-Page-App landet). Beim
30
+ * HTTP 500/404 ohne Huelle, leerer Rumpf oder Text statt JSON. Beim
23
31
  * Bericht-Download gelten dieselben Gruende fuer alles, was kein PDF ist.
24
- * `reason` trennt die Faelle maschinenlesbar.
32
+ * `reason` trennt die Faelle maschinenlesbar. Auf einem Aufruf mit
33
+ * Wirkung (signierend oder geldbewegend) hat HTTP 5xx
34
+ * `outcome: 'unknown'`, ebenso HTTP 200 mit Kennzeichen, aber leerem oder
35
+ * unlesbarem Rumpf.
25
36
  * - `KasseneckNetworkError` — die Antwort kam gar nicht: Netz weg, DNS,
26
- * abgebrochene Verbindung oder Zeitueberschreitung (`timedOut`).
37
+ * abgebrochene Verbindung oder Zeitueberschreitung (`timedOut`). Auch hier
38
+ * gilt `outcome`: war die Anfrage schon unterwegs und ist der Aufruf einer
39
+ * mit Wirkung (signierend: `createReceipt`, `cancelReceipt`,
40
+ * `financeWebService`; geldbewegend: `hobexPayApi`, `hobexRefundApi`,
41
+ * `stripeCaptureIntent`), ist er `'unknown'`.
27
42
  * - `KasseneckAuthError` — es kam nicht einmal zur Anfrage, weil die Anmeldung
28
43
  * scheiterte (fehlende Zugangsdaten, oder der Token-/Sitzungsgeber warf).
29
44
  * In der Browser-Kasse mit ihrer 90-Sekunden-Sitzung ist das Alltag, kein
30
45
  * Sonderfall.
31
46
  *
47
+ * [isOutcomeUnknown] fasst das fuer jede Fehlerart zusammen.
48
+ *
32
49
  * **Geheimnisse gehoeren in keinen dieser Fehler.** Fehlermeldungen landen in
33
50
  * Protokollen und Fehlerdiensten; weder `api_key`, Kassen-Token, ID-
34
51
  * ID-Token noch Sitzungsbezeichner duerfen dorthin. Deshalb tragen die Fehler
@@ -87,6 +104,21 @@ export declare function causeDigest(ursache: unknown, geheimnisse: readonly stri
87
104
  * demselben Grund **keinen** Vorgabewert.
88
105
  */
89
106
  export declare function fehlerDetails(daten: unknown, geheimnisse: readonly string[]): Record<string, unknown>;
107
+ /**
108
+ * Ausgang eines gescheiterten Aufrufs. `'rejected'`: nichts geschehen.
109
+ * `'unknown'`: der Vorgang kann ausgefuehrt sein; nie wiederholen, sondern
110
+ * das Ergebnis nachlesen.
111
+ */
112
+ export type ErrorOutcome = 'unknown' | 'rejected';
113
+ /**
114
+ * Codes, die das Paket selbst vergibt, nicht der Server: `route_missing`
115
+ * (HTML statt Backend, der Aufruf kam nie an) und `response_unreadable`
116
+ * (ein Aufruf mit Wirkung meldete Erfolg, die Antwort ist aber unlesbar;
117
+ * Ausgang unklar). `dialect_mismatch` vergibt das Paket ebenfalls, der Code
118
+ * gehoert aber schon zum Rand des Servers (`errorCodes.edge`).
119
+ */
120
+ export declare const CLIENT_ERROR_CODES: readonly ["route_missing", "response_unreadable"];
121
+ export type ClientErrorCode = (typeof CLIENT_ERROR_CODES)[number];
90
122
  export declare class KasseneckApiError extends Error {
91
123
  readonly name = "KasseneckApiError";
92
124
  /** Aufgerufene Backend-Funktion, z. B. `createReceipt`. */
@@ -109,21 +141,38 @@ export declare class KasseneckApiError extends Error {
109
141
  * beilegt. Immer ein Objekt, notfalls ein leeres.
110
142
  */
111
143
  readonly details: Record<string, unknown>;
144
+ /**
145
+ * `'unknown'` bei `dialect_mismatch`, `receipt_outcome_unknown`,
146
+ * `cancellation_outcome_unknown`, `response_unreadable` (Erfolg gemeldet,
147
+ * Antwort eines Aufrufs mit Wirkung aber unlesbar) und
148
+ * `response_translation_failed` (ausser mit `details.handled === false`);
149
+ * sonst `'rejected'`. Bei `'unknown'` nie wiederholen, sondern nachlesen.
150
+ */
151
+ readonly outcome: ErrorOutcome;
112
152
  constructor(functionName: string, serverMessage: string, details?: Record<string, unknown>, code?: string);
113
153
  }
114
154
  /** Warum die Antwort keine verwertbare Huelle war. */
115
155
  export type HttpFailureReason = 'server-error' | 'empty-body' | 'not-json' | 'missing-status';
116
- /** Antwort ohne verwertbare Huelle (HTTP-Fehler, leerer Rumpf, HTML statt JSON). */
156
+ /** Antwort ohne verwertbare Huelle (HTTP-Fehler ohne Huelle, leerer Rumpf, Text statt JSON). */
117
157
  export declare class KasseneckHttpError extends Error {
118
158
  readonly name = "KasseneckHttpError";
119
159
  readonly functionName: string;
120
- /** HTTP-Statuscode der Antwort (bei HTML-statt-JSON durchaus 200). */
160
+ /** HTTP-Statuscode der Antwort (bei Text statt JSON durchaus 200). */
121
161
  readonly statusCode: number;
122
162
  /** Inhaltstyp der Antwort, falls die Gegenstelle einen gesetzt hat. */
123
163
  readonly contentType: string | undefined;
124
164
  /** Maschinenlesbarer Grund — trennt den Rewrite-Fall vom 500er ohne Textparsen. */
125
165
  readonly reason: HttpFailureReason;
126
- constructor(functionName: string, statusCode: number, contentType: string | undefined, reason: HttpFailureReason);
166
+ /**
167
+ * `'unknown'` auf einem Aufruf mit Wirkung (`createReceipt`,
168
+ * `cancelReceipt`, `financeWebService`, `hobexPayApi`, `hobexRefundApi`,
169
+ * `stripeCaptureIntent`) bei HTTP 5xx und bei HTTP 200 mit
170
+ * Kennzeichen, aber unlesbarem Rumpf (`empty-body`, `not-json` auch bei
171
+ * `text/html`, `missing-status`): der Handler kann gelaufen sein, nie wiederholen,
172
+ * sondern nachlesen. Sonst `'rejected'` (auch 4xx).
173
+ */
174
+ readonly outcome: ErrorOutcome;
175
+ constructor(functionName: string, statusCode: number, contentType: string | undefined, reason: HttpFailureReason, outcome?: ErrorOutcome);
127
176
  }
128
177
  /** Es kam keine Antwort: Netzfehler oder Zeitueberschreitung. */
129
178
  export declare class KasseneckNetworkError extends Error {
@@ -137,7 +186,13 @@ export declare class KasseneckNetworkError extends Error {
137
186
  readonly causeName: string | undefined;
138
187
  /** Code der zugrunde liegenden Ursache, sofern unbedenklich (z. B. `ECONNREFUSED`). */
139
188
  readonly causeCode: string | undefined;
140
- constructor(functionName: string, timedOut: boolean, timeoutMs: number, ursache?: CauseDigest);
189
+ /**
190
+ * `'unknown'`, wenn die Anfrage schon unterwegs war und der Aufruf signiert
191
+ * (`createReceipt`, `cancelReceipt`, `financeWebService`): dann nie
192
+ * wiederholen, sondern nachlesen. Sonst `'rejected'`.
193
+ */
194
+ readonly outcome: ErrorOutcome;
195
+ constructor(functionName: string, timedOut: boolean, timeoutMs: number, cause?: CauseDigest, outcome?: ErrorOutcome);
141
196
  }
142
197
  /**
143
198
  * Die Anmeldung scheiterte — es ging keine Anfrage raus.
@@ -185,8 +240,28 @@ export declare class KasseneckValidationError extends Error {
185
240
  }
186
241
  /** Alle Fehler, die dieses Paket wirft. */
187
242
  export type KasseneckError = KasseneckApiError | KasseneckHttpError | KasseneckNetworkError | KasseneckAuthError | KasseneckValidationError;
188
- export declare function isKasseneckApiError(fehler: unknown): fehler is KasseneckApiError;
189
- export declare function isKasseneckHttpError(fehler: unknown): fehler is KasseneckHttpError;
190
- export declare function isKasseneckNetworkError(fehler: unknown): fehler is KasseneckNetworkError;
191
- export declare function isKasseneckAuthError(fehler: unknown): fehler is KasseneckAuthError;
192
- export declare function isKasseneckValidationError(fehler: unknown): fehler is KasseneckValidationError;
243
+ /**
244
+ * Ist der Ausgang dieses Fehlers unklar (`outcome === 'unknown'`)? Dann den
245
+ * Aufruf **nicht wiederholen**, sondern das Ergebnis nachlesen. Gilt fuer
246
+ * jede Fehlerart; nur [KasseneckApiError], [KasseneckHttpError] und
247
+ * [KasseneckNetworkError] koennen `'unknown'` sein.
248
+ */
249
+ export declare function isOutcomeUnknown(error: unknown): boolean;
250
+ export declare function isKasseneckApiError(error: unknown): error is KasseneckApiError;
251
+ export declare function isKasseneckHttpError(error: unknown): error is KasseneckHttpError;
252
+ export declare function isKasseneckNetworkError(error: unknown): error is KasseneckNetworkError;
253
+ export declare function isKasseneckAuthError(error: unknown): error is KasseneckAuthError;
254
+ export declare function isKasseneckValidationError(error: unknown): error is KasseneckValidationError;
255
+ /**
256
+ * Liest die Erfolgsantwort eines Aufrufs **mit Wirkung** (signierend oder
257
+ * geldbewegend). Scheitert das Lesen (fehlender Beleg, fehlender Bezug,
258
+ * unbrauchbares Feld oder ein Laufzeitfehler beim Umwandeln), hat der Server
259
+ * trotzdem Erfolg gemeldet: der Beleg ist signiert und im DEP, die Karte
260
+ * belastet bzw. der Einzug gelaufen. Das darf nie als gewoehnlicher Fehler
261
+ * enden, sonst kassiert die Kasse ein zweites Mal. Darum wird daraus
262
+ * `KasseneckApiError` mit Code `response_unreadable` und `outcome: 'unknown'`.
263
+ * Der Grund stammt vom Paket; aus der Antwort selbst wird nichts uebernommen.
264
+ *
265
+ * Paketintern (receipts.ts, payments/); nicht Teil der Paketoberflaeche.
266
+ */
267
+ export declare function signiertGelesen<T>(functionName: string, lesen: () => T): T;
@@ -11,24 +11,41 @@
11
11
  * `'response'`: das Backend meldete Erfolg, die Nutzlast enthielt aber
12
12
  * nicht, was der Aufruf zusagt.
13
13
  *
14
- * - `KasseneckApiError` — **fachlicher** Fehler. Das Backend antwortet immer
15
- * mit HTTP 200 und legt Erfolg/Misserfolg in den Rumpf
16
- * (`{status:'success'|'error', message, data}`, siehe `successResponse`/
17
- * `errorResponse` im Backend). Ein `status:'error'` heisst: die Anfrage kam
18
- * an und wurde abgelehnt (gesperrte Kasse, fehlendes Modul, ungueltiger
19
- * Parameter). Wiederholen hilft nicht.
14
+ * - `KasseneckApiError`: **fachlicher** Fehler mit `code`. Das Backend legt
15
+ * Erfolg/Misserfolg in den Rumpf (`{status:'success'|'error', message,
16
+ * code, data}`, siehe `successResponse`/`errorResponse` im Backend), meist
17
+ * unter HTTP 200, unter `/v3` bei unbekanntem Endpunkt auch unter HTTP 404
18
+ * (`not_found`). Dazu kommen drei Codes des Pakets selbst:
19
+ * `route_missing` (HTTP 200 mit HTML: die Auffangregel der
20
+ * Single-Page-App hat geantwortet, der Aufruf kam nie an),
21
+ * `dialect_mismatch` (Antwort ohne Kennzeichen `Kasseneck-Api-Version: v3`:
22
+ * ein Rand ohne `/v3` hat geantwortet, **Ausgang unklar**) und
23
+ * `response_unreadable` (ein Aufruf mit Wirkung meldete Erfolg, die
24
+ * Antwort traegt aber nicht, was er zusagt: **Ausgang unklar**).
25
+ * **Entscheidend ist `outcome`:** `'rejected'` heisst abgelehnt, nichts
26
+ * geschehen, Wiederholen hilft nicht. `'unknown'` heisst: der Vorgang kann
27
+ * ausgefuehrt sein (bei `createReceipt` ein signierter Beleg). Dann **nie
28
+ * wiederholen**, sondern das Ergebnis nachlesen (Belegliste, `getReceipt`).
20
29
  * - `KasseneckHttpError` — die Antwort war **keine** verwertbare Huelle:
21
- * HTTP 500/404, leerer Rumpf, oder HTTP 200 mit HTML statt JSON (typisch,
22
- * wenn ein Aufruf mangels Rewrite auf der Single-Page-App landet). Beim
30
+ * HTTP 500/404 ohne Huelle, leerer Rumpf oder Text statt JSON. Beim
23
31
  * Bericht-Download gelten dieselben Gruende fuer alles, was kein PDF ist.
24
- * `reason` trennt die Faelle maschinenlesbar.
32
+ * `reason` trennt die Faelle maschinenlesbar. Auf einem Aufruf mit
33
+ * Wirkung (signierend oder geldbewegend) hat HTTP 5xx
34
+ * `outcome: 'unknown'`, ebenso HTTP 200 mit Kennzeichen, aber leerem oder
35
+ * unlesbarem Rumpf.
25
36
  * - `KasseneckNetworkError` — die Antwort kam gar nicht: Netz weg, DNS,
26
- * abgebrochene Verbindung oder Zeitueberschreitung (`timedOut`).
37
+ * abgebrochene Verbindung oder Zeitueberschreitung (`timedOut`). Auch hier
38
+ * gilt `outcome`: war die Anfrage schon unterwegs und ist der Aufruf einer
39
+ * mit Wirkung (signierend: `createReceipt`, `cancelReceipt`,
40
+ * `financeWebService`; geldbewegend: `hobexPayApi`, `hobexRefundApi`,
41
+ * `stripeCaptureIntent`), ist er `'unknown'`.
27
42
  * - `KasseneckAuthError` — es kam nicht einmal zur Anfrage, weil die Anmeldung
28
43
  * scheiterte (fehlende Zugangsdaten, oder der Token-/Sitzungsgeber warf).
29
44
  * In der Browser-Kasse mit ihrer 90-Sekunden-Sitzung ist das Alltag, kein
30
45
  * Sonderfall.
31
46
  *
47
+ * [isOutcomeUnknown] fasst das fuer jede Fehlerart zusammen.
48
+ *
32
49
  * **Geheimnisse gehoeren in keinen dieser Fehler.** Fehlermeldungen landen in
33
50
  * Protokollen und Fehlerdiensten; weder `api_key`, Kassen-Token, ID-
34
51
  * ID-Token noch Sitzungsbezeichner duerfen dorthin. Deshalb tragen die Fehler
@@ -187,6 +204,34 @@ function feldHinweis(details) {
187
204
  const mehr = teile.length > 5 ? ` (+${teile.length - 5} weitere)` : '';
188
205
  return ` [${teile.slice(0, 5).join('; ')}${mehr}]`;
189
206
  }
207
+ /**
208
+ * Codes, deren Ausgang unklar ist. `response_translation_failed` nur, wenn
209
+ * der Rand nicht ausdruecklich `handled: false` meldet (Handler lief und
210
+ * lehnte ab); `handled: true` oder `null` heisst ausgefuehrt bzw. unbekannt.
211
+ */
212
+ const AUSGANG_UNKLAR_CODES = new Set([
213
+ 'dialect_mismatch',
214
+ 'receipt_outcome_unknown',
215
+ 'cancellation_outcome_unknown',
216
+ 'response_unreadable',
217
+ ]);
218
+ function ausgangAusCode(code, details) {
219
+ if (code === undefined)
220
+ return 'rejected';
221
+ if (AUSGANG_UNKLAR_CODES.has(code))
222
+ return 'unknown';
223
+ if (code === 'response_translation_failed' && details['handled'] !== false)
224
+ return 'unknown';
225
+ return 'rejected';
226
+ }
227
+ /**
228
+ * Codes, die das Paket selbst vergibt, nicht der Server: `route_missing`
229
+ * (HTML statt Backend, der Aufruf kam nie an) und `response_unreadable`
230
+ * (ein Aufruf mit Wirkung meldete Erfolg, die Antwort ist aber unlesbar;
231
+ * Ausgang unklar). `dialect_mismatch` vergibt das Paket ebenfalls, der Code
232
+ * gehoert aber schon zum Rand des Servers (`errorCodes.edge`).
233
+ */
234
+ export const CLIENT_ERROR_CODES = Object.freeze(['route_missing', 'response_unreadable']);
190
235
  export class KasseneckApiError extends Error {
191
236
  name = 'KasseneckApiError';
192
237
  /** Aufgerufene Backend-Funktion, z. B. `createReceipt`. */
@@ -209,6 +254,14 @@ export class KasseneckApiError extends Error {
209
254
  * beilegt. Immer ein Objekt, notfalls ein leeres.
210
255
  */
211
256
  details;
257
+ /**
258
+ * `'unknown'` bei `dialect_mismatch`, `receipt_outcome_unknown`,
259
+ * `cancellation_outcome_unknown`, `response_unreadable` (Erfolg gemeldet,
260
+ * Antwort eines Aufrufs mit Wirkung aber unlesbar) und
261
+ * `response_translation_failed` (ausser mit `details.handled === false`);
262
+ * sonst `'rejected'`. Bei `'unknown'` nie wiederholen, sondern nachlesen.
263
+ */
264
+ outcome;
212
265
  constructor(functionName, serverMessage, details = {}, code) {
213
266
  super(`${functionName} fehlgeschlagen: ${serverMessage}${feldHinweis(details)}`);
214
267
  this.functionName = functionName;
@@ -218,6 +271,7 @@ export class KasseneckApiError extends Error {
218
271
  // den Details. So bleibt die Klasse fuer beide Ablageorte dieselbe.
219
272
  const kandidat = code !== undefined ? code : details['code'];
220
273
  this.code = typeof kandidat === 'string' && BEZEICHNER.test(kandidat) ? kandidat : undefined;
274
+ this.outcome = ausgangAusCode(this.code, details);
221
275
  }
222
276
  }
223
277
  const GRUND_TEXT = {
@@ -226,23 +280,33 @@ const GRUND_TEXT = {
226
280
  'not-json': 'Antwort ist kein JSON',
227
281
  'missing-status': 'Antwort ohne Statusfeld',
228
282
  };
229
- /** Antwort ohne verwertbare Huelle (HTTP-Fehler, leerer Rumpf, HTML statt JSON). */
283
+ /** Antwort ohne verwertbare Huelle (HTTP-Fehler ohne Huelle, leerer Rumpf, Text statt JSON). */
230
284
  export class KasseneckHttpError extends Error {
231
285
  name = 'KasseneckHttpError';
232
286
  functionName;
233
- /** HTTP-Statuscode der Antwort (bei HTML-statt-JSON durchaus 200). */
287
+ /** HTTP-Statuscode der Antwort (bei Text statt JSON durchaus 200). */
234
288
  statusCode;
235
289
  /** Inhaltstyp der Antwort, falls die Gegenstelle einen gesetzt hat. */
236
290
  contentType;
237
291
  /** Maschinenlesbarer Grund — trennt den Rewrite-Fall vom 500er ohne Textparsen. */
238
292
  reason;
239
- constructor(functionName, statusCode, contentType, reason) {
293
+ /**
294
+ * `'unknown'` auf einem Aufruf mit Wirkung (`createReceipt`,
295
+ * `cancelReceipt`, `financeWebService`, `hobexPayApi`, `hobexRefundApi`,
296
+ * `stripeCaptureIntent`) bei HTTP 5xx und bei HTTP 200 mit
297
+ * Kennzeichen, aber unlesbarem Rumpf (`empty-body`, `not-json` auch bei
298
+ * `text/html`, `missing-status`): der Handler kann gelaufen sein, nie wiederholen,
299
+ * sondern nachlesen. Sonst `'rejected'` (auch 4xx).
300
+ */
301
+ outcome;
302
+ constructor(functionName, statusCode, contentType, reason, outcome = 'rejected') {
240
303
  const typHinweis = contentType ? `, Inhaltstyp ${contentType}` : '';
241
304
  super(`${functionName} fehlgeschlagen: ${GRUND_TEXT[reason]} (HTTP ${statusCode}${typHinweis})`);
242
305
  this.functionName = functionName;
243
306
  this.statusCode = statusCode;
244
307
  this.contentType = contentType;
245
308
  this.reason = reason;
309
+ this.outcome = outcome;
246
310
  }
247
311
  }
248
312
  /** Es kam keine Antwort: Netzfehler oder Zeitueberschreitung. */
@@ -257,15 +321,22 @@ export class KasseneckNetworkError extends Error {
257
321
  causeName;
258
322
  /** Code der zugrunde liegenden Ursache, sofern unbedenklich (z. B. `ECONNREFUSED`). */
259
323
  causeCode;
260
- constructor(functionName, timedOut, timeoutMs, ursache = {}) {
324
+ /**
325
+ * `'unknown'`, wenn die Anfrage schon unterwegs war und der Aufruf signiert
326
+ * (`createReceipt`, `cancelReceipt`, `financeWebService`): dann nie
327
+ * wiederholen, sondern nachlesen. Sonst `'rejected'`.
328
+ */
329
+ outcome;
330
+ constructor(functionName, timedOut, timeoutMs, cause = {}, outcome = 'rejected') {
261
331
  const grund = timedOut ? `Zeitueberschreitung nach ${timeoutMs} ms` : 'Netzwerkfehler';
262
- const codeHinweis = ursache.causeCode ? ` (${ursache.causeCode})` : '';
332
+ const codeHinweis = cause.causeCode ? ` (${cause.causeCode})` : '';
263
333
  super(`${functionName} fehlgeschlagen: ${grund}${codeHinweis}`);
264
334
  this.functionName = functionName;
265
335
  this.timedOut = timedOut;
266
336
  this.timeoutMs = timeoutMs;
267
- this.causeName = ursache.causeName;
268
- this.causeCode = ursache.causeCode;
337
+ this.causeName = cause.causeName;
338
+ this.causeCode = cause.causeCode;
339
+ this.outcome = outcome;
269
340
  }
270
341
  }
271
342
  /**
@@ -317,18 +388,49 @@ export class KasseneckValidationError extends Error {
317
388
  this.scope = scope;
318
389
  }
319
390
  }
320
- export function isKasseneckApiError(fehler) {
321
- return fehler instanceof KasseneckApiError;
391
+ /**
392
+ * Ist der Ausgang dieses Fehlers unklar (`outcome === 'unknown'`)? Dann den
393
+ * Aufruf **nicht wiederholen**, sondern das Ergebnis nachlesen. Gilt fuer
394
+ * jede Fehlerart; nur [KasseneckApiError], [KasseneckHttpError] und
395
+ * [KasseneckNetworkError] koennen `'unknown'` sein.
396
+ */
397
+ export function isOutcomeUnknown(error) {
398
+ return ((error instanceof KasseneckApiError || error instanceof KasseneckHttpError || error instanceof KasseneckNetworkError)
399
+ && error.outcome === 'unknown');
400
+ }
401
+ export function isKasseneckApiError(error) {
402
+ return error instanceof KasseneckApiError;
403
+ }
404
+ export function isKasseneckHttpError(error) {
405
+ return error instanceof KasseneckHttpError;
322
406
  }
323
- export function isKasseneckHttpError(fehler) {
324
- return fehler instanceof KasseneckHttpError;
407
+ export function isKasseneckNetworkError(error) {
408
+ return error instanceof KasseneckNetworkError;
325
409
  }
326
- export function isKasseneckNetworkError(fehler) {
327
- return fehler instanceof KasseneckNetworkError;
410
+ export function isKasseneckAuthError(error) {
411
+ return error instanceof KasseneckAuthError;
328
412
  }
329
- export function isKasseneckAuthError(fehler) {
330
- return fehler instanceof KasseneckAuthError;
413
+ export function isKasseneckValidationError(error) {
414
+ return error instanceof KasseneckValidationError;
331
415
  }
332
- export function isKasseneckValidationError(fehler) {
333
- return fehler instanceof KasseneckValidationError;
416
+ /**
417
+ * Liest die Erfolgsantwort eines Aufrufs **mit Wirkung** (signierend oder
418
+ * geldbewegend). Scheitert das Lesen (fehlender Beleg, fehlender Bezug,
419
+ * unbrauchbares Feld oder ein Laufzeitfehler beim Umwandeln), hat der Server
420
+ * trotzdem Erfolg gemeldet: der Beleg ist signiert und im DEP, die Karte
421
+ * belastet bzw. der Einzug gelaufen. Das darf nie als gewoehnlicher Fehler
422
+ * enden, sonst kassiert die Kasse ein zweites Mal. Darum wird daraus
423
+ * `KasseneckApiError` mit Code `response_unreadable` und `outcome: 'unknown'`.
424
+ * Der Grund stammt vom Paket; aus der Antwort selbst wird nichts uebernommen.
425
+ *
426
+ * Paketintern (receipts.ts, payments/); nicht Teil der Paketoberflaeche.
427
+ */
428
+ export function signiertGelesen(functionName, lesen) {
429
+ try {
430
+ return lesen();
431
+ }
432
+ catch (ursache) {
433
+ const grund = ursache instanceof KasseneckValidationError ? ursache.reason : 'Antwort nicht lesbar';
434
+ throw new KasseneckApiError(functionName, `Erfolg gemeldet, Antwort aber unlesbar (${grund}). Der Vorgang kann ausgefuehrt sein: nicht wiederholen, sondern nachlesen.`, {}, 'response_unreadable');
435
+ }
334
436
  }
@@ -0,0 +1,9 @@
1
+ /** Der Code des Fehlers, wenn er in `bekannt` steht; sonst `undefined`. */
2
+ export declare function bekannterCode<C extends string>(error: unknown, bekannt: ReadonlySet<string>): C | undefined;
3
+ /** Ein Feldfehler aus `data.errors[]` einer `validation`-Antwort. */
4
+ export interface Feldfehler {
5
+ field: string;
6
+ message: string;
7
+ }
8
+ /** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
9
+ export declare function feldfehlerVon(error: unknown): Feldfehler[];
@@ -0,0 +1,32 @@
1
+ import { KasseneckApiError } from './errors.js';
2
+ /*
3
+ * Gemeinsame Bausteine der Fehlerhelfer je Teilpfad (Belege, Storno,
4
+ * Zahlungen, Belegmail, Kasse, Anmeldung, Rechnung, Partner). Jeder Teilpfad
5
+ * bietet dieselbe Form: eine Codeliste, `isXErrorCode(wert)`,
6
+ * `xErrorCode(fehler)`, `isXError(fehler, code?)` und die Feldfehler einer
7
+ * `validation`-Antwort. Paketintern, nicht Teil der Oberflaeche.
8
+ */
9
+ /** Der Code des Fehlers, wenn er in `bekannt` steht; sonst `undefined`. */
10
+ export function bekannterCode(error, bekannt) {
11
+ if (!(error instanceof KasseneckApiError))
12
+ return undefined;
13
+ const code = error.code;
14
+ return code !== undefined && bekannt.has(code) ? code : undefined;
15
+ }
16
+ /** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
17
+ export function feldfehlerVon(error) {
18
+ if (!(error instanceof KasseneckApiError))
19
+ return [];
20
+ const roh = error.details['errors'];
21
+ if (!Array.isArray(roh))
22
+ return [];
23
+ const raus = [];
24
+ for (const eintrag of roh) {
25
+ if (eintrag === null || typeof eintrag !== 'object')
26
+ continue;
27
+ const { field, message } = eintrag;
28
+ if (typeof field === 'string' && typeof message === 'string')
29
+ raus.push({ field, message });
30
+ }
31
+ return raus;
32
+ }