@kreiseck/kasseneck-api 0.30.0 → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (717) hide show
  1. package/CHANGELOG.md +433 -0
  2. package/README.de.md +11 -7
  3. package/README.md +486 -126
  4. package/dist/cjs/client/api.d.ts +7 -6
  5. package/dist/cjs/client/api.js +2 -2
  6. package/dist/cjs/client/aufrufe.d.ts +29 -5
  7. package/dist/cjs/client/aufrufe.js +114 -2
  8. package/dist/cjs/client/auth.d.ts +2 -0
  9. package/dist/cjs/client/auth.js +17 -1
  10. package/dist/cjs/client/cashregisters.d.ts +1 -1
  11. package/dist/cjs/client/cashregisters.js +2 -2
  12. package/dist/cjs/client/errors.d.ts +78 -19
  13. package/dist/cjs/client/errors.js +107 -28
  14. package/dist/cjs/client/fehlercodes.d.ts +9 -0
  15. package/dist/cjs/client/fehlercodes.js +36 -0
  16. package/dist/cjs/client/index.d.ts +5 -5
  17. package/dist/cjs/client/index.js +11 -3
  18. package/dist/cjs/client/receipts.d.ts +131 -124
  19. package/dist/cjs/client/receipts.js +214 -137
  20. package/dist/cjs/client/reports.d.ts +26 -4
  21. package/dist/cjs/client/reports.js +37 -4
  22. package/dist/cjs/client/status.d.ts +3 -3
  23. package/dist/cjs/client/status.js +7 -7
  24. package/dist/cjs/client/transport.d.ts +56 -4
  25. package/dist/cjs/client/transport.js +222 -25
  26. package/dist/cjs/enums/vat-rate.d.ts +2 -2
  27. package/dist/cjs/enums/vat-rate.js +1 -1
  28. package/dist/cjs/index.d.ts +4 -3
  29. package/dist/cjs/index.js +42 -13
  30. package/dist/{esm/rechnung → cjs/invoice}/api.d.ts +18 -17
  31. package/dist/cjs/{rechnung → invoice}/api.js +6 -6
  32. package/dist/{esm/rechnung → cjs/invoice}/auth.d.ts +2 -2
  33. package/dist/cjs/{rechnung → invoice}/auth.js +5 -5
  34. package/dist/{esm/rechnung/rechnen.d.ts → cjs/invoice/calc.d.ts} +27 -27
  35. package/dist/cjs/{rechnung/rechnen.js → invoice/calc.js} +54 -54
  36. package/dist/{esm/rechnung → cjs/invoice}/endpunkte.d.ts +23 -21
  37. package/dist/cjs/{rechnung → invoice}/endpunkte.js +52 -42
  38. package/dist/cjs/invoice/fehler.d.ts +31 -0
  39. package/dist/cjs/invoice/fehler.js +39 -0
  40. package/dist/cjs/invoice/index.d.ts +21 -0
  41. package/dist/cjs/invoice/index.js +86 -0
  42. package/dist/cjs/{rechnung → invoice}/summen.d.ts +12 -12
  43. package/dist/cjs/{rechnung → invoice}/summen.js +14 -14
  44. package/dist/cjs/invoice/texte.d.ts +224 -0
  45. package/dist/cjs/invoice/texte.js +425 -0
  46. package/dist/{esm/rechnung → cjs/invoice}/typen.d.ts +32 -11
  47. package/dist/{esm/rechnung → cjs/invoice}/vertrag.d.ts +97 -71
  48. package/dist/cjs/{rechnung → invoice}/vertrag.js +144 -82
  49. package/dist/cjs/models/cancellation.d.ts +53 -21
  50. package/dist/cjs/models/cancellation.js +94 -42
  51. package/dist/cjs/models/hobex-receipt.d.ts +3 -3
  52. package/dist/cjs/models/hobex-receipt.js +35 -35
  53. package/dist/cjs/models/index.d.ts +6 -5
  54. package/dist/cjs/models/index.js +22 -2
  55. package/dist/cjs/models/payment-errors.d.ts +32 -15
  56. package/dist/cjs/models/payment-errors.js +80 -32
  57. package/dist/cjs/models/receipt-company.d.ts +6 -5
  58. package/dist/cjs/models/receipt-company.js +4 -4
  59. package/dist/cjs/models/receipt-email.d.ts +32 -18
  60. package/dist/cjs/models/receipt-email.js +69 -24
  61. package/dist/cjs/models/receipt-errors.d.ts +39 -0
  62. package/dist/cjs/models/receipt-errors.js +94 -0
  63. package/dist/cjs/models/receipt-item.d.ts +9 -1
  64. package/dist/cjs/models/receipt-item.js +3 -0
  65. package/dist/cjs/models/receipt-payment.d.ts +2 -1
  66. package/dist/cjs/models/receipt-summary.d.ts +10 -4
  67. package/dist/cjs/models/receipt-summary.js +10 -4
  68. package/dist/cjs/models/receipt.d.ts +31 -2
  69. package/dist/cjs/models/receipt.js +28 -1
  70. package/dist/cjs/models/voucher.d.ts +7 -6
  71. package/dist/cjs/models/voucher.js +2 -7
  72. package/dist/cjs/partner/ablauf.d.ts +10 -10
  73. package/dist/cjs/partner/ablauf.js +29 -29
  74. package/dist/cjs/partner/api.d.ts +26 -23
  75. package/dist/cjs/partner/api.js +11 -13
  76. package/dist/cjs/partner/auth.d.ts +1 -1
  77. package/dist/cjs/partner/auth.js +2 -2
  78. package/dist/cjs/partner/betrieb.d.ts +7 -7
  79. package/dist/cjs/partner/betrieb.js +10 -10
  80. package/dist/cjs/partner/endpunkte.d.ts +27 -14
  81. package/dist/cjs/partner/endpunkte.js +80 -39
  82. package/dist/cjs/partner/fehler.d.ts +60 -30
  83. package/dist/cjs/partner/fehler.js +99 -43
  84. package/dist/cjs/partner/index.d.ts +13 -12
  85. package/dist/cjs/partner/index.js +35 -22
  86. package/dist/cjs/partner/secret.d.ts +3 -3
  87. package/dist/cjs/partner/secret.js +6 -6
  88. package/dist/cjs/partner/typen.d.ts +129 -71
  89. package/dist/cjs/partner/typen.js +76 -3
  90. package/dist/cjs/partner/webhook-signatur.d.ts +2 -2
  91. package/dist/cjs/partner/webhook-signatur.js +12 -12
  92. package/dist/cjs/partner/webhooks.d.ts +60 -32
  93. package/dist/cjs/partner/webhooks.js +40 -34
  94. package/dist/cjs/payments/hobex-hps/transaction-response.js +28 -28
  95. package/dist/cjs/payments/hobex.d.ts +2 -2
  96. package/dist/cjs/payments/hobex.js +4 -4
  97. package/dist/cjs/payments/stripe.d.ts +2 -2
  98. package/dist/cjs/payments/stripe.js +4 -4
  99. package/dist/cjs/pos/artikel.d.ts +90 -0
  100. package/dist/cjs/pos/artikel.js +89 -0
  101. package/dist/cjs/pos/client.d.ts +27 -0
  102. package/dist/cjs/pos/client.js +144 -0
  103. package/dist/cjs/pos/drucker.d.ts +86 -0
  104. package/dist/cjs/pos/drucker.js +78 -0
  105. package/dist/cjs/pos/errors.d.ts +36 -0
  106. package/dist/cjs/pos/errors.js +95 -0
  107. package/dist/cjs/pos/index.d.ts +15 -0
  108. package/dist/cjs/pos/index.js +102 -0
  109. package/dist/cjs/pos/settings.d.ts +313 -0
  110. package/dist/cjs/pos/settings.js +376 -0
  111. package/dist/cjs/pos/texte.d.ts +883 -0
  112. package/dist/cjs/pos/texte.js +489 -0
  113. package/dist/cjs/{kasse → pos}/trinkgeld.d.ts +1 -1
  114. package/dist/cjs/{kasse → pos}/trinkgeld.js +2 -2
  115. package/dist/cjs/printing/escpos.d.ts +29 -29
  116. package/dist/cjs/printing/escpos.js +61 -61
  117. package/dist/cjs/printing/index.d.ts +2 -2
  118. package/dist/cjs/printing/index.js +17 -17
  119. package/dist/cjs/printing/qr-groesse.d.ts +38 -38
  120. package/dist/cjs/printing/qr-groesse.js +47 -47
  121. package/dist/cjs/printing/webusb.d.ts +2 -2
  122. package/dist/cjs/printing/webusb.js +4 -4
  123. package/dist/cjs/react/index.d.ts +21 -21
  124. package/dist/cjs/react/index.js +40 -30
  125. package/dist/cjs/receipt/bild.d.ts +4 -4
  126. package/dist/cjs/receipt/bild.js +11 -11
  127. package/dist/cjs/receipt/blatt.d.ts +46 -46
  128. package/dist/cjs/receipt/blatt.js +59 -59
  129. package/dist/cjs/receipt/discount.d.ts +1 -1
  130. package/dist/cjs/receipt/discount.js +8 -8
  131. package/dist/cjs/receipt/due.d.ts +86 -0
  132. package/dist/cjs/receipt/due.js +261 -0
  133. package/dist/cjs/receipt/epos.d.ts +22 -22
  134. package/dist/cjs/receipt/epos.js +45 -45
  135. package/dist/cjs/receipt/grid.d.ts +10 -10
  136. package/dist/cjs/receipt/grid.js +20 -20
  137. package/dist/cjs/receipt/index.d.ts +9 -8
  138. package/dist/cjs/receipt/index.js +26 -23
  139. package/dist/cjs/receipt/layout-escpos.d.ts +24 -24
  140. package/dist/cjs/receipt/layout-escpos.js +49 -49
  141. package/dist/cjs/receipt/layout.d.ts +28 -23
  142. package/dist/cjs/receipt/layout.js +45 -21
  143. package/dist/cjs/receipt/marke-daten.d.ts +8 -8
  144. package/dist/cjs/receipt/marke-daten.js +8 -8
  145. package/dist/cjs/receipt/marke.d.ts +7 -7
  146. package/dist/cjs/receipt/marke.js +10 -10
  147. package/dist/cjs/register/errors.d.ts +61 -0
  148. package/dist/cjs/register/errors.js +112 -0
  149. package/dist/cjs/register/index.d.ts +14 -1
  150. package/dist/cjs/register/index.js +20 -1
  151. package/dist/cjs/register/pairing.d.ts +55 -36
  152. package/dist/cjs/register/pairing.js +33 -29
  153. package/dist/cjs/register/session.d.ts +5 -5
  154. package/dist/cjs/register/session.js +7 -7
  155. package/dist/cjs/stored/draht.d.ts +45 -0
  156. package/dist/cjs/stored/draht.js +220 -0
  157. package/dist/cjs/stored/einstellungen.d.ts +23 -0
  158. package/dist/cjs/stored/einstellungen.js +200 -0
  159. package/dist/cjs/stored/index.d.ts +109 -0
  160. package/dist/cjs/stored/index.js +225 -0
  161. package/dist/cjs/stored/vokabular.d.ts +18 -0
  162. package/dist/cjs/stored/vokabular.js +389 -0
  163. package/dist/cjs/version.d.ts +7 -0
  164. package/dist/cjs/version.js +10 -0
  165. package/dist/cjs/vienna-time.d.ts +1 -1
  166. package/dist/cjs/vienna-time.js +2 -2
  167. package/dist/esm/client/api.d.ts +7 -6
  168. package/dist/esm/client/api.js +4 -4
  169. package/dist/esm/client/aufrufe.d.ts +29 -5
  170. package/dist/esm/client/aufrufe.js +111 -1
  171. package/dist/esm/client/auth.d.ts +2 -0
  172. package/dist/esm/client/auth.js +16 -1
  173. package/dist/esm/client/cashregisters.d.ts +1 -1
  174. package/dist/esm/client/cashregisters.js +2 -2
  175. package/dist/esm/client/errors.d.ts +78 -19
  176. package/dist/esm/client/errors.js +105 -27
  177. package/dist/esm/client/fehlercodes.d.ts +9 -0
  178. package/dist/esm/client/fehlercodes.js +32 -0
  179. package/dist/esm/client/index.d.ts +5 -5
  180. package/dist/esm/client/index.js +5 -5
  181. package/dist/esm/client/receipts.d.ts +131 -124
  182. package/dist/esm/client/receipts.js +213 -140
  183. package/dist/esm/client/reports.d.ts +26 -4
  184. package/dist/esm/client/reports.js +36 -4
  185. package/dist/esm/client/status.d.ts +3 -3
  186. package/dist/esm/client/status.js +7 -7
  187. package/dist/esm/client/transport.d.ts +56 -4
  188. package/dist/esm/client/transport.js +221 -24
  189. package/dist/esm/enums/vat-rate.d.ts +2 -2
  190. package/dist/esm/enums/vat-rate.js +1 -1
  191. package/dist/esm/index.d.ts +4 -3
  192. package/dist/esm/index.js +4 -3
  193. package/dist/{cjs/rechnung → esm/invoice}/api.d.ts +18 -17
  194. package/dist/esm/{rechnung → invoice}/api.js +6 -6
  195. package/dist/{cjs/rechnung → esm/invoice}/auth.d.ts +2 -2
  196. package/dist/esm/{rechnung → invoice}/auth.js +4 -4
  197. package/dist/{cjs/rechnung/rechnen.d.ts → esm/invoice/calc.d.ts} +27 -27
  198. package/dist/esm/{rechnung/rechnen.js → invoice/calc.js} +45 -45
  199. package/dist/{cjs/rechnung → esm/invoice}/endpunkte.d.ts +23 -21
  200. package/dist/esm/{rechnung → invoice}/endpunkte.js +52 -42
  201. package/dist/esm/invoice/fehler.d.ts +31 -0
  202. package/dist/esm/invoice/fehler.js +33 -0
  203. package/dist/esm/invoice/index.d.ts +21 -0
  204. package/dist/esm/invoice/index.js +20 -0
  205. package/dist/esm/{rechnung → invoice}/summen.d.ts +12 -12
  206. package/dist/esm/{rechnung → invoice}/summen.js +12 -12
  207. package/dist/esm/invoice/texte.d.ts +224 -0
  208. package/dist/esm/invoice/texte.js +421 -0
  209. package/dist/{cjs/rechnung → esm/invoice}/typen.d.ts +32 -11
  210. package/dist/{cjs/rechnung → esm/invoice}/vertrag.d.ts +97 -71
  211. package/dist/esm/{rechnung → invoice}/vertrag.js +143 -81
  212. package/dist/esm/models/cancellation.d.ts +53 -21
  213. package/dist/esm/models/cancellation.js +90 -41
  214. package/dist/esm/models/hobex-receipt.d.ts +3 -3
  215. package/dist/esm/models/hobex-receipt.js +35 -35
  216. package/dist/esm/models/index.d.ts +6 -5
  217. package/dist/esm/models/index.js +6 -5
  218. package/dist/esm/models/payment-errors.d.ts +32 -15
  219. package/dist/esm/models/payment-errors.js +77 -32
  220. package/dist/esm/models/receipt-company.d.ts +6 -5
  221. package/dist/esm/models/receipt-company.js +4 -4
  222. package/dist/esm/models/receipt-email.d.ts +32 -18
  223. package/dist/esm/models/receipt-email.js +65 -23
  224. package/dist/esm/models/receipt-errors.d.ts +39 -0
  225. package/dist/esm/models/receipt-errors.js +87 -0
  226. package/dist/esm/models/receipt-item.d.ts +9 -1
  227. package/dist/esm/models/receipt-item.js +3 -0
  228. package/dist/esm/models/receipt-payment.d.ts +2 -1
  229. package/dist/esm/models/receipt-summary.d.ts +10 -4
  230. package/dist/esm/models/receipt-summary.js +9 -3
  231. package/dist/esm/models/receipt.d.ts +31 -2
  232. package/dist/esm/models/receipt.js +28 -2
  233. package/dist/esm/models/voucher.d.ts +7 -6
  234. package/dist/esm/models/voucher.js +2 -7
  235. package/dist/esm/partner/ablauf.d.ts +10 -10
  236. package/dist/esm/partner/ablauf.js +27 -27
  237. package/dist/esm/partner/api.d.ts +26 -23
  238. package/dist/esm/partner/api.js +13 -15
  239. package/dist/esm/partner/auth.d.ts +1 -1
  240. package/dist/esm/partner/auth.js +2 -2
  241. package/dist/esm/partner/betrieb.d.ts +7 -7
  242. package/dist/esm/partner/betrieb.js +8 -8
  243. package/dist/esm/partner/endpunkte.d.ts +27 -14
  244. package/dist/esm/partner/endpunkte.js +79 -39
  245. package/dist/esm/partner/fehler.d.ts +60 -30
  246. package/dist/esm/partner/fehler.js +91 -35
  247. package/dist/esm/partner/index.d.ts +13 -12
  248. package/dist/esm/partner/index.js +12 -11
  249. package/dist/esm/partner/secret.d.ts +3 -3
  250. package/dist/esm/partner/secret.js +5 -5
  251. package/dist/esm/partner/typen.d.ts +129 -71
  252. package/dist/esm/partner/typen.js +75 -2
  253. package/dist/esm/partner/webhook-signatur.d.ts +2 -2
  254. package/dist/esm/partner/webhook-signatur.js +12 -12
  255. package/dist/esm/partner/webhooks.d.ts +60 -32
  256. package/dist/esm/partner/webhooks.js +38 -32
  257. package/dist/esm/payments/hobex-hps/transaction-response.js +28 -28
  258. package/dist/esm/payments/hobex.d.ts +2 -2
  259. package/dist/esm/payments/hobex.js +4 -4
  260. package/dist/esm/payments/stripe.d.ts +2 -2
  261. package/dist/esm/payments/stripe.js +4 -4
  262. package/dist/esm/pos/artikel.d.ts +90 -0
  263. package/dist/esm/pos/artikel.js +79 -0
  264. package/dist/esm/pos/client.d.ts +27 -0
  265. package/dist/esm/pos/client.js +137 -0
  266. package/dist/esm/pos/drucker.d.ts +86 -0
  267. package/dist/esm/pos/drucker.js +71 -0
  268. package/dist/esm/pos/errors.d.ts +36 -0
  269. package/dist/esm/pos/errors.js +88 -0
  270. package/dist/esm/pos/index.d.ts +15 -0
  271. package/dist/esm/pos/index.js +20 -0
  272. package/dist/esm/pos/settings.d.ts +313 -0
  273. package/dist/esm/pos/settings.js +367 -0
  274. package/dist/esm/pos/texte.d.ts +883 -0
  275. package/dist/esm/pos/texte.js +481 -0
  276. package/dist/esm/{kasse → pos}/trinkgeld.d.ts +1 -1
  277. package/dist/esm/{kasse → pos}/trinkgeld.js +2 -2
  278. package/dist/esm/printing/escpos.d.ts +29 -29
  279. package/dist/esm/printing/escpos.js +56 -56
  280. package/dist/esm/printing/index.d.ts +2 -2
  281. package/dist/esm/printing/index.js +2 -2
  282. package/dist/esm/printing/qr-groesse.d.ts +38 -38
  283. package/dist/esm/printing/qr-groesse.js +42 -42
  284. package/dist/esm/printing/webusb.d.ts +2 -2
  285. package/dist/esm/printing/webusb.js +4 -4
  286. package/dist/esm/react/index.d.ts +21 -21
  287. package/dist/esm/react/index.js +39 -29
  288. package/dist/esm/receipt/bild.d.ts +4 -4
  289. package/dist/esm/receipt/bild.js +11 -11
  290. package/dist/esm/receipt/blatt.d.ts +46 -46
  291. package/dist/esm/receipt/blatt.js +55 -55
  292. package/dist/esm/receipt/discount.d.ts +1 -1
  293. package/dist/esm/receipt/discount.js +7 -7
  294. package/dist/esm/receipt/due.d.ts +86 -0
  295. package/dist/esm/receipt/due.js +257 -0
  296. package/dist/esm/receipt/epos.d.ts +22 -22
  297. package/dist/esm/receipt/epos.js +47 -47
  298. package/dist/esm/receipt/grid.d.ts +10 -10
  299. package/dist/esm/receipt/grid.js +18 -18
  300. package/dist/esm/receipt/index.d.ts +9 -8
  301. package/dist/esm/receipt/index.js +9 -8
  302. package/dist/esm/receipt/layout-escpos.d.ts +24 -24
  303. package/dist/esm/receipt/layout-escpos.js +51 -51
  304. package/dist/esm/receipt/layout.d.ts +28 -23
  305. package/dist/esm/receipt/layout.js +44 -20
  306. package/dist/esm/receipt/marke-daten.d.ts +8 -8
  307. package/dist/esm/receipt/marke-daten.js +7 -7
  308. package/dist/esm/receipt/marke.d.ts +7 -7
  309. package/dist/esm/receipt/marke.js +10 -10
  310. package/dist/esm/register/errors.d.ts +61 -0
  311. package/dist/esm/register/errors.js +104 -0
  312. package/dist/esm/register/index.d.ts +14 -1
  313. package/dist/esm/register/index.js +13 -0
  314. package/dist/esm/register/pairing.d.ts +55 -36
  315. package/dist/esm/register/pairing.js +33 -29
  316. package/dist/esm/register/session.d.ts +5 -5
  317. package/dist/esm/register/session.js +7 -7
  318. package/dist/esm/stored/draht.d.ts +45 -0
  319. package/dist/esm/stored/draht.js +208 -0
  320. package/dist/esm/stored/einstellungen.d.ts +23 -0
  321. package/dist/esm/stored/einstellungen.js +196 -0
  322. package/dist/esm/stored/index.d.ts +109 -0
  323. package/dist/esm/stored/index.js +217 -0
  324. package/dist/esm/stored/vokabular.d.ts +18 -0
  325. package/dist/esm/stored/vokabular.js +386 -0
  326. package/dist/esm/version.d.ts +7 -0
  327. package/dist/esm/version.js +7 -0
  328. package/dist/esm/vienna-time.d.ts +1 -1
  329. package/dist/esm/vienna-time.js +2 -2
  330. package/fixtures/{erwartet/storno-rabatt.lines.json → expected/cancellation-discount.lines.json} +2 -2
  331. package/fixtures/expected/cancellation-discount.sheet32.json +248 -0
  332. package/fixtures/{erwartet/storno-rabatt.blatt48.json → expected/cancellation-discount.sheet48.json} +119 -119
  333. package/fixtures/{erwartet/storno-voll.lines.json → expected/cancellation-full.lines.json} +2 -2
  334. package/fixtures/expected/cancellation-full.sheet32.json +218 -0
  335. package/fixtures/{erwartet/storno-voll.blatt48.json → expected/cancellation-full.sheet48.json} +107 -107
  336. package/fixtures/{erwartet/storno-teil.lines.json → expected/cancellation-partial.lines.json} +2 -2
  337. package/fixtures/expected/cancellation-partial.sheet32.json +206 -0
  338. package/fixtures/{erwartet/storno-teil.blatt48.json → expected/cancellation-partial.sheet48.json} +101 -101
  339. package/fixtures/{erwartet/storno-split-voll.lines.json → expected/cancellation-split-full.lines.json} +2 -2
  340. package/fixtures/expected/cancellation-split-full.sheet32.json +320 -0
  341. package/fixtures/{erwartet/storno-split-voll.blatt48.json → expected/cancellation-split-full.sheet48.json} +158 -158
  342. package/fixtures/{erwartet/storno-split-teil.lines.json → expected/cancellation-split-partial.lines.json} +2 -2
  343. package/fixtures/expected/cancellation-split-partial.sheet32.json +230 -0
  344. package/fixtures/{erwartet/storno-split-teil.blatt48.json → expected/cancellation-split-partial.sheet48.json} +113 -113
  345. package/fixtures/{erwartet/karte-eigener.lines.json → expected/card-custom.lines.json} +1 -1
  346. package/fixtures/expected/card-custom.sheet32.json +158 -0
  347. package/fixtures/{erwartet/karte-eigener.blatt48.json → expected/card-custom.sheet48.json} +80 -80
  348. package/fixtures/{erwartet/karte-gptom-ios.lines.json → expected/card-gptom-ios.lines.json} +1 -1
  349. package/fixtures/expected/card-gptom-ios.sheet32.json +230 -0
  350. package/fixtures/{erwartet/karte-gptom-ios.blatt48.json → expected/card-gptom-ios.sheet48.json} +116 -116
  351. package/fixtures/{erwartet/karte-gptom.lines.json → expected/card-gptom.lines.json} +1 -1
  352. package/fixtures/expected/card-gptom.sheet32.json +230 -0
  353. package/fixtures/{erwartet/karte-gptom.blatt48.json → expected/card-gptom.sheet48.json} +116 -116
  354. package/fixtures/{erwartet/karte-hobex-cloud.lines.json → expected/card-hobex-cloud.lines.json} +1 -1
  355. package/fixtures/expected/card-hobex-cloud.sheet32.json +200 -0
  356. package/fixtures/{erwartet/karte-hobex-cloud.blatt48.json → expected/card-hobex-cloud.sheet48.json} +101 -101
  357. package/fixtures/{erwartet/karte-hobex-hps.lines.json → expected/card-hobex-hps.lines.json} +1 -1
  358. package/fixtures/expected/card-hobex-hps.sheet32.json +224 -0
  359. package/fixtures/{erwartet/karte-hobex-hps.blatt48.json → expected/card-hobex-hps.sheet48.json} +113 -113
  360. package/fixtures/{erwartet/karte-mypos.lines.json → expected/card-mypos.lines.json} +1 -1
  361. package/fixtures/expected/card-mypos.sheet32.json +254 -0
  362. package/fixtures/{erwartet/karte-mypos.blatt48.json → expected/card-mypos.sheet48.json} +122 -122
  363. package/fixtures/{erwartet/karte-stripe-eps.lines.json → expected/card-stripe-eps.lines.json} +1 -1
  364. package/fixtures/expected/card-stripe-eps.sheet32.json +194 -0
  365. package/fixtures/{erwartet/karte-stripe-eps.blatt48.json → expected/card-stripe-eps.sheet48.json} +98 -98
  366. package/fixtures/{erwartet/karte-stripe.lines.json → expected/card-stripe.lines.json} +1 -1
  367. package/fixtures/expected/card-stripe.sheet32.json +212 -0
  368. package/fixtures/{erwartet/karte-stripe.blatt48.json → expected/card-stripe.sheet48.json} +107 -107
  369. package/fixtures/{erwartet/karte-sumup.lines.json → expected/card-sumup.lines.json} +1 -1
  370. package/fixtures/expected/card-sumup.sheet32.json +218 -0
  371. package/fixtures/{erwartet/karte-sumup.blatt48.json → expected/card-sumup.sheet48.json} +104 -104
  372. package/fixtures/{erwartet/rabattzeilen.lines.json → expected/discount-lines.lines.json} +1 -1
  373. package/fixtures/expected/discount-lines.sheet32.json +200 -0
  374. package/fixtures/{erwartet/rabattzeilen.blatt48.json → expected/discount-lines.sheet48.json} +98 -98
  375. package/fixtures/{erwartet/rabatt-chef-trinkgeld.lines.json → expected/discount-owner-tip.lines.json} +1 -1
  376. package/fixtures/expected/discount-owner-tip.sheet32.json +212 -0
  377. package/fixtures/{erwartet/rabatt-chef-trinkgeld.blatt48.json → expected/discount-owner-tip.sheet48.json} +104 -104
  378. package/fixtures/{erwartet/rabatt-einfach.lines.json → expected/discount-simple.lines.json} +1 -1
  379. package/fixtures/expected/discount-simple.sheet32.json +182 -0
  380. package/fixtures/{erwartet/rabatt-einfach.blatt48.json → expected/discount-simple.sheet48.json} +89 -89
  381. package/fixtures/{erwartet/rabatt-trinkgeld.lines.json → expected/discount-tip.lines.json} +1 -1
  382. package/fixtures/expected/discount-tip.sheet32.json +212 -0
  383. package/fixtures/{erwartet/rabatt-trinkgeld.blatt48.json → expected/discount-tip.sheet48.json} +104 -104
  384. package/fixtures/{erwartet/rabatt-wertgutschein.lines.json → expected/discount-value-voucher.lines.json} +1 -1
  385. package/fixtures/expected/discount-value-voucher.sheet32.json +218 -0
  386. package/fixtures/{erwartet/rabatt-wertgutschein.blatt48.json → expected/discount-value-voucher.sheet48.json} +107 -107
  387. package/fixtures/{erwartet/langer-artikelname.lines.json → expected/long-item-name.lines.json} +1 -1
  388. package/fixtures/expected/long-item-name.sheet32.json +176 -0
  389. package/fixtures/{erwartet/langer-artikelname.blatt48.json → expected/long-item-name.sheet48.json} +86 -86
  390. package/fixtures/{erwartet/verkauf-karte.lines.json → expected/sale-card.lines.json} +1 -1
  391. package/fixtures/expected/sale-card.sheet32.json +176 -0
  392. package/fixtures/{erwartet/verkauf-karte.blatt48.json → expected/sale-card.sheet48.json} +86 -86
  393. package/fixtures/{erwartet/verkauf-bar.lines.json → expected/sale-cash.lines.json} +1 -1
  394. package/fixtures/expected/sale-cash.sheet32.json +176 -0
  395. package/fixtures/{erwartet/verkauf-bar.blatt48.json → expected/sale-cash.sheet48.json} +86 -86
  396. package/fixtures/{erwartet/verkauf-kleinunternehmer.lines.json → expected/sale-small-business.lines.json} +1 -1
  397. package/fixtures/expected/sale-small-business.sheet32.json +182 -0
  398. package/fixtures/{erwartet/verkauf-kleinunternehmer.blatt48.json → expected/sale-small-business.sheet48.json} +89 -89
  399. package/fixtures/{erwartet/signaturausfall-verkauf.lines.json → expected/signature-outage-sale.lines.json} +1 -1
  400. package/fixtures/expected/signature-outage-sale.sheet32.json +194 -0
  401. package/fixtures/{erwartet/signaturausfall-verkauf.blatt48.json → expected/signature-outage-sale.sheet48.json} +92 -92
  402. package/fixtures/{erwartet/split-karte-karte-bar.lines.json → expected/split-card-card-cash.lines.json} +1 -1
  403. package/fixtures/expected/split-card-card-cash.sheet32.json +356 -0
  404. package/fixtures/{erwartet/split-karte-karte-bar.blatt48.json → expected/split-card-card-cash.sheet48.json} +170 -170
  405. package/fixtures/{erwartet/split-bar-rueckgeld.lines.json → expected/split-cash-change.lines.json} +1 -1
  406. package/fixtures/expected/split-cash-change.sheet32.json +194 -0
  407. package/fixtures/{erwartet/split-bar-rueckgeld.blatt48.json → expected/split-cash-change.sheet48.json} +92 -92
  408. package/fixtures/{erwartet/split-langer-betrag.lines.json → expected/split-long-amount.lines.json} +1 -1
  409. package/fixtures/expected/split-long-amount.sheet32.json +266 -0
  410. package/fixtures/{erwartet/split-langer-betrag.blatt48.json → expected/split-long-amount.sheet48.json} +131 -131
  411. package/fixtures/{erwartet/split-eine-karte-trinkgeld.lines.json → expected/split-one-card-tip.lines.json} +1 -1
  412. package/fixtures/expected/split-one-card-tip.sheet32.json +242 -0
  413. package/fixtures/{erwartet/split-eine-karte-trinkgeld.blatt48.json → expected/split-one-card-tip.sheet48.json} +113 -113
  414. package/fixtures/{erwartet/split-tischrunde-trinkgeld.lines.json → expected/split-table-round-tip.lines.json} +1 -1
  415. package/fixtures/expected/split-table-round-tip.sheet32.json +470 -0
  416. package/fixtures/{erwartet/split-tischrunde-trinkgeld.blatt48.json → expected/split-table-round-tip.sheet48.json} +218 -218
  417. package/fixtures/{erwartet/split-trinkgeld-karte.lines.json → expected/split-tip-card.lines.json} +1 -1
  418. package/fixtures/expected/split-tip-card.sheet32.json +272 -0
  419. package/fixtures/{erwartet/split-trinkgeld-karte.blatt48.json → expected/split-tip-card.sheet48.json} +128 -128
  420. package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.lines.json → expected/split-two-cards-same-provider.lines.json} +1 -1
  421. package/fixtures/expected/split-two-cards-same-provider.sheet32.json +326 -0
  422. package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.blatt48.json → expected/split-two-cards-same-provider.sheet48.json} +149 -149
  423. package/fixtures/{erwartet/testkasse-verkauf.lines.json → expected/test-cashregister-sale.lines.json} +3 -3
  424. package/fixtures/expected/test-cashregister-sale.sheet32.json +224 -0
  425. package/fixtures/{erwartet/testkasse-verkauf.blatt48.json → expected/test-cashregister-sale.sheet48.json} +110 -110
  426. package/fixtures/{erwartet/testsignatur-verkauf.lines.json → expected/test-signature-sale.lines.json} +3 -3
  427. package/fixtures/expected/test-signature-sale.sheet32.json +236 -0
  428. package/fixtures/{erwartet/testsignatur-verkauf.blatt48.json → expected/test-signature-sale.sheet48.json} +110 -110
  429. package/fixtures/{erwartet → expected}/training.lines.json +2 -2
  430. package/fixtures/expected/training.sheet32.json +236 -0
  431. package/fixtures/{erwartet/training.blatt48.json → expected/training.sheet48.json} +110 -110
  432. package/fixtures/{erwartet/null-jahr.lines.json → expected/zero-annual.lines.json} +2 -2
  433. package/fixtures/expected/zero-annual.sheet32.json +212 -0
  434. package/fixtures/{erwartet/null-jahr.blatt48.json → expected/zero-annual.sheet48.json} +95 -95
  435. package/fixtures/{erwartet/null-schluss.lines.json → expected/zero-final.lines.json} +2 -2
  436. package/fixtures/expected/zero-final.sheet32.json +206 -0
  437. package/fixtures/{erwartet/null-schluss.blatt48.json → expected/zero-final.sheet48.json} +95 -95
  438. package/fixtures/{erwartet/null-pruef.lines.json → expected/zero-manual.lines.json} +2 -2
  439. package/fixtures/expected/zero-manual.sheet32.json +206 -0
  440. package/fixtures/{erwartet/null-pruef.blatt48.json → expected/zero-manual.sheet48.json} +95 -95
  441. package/fixtures/{erwartet/null-monat.lines.json → expected/zero-monthly.lines.json} +2 -2
  442. package/fixtures/expected/zero-monthly.sheet32.json +206 -0
  443. package/fixtures/{erwartet/null-monat.blatt48.json → expected/zero-monthly.sheet48.json} +95 -95
  444. package/fixtures/{erwartet/null-ausfall.lines.json → expected/zero-outage-end.lines.json} +2 -2
  445. package/fixtures/expected/zero-outage-end.sheet32.json +206 -0
  446. package/fixtures/{erwartet/null-ausfall.blatt48.json → expected/zero-outage-end.sheet48.json} +95 -95
  447. package/fixtures/{erwartet/null-start.lines.json → expected/zero-start.lines.json} +2 -2
  448. package/fixtures/expected/zero-start.sheet32.json +206 -0
  449. package/fixtures/{erwartet/null-start.blatt48.json → expected/zero-start.sheet48.json} +95 -95
  450. package/fixtures/hobex-hps-codes.json +40 -40
  451. package/fixtures/invoice-api-examples/brands-ok.json +8 -0
  452. package/fixtures/{rechnung-api-beispiele/credit-fehler-grund.json → invoice-api-examples/credit-error-reason.json} +6 -6
  453. package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/credit-ok.json +6 -6
  454. package/fixtures/{rechnung-api-beispiele/customer-fehler-uid.json → invoice-api-examples/customer-error-vat-id.json} +4 -4
  455. package/fixtures/invoice-api-examples/customer-get-error-both.json +15 -0
  456. package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/customer-ok.json +4 -4
  457. package/fixtures/{rechnung-api-beispiele/customer-search-fehler-leer.json → invoice-api-examples/customer-search-error-empty.json} +4 -4
  458. package/fixtures/{rechnung-api-beispiele/issue-rabatt.json → invoice-api-examples/issue-discount.json} +6 -6
  459. package/fixtures/{rechnung-api-beispiele/issue-englisch.json → invoice-api-examples/issue-english.json} +7 -7
  460. package/fixtures/{rechnung-api-beispiele/issue-fehler-cent.json → invoice-api-examples/issue-error-cent.json} +6 -6
  461. package/fixtures/{rechnung-api-beispiele/issue-fehler-sprache.json → invoice-api-examples/issue-error-language.json} +5 -5
  462. package/fixtures/{rechnung-api-beispiele/issue-fehler-negativ.json → invoice-api-examples/issue-error-negative.json} +6 -6
  463. package/fixtures/{rechnung-api-beispiele/issue-fehler-zahlungsart.json → invoice-api-examples/issue-error-payment-method.json} +8 -6
  464. package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-beide.json → invoice-api-examples/issue-error-price-both.json} +6 -6
  465. package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-fehlt.json → invoice-api-examples/issue-error-price-missing.json} +6 -6
  466. package/fixtures/{rechnung-api-beispiele/issue-fehler-menge.json → invoice-api-examples/issue-error-quantity.json} +6 -6
  467. package/fixtures/{rechnung-api-beispiele/issue-fehler-satz.json → invoice-api-examples/issue-error-rate.json} +6 -6
  468. package/fixtures/{rechnung-api-beispiele/issue-fehler-einheit.json → invoice-api-examples/issue-error-unit.json} +5 -5
  469. package/fixtures/{rechnung-api-beispiele/issue-fehler-unbekannt.json → invoice-api-examples/issue-error-unknown.json} +6 -6
  470. package/fixtures/{rechnung-api-beispiele/issue-brutto-20.json → invoice-api-examples/issue-gross-20.json} +6 -6
  471. package/fixtures/{rechnung-api-beispiele/issue-mikropreis.json → invoice-api-examples/issue-micro-price.json} +6 -6
  472. package/fixtures/{rechnung-api-beispiele/issue-gemischt.json → invoice-api-examples/issue-mixed.json} +6 -6
  473. package/fixtures/{rechnung-api-beispiele/issue-netto-20.json → invoice-api-examples/issue-net-20.json} +6 -6
  474. package/fixtures/{rechnung-api-beispiele/issue-bezahlt.json → invoice-api-examples/issue-paid.json} +7 -7
  475. package/fixtures/{rechnung-api-beispiele/issue-kleinunternehmer.json → invoice-api-examples/issue-small-business.json} +6 -6
  476. package/fixtures/invoice-api-examples/payment-error-on-site.json +17 -0
  477. package/fixtures/invoice-api-examples/payment-error-without-key.json +16 -0
  478. package/fixtures/invoice-api-examples/payment-recorded-later.json +14 -0
  479. package/fixtures/{rechnung-api-beispiele/setup-status-fehler-feld.json → invoice-api-examples/setup-status-error-field.json} +4 -4
  480. package/fixtures/invoice-api-examples/setup-status-ok.json +8 -0
  481. package/fixtures/{rechnung-api.schema.json → invoice-api.schema.json} +24 -24
  482. package/fixtures/{rechnung-rechnen-zufall.json → invoice-calc-random.json} +828 -828
  483. package/fixtures/{rechnung-rechnen.json → invoice-calc.json} +47 -47
  484. package/fixtures/invoice-texts.json +464 -0
  485. package/fixtures/{rechnung-summen.json → invoice-totals.json} +25 -25
  486. package/fixtures/{position-aus-euro.json → item-from-euro.json} +26 -26
  487. package/fixtures/manifest.json +252 -252
  488. package/fixtures/pos-message-cases.json +32 -0
  489. package/fixtures/pos-settings-defaults.json +149 -0
  490. package/fixtures/pos-texts.json +957 -0
  491. package/fixtures/receipt-due-generated.json +1218 -0
  492. package/fixtures/{belege/storno-rabatt.json → receipts/cancellation-discount.json} +3 -3
  493. package/fixtures/{belege/storno-voll.json → receipts/cancellation-full.json} +3 -3
  494. package/fixtures/{belege/storno-teil.json → receipts/cancellation-partial.json} +3 -3
  495. package/fixtures/{belege/storno-split-voll.json → receipts/cancellation-split-full.json} +3 -3
  496. package/fixtures/{belege/storno-split-teil.json → receipts/cancellation-split-partial.json} +3 -3
  497. package/fixtures/{belege/karte-eigener.json → receipts/card-custom.json} +2 -2
  498. package/fixtures/{belege/karte-gptom-ios.json → receipts/card-gptom-ios.json} +2 -2
  499. package/fixtures/{belege/karte-gptom.json → receipts/card-gptom.json} +2 -2
  500. package/fixtures/{belege/karte-hobex-cloud.json → receipts/card-hobex-cloud.json} +2 -2
  501. package/fixtures/{belege/karte-hobex-hps.json → receipts/card-hobex-hps.json} +2 -2
  502. package/fixtures/{belege/karte-mypos.json → receipts/card-mypos.json} +2 -2
  503. package/fixtures/{belege/karte-stripe-eps.json → receipts/card-stripe-eps.json} +2 -2
  504. package/fixtures/{belege/karte-stripe.json → receipts/card-stripe.json} +2 -2
  505. package/fixtures/{belege/karte-sumup.json → receipts/card-sumup.json} +2 -2
  506. package/fixtures/{belege/rabattzeilen.json → receipts/discount-lines.json} +2 -2
  507. package/fixtures/{belege/rabatt-chef-trinkgeld.json → receipts/discount-owner-tip.json} +2 -2
  508. package/fixtures/{belege/rabatt-einfach.json → receipts/discount-simple.json} +2 -2
  509. package/fixtures/{belege/rabatt-trinkgeld.json → receipts/discount-tip.json} +2 -2
  510. package/fixtures/{belege/rabatt-wertgutschein.json → receipts/discount-value-voucher.json} +2 -2
  511. package/fixtures/{belege/langer-artikelname.json → receipts/long-item-name.json} +2 -2
  512. package/fixtures/{belege/verkauf-karte.json → receipts/sale-card.json} +2 -2
  513. package/fixtures/{belege/verkauf-bar.json → receipts/sale-cash.json} +2 -2
  514. package/fixtures/{belege/verkauf-kleinunternehmer.json → receipts/sale-small-business.json} +1 -1
  515. package/fixtures/{belege/signaturausfall-verkauf.json → receipts/signature-outage-sale.json} +2 -2
  516. package/fixtures/{belege/split-karte-karte-bar.json → receipts/split-card-card-cash.json} +2 -2
  517. package/fixtures/{belege/split-bar-rueckgeld.json → receipts/split-cash-change.json} +2 -2
  518. package/fixtures/{belege/split-langer-betrag.json → receipts/split-long-amount.json} +2 -2
  519. package/fixtures/{belege/split-eine-karte-trinkgeld.json → receipts/split-one-card-tip.json} +2 -2
  520. package/fixtures/{belege/split-tischrunde-trinkgeld.json → receipts/split-table-round-tip.json} +2 -2
  521. package/fixtures/{belege/split-trinkgeld-karte.json → receipts/split-tip-card.json} +2 -2
  522. package/fixtures/{belege/split-zwei-karten-gleicher-anbieter.json → receipts/split-two-cards-same-provider.json} +2 -2
  523. package/fixtures/{belege/testsignatur-verkauf.json → receipts/test-cashregister-sale.json} +3 -3
  524. package/fixtures/{belege/testkasse-verkauf.json → receipts/test-signature-sale.json} +3 -3
  525. package/fixtures/{belege → receipts}/training.json +2 -2
  526. package/fixtures/{belege/null-jahr.json → receipts/zero-annual.json} +5 -5
  527. package/fixtures/{belege/null-schluss.json → receipts/zero-final.json} +5 -5
  528. package/fixtures/{belege/null-pruef.json → receipts/zero-manual.json} +5 -5
  529. package/fixtures/{belege/null-monat.json → receipts/zero-monthly.json} +5 -5
  530. package/fixtures/{belege/null-ausfall.json → receipts/zero-outage-end.json} +5 -5
  531. package/fixtures/{belege/null-start.json → receipts/zero-start.json} +5 -5
  532. package/fixtures/renames-1.0.json +1490 -0
  533. package/fixtures/{kasse-settings-standard.json → stored/pos-settings-defaults.json} +10 -8
  534. package/fixtures/surface.json +877 -0
  535. package/fixtures/v3/README.md +125 -0
  536. package/fixtures/v3/antworten/belege.json +4738 -0
  537. package/fixtures/v3/antworten/belegmail.json +154 -0
  538. package/fixtures/v3/antworten/kasse-belege.json +4304 -0
  539. package/fixtures/v3/antworten/kasse.json +12716 -0
  540. package/fixtures/v3/antworten/rechnungen.json +1712 -0
  541. package/fixtures/v3/antworten/storno.json +737 -0
  542. package/fixtures/v3/stored/belege.json +502 -0
  543. package/fixtures/v3/stored/kasse.json +3461 -0
  544. package/fixtures/v3/stored/rechnungen.json +750 -0
  545. package/fixtures/v3/v3-vokabular.json +3375 -0
  546. package/fixtures/v3/zahlbetrag-faelle.json +794 -0
  547. package/package.json +32 -18
  548. package/dist/cjs/kasse/artikel.d.ts +0 -83
  549. package/dist/cjs/kasse/artikel.js +0 -79
  550. package/dist/cjs/kasse/client.d.ts +0 -10
  551. package/dist/cjs/kasse/client.js +0 -38
  552. package/dist/cjs/kasse/drucker.d.ts +0 -59
  553. package/dist/cjs/kasse/drucker.js +0 -50
  554. package/dist/cjs/kasse/index.d.ts +0 -13
  555. package/dist/cjs/kasse/index.js +0 -79
  556. package/dist/cjs/kasse/settings.d.ts +0 -227
  557. package/dist/cjs/kasse/settings.js +0 -169
  558. package/dist/cjs/kasse/texte.d.ts +0 -458
  559. package/dist/cjs/kasse/texte.js +0 -244
  560. package/dist/cjs/rechnung/fehler.d.ts +0 -21
  561. package/dist/cjs/rechnung/fehler.js +0 -44
  562. package/dist/cjs/rechnung/index.d.ts +0 -21
  563. package/dist/cjs/rechnung/index.js +0 -82
  564. package/dist/cjs/rechnung/texte.d.ts +0 -222
  565. package/dist/cjs/rechnung/texte.js +0 -425
  566. package/dist/esm/kasse/artikel.d.ts +0 -83
  567. package/dist/esm/kasse/artikel.js +0 -70
  568. package/dist/esm/kasse/client.d.ts +0 -10
  569. package/dist/esm/kasse/client.js +0 -33
  570. package/dist/esm/kasse/drucker.d.ts +0 -59
  571. package/dist/esm/kasse/drucker.js +0 -45
  572. package/dist/esm/kasse/index.d.ts +0 -13
  573. package/dist/esm/kasse/index.js +0 -18
  574. package/dist/esm/kasse/settings.d.ts +0 -227
  575. package/dist/esm/kasse/settings.js +0 -165
  576. package/dist/esm/kasse/texte.d.ts +0 -458
  577. package/dist/esm/kasse/texte.js +0 -238
  578. package/dist/esm/rechnung/fehler.d.ts +0 -21
  579. package/dist/esm/rechnung/fehler.js +0 -39
  580. package/dist/esm/rechnung/index.d.ts +0 -21
  581. package/dist/esm/rechnung/index.js +0 -20
  582. package/dist/esm/rechnung/texte.d.ts +0 -222
  583. package/dist/esm/rechnung/texte.js +0 -421
  584. package/fixtures/erwartet/karte-eigener.blatt32.json +0 -158
  585. package/fixtures/erwartet/karte-gptom-ios.blatt32.json +0 -230
  586. package/fixtures/erwartet/karte-gptom.blatt32.json +0 -230
  587. package/fixtures/erwartet/karte-hobex-cloud.blatt32.json +0 -200
  588. package/fixtures/erwartet/karte-hobex-hps.blatt32.json +0 -224
  589. package/fixtures/erwartet/karte-mypos.blatt32.json +0 -254
  590. package/fixtures/erwartet/karte-stripe-eps.blatt32.json +0 -194
  591. package/fixtures/erwartet/karte-stripe.blatt32.json +0 -212
  592. package/fixtures/erwartet/karte-sumup.blatt32.json +0 -218
  593. package/fixtures/erwartet/langer-artikelname.blatt32.json +0 -176
  594. package/fixtures/erwartet/null-ausfall.blatt32.json +0 -206
  595. package/fixtures/erwartet/null-jahr.blatt32.json +0 -212
  596. package/fixtures/erwartet/null-monat.blatt32.json +0 -206
  597. package/fixtures/erwartet/null-pruef.blatt32.json +0 -206
  598. package/fixtures/erwartet/null-schluss.blatt32.json +0 -206
  599. package/fixtures/erwartet/null-start.blatt32.json +0 -206
  600. package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt32.json +0 -212
  601. package/fixtures/erwartet/rabatt-einfach.blatt32.json +0 -182
  602. package/fixtures/erwartet/rabatt-trinkgeld.blatt32.json +0 -212
  603. package/fixtures/erwartet/rabatt-wertgutschein.blatt32.json +0 -218
  604. package/fixtures/erwartet/rabattzeilen.blatt32.json +0 -200
  605. package/fixtures/erwartet/signaturausfall-verkauf.blatt32.json +0 -194
  606. package/fixtures/erwartet/split-bar-rueckgeld.blatt32.json +0 -194
  607. package/fixtures/erwartet/split-eine-karte-trinkgeld.blatt32.json +0 -242
  608. package/fixtures/erwartet/split-karte-karte-bar.blatt32.json +0 -356
  609. package/fixtures/erwartet/split-langer-betrag.blatt32.json +0 -266
  610. package/fixtures/erwartet/split-tischrunde-trinkgeld.blatt32.json +0 -470
  611. package/fixtures/erwartet/split-trinkgeld-karte.blatt32.json +0 -272
  612. package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.blatt32.json +0 -326
  613. package/fixtures/erwartet/storno-rabatt.blatt32.json +0 -248
  614. package/fixtures/erwartet/storno-split-teil.blatt32.json +0 -230
  615. package/fixtures/erwartet/storno-split-voll.blatt32.json +0 -320
  616. package/fixtures/erwartet/storno-teil.blatt32.json +0 -206
  617. package/fixtures/erwartet/storno-voll.blatt32.json +0 -218
  618. package/fixtures/erwartet/testkasse-verkauf.blatt32.json +0 -224
  619. package/fixtures/erwartet/testsignatur-verkauf.blatt32.json +0 -236
  620. package/fixtures/erwartet/training.blatt32.json +0 -236
  621. package/fixtures/erwartet/verkauf-bar.blatt32.json +0 -176
  622. package/fixtures/erwartet/verkauf-karte.blatt32.json +0 -176
  623. package/fixtures/erwartet/verkauf-kleinunternehmer.blatt32.json +0 -182
  624. package/fixtures/kasse-meldungen-faelle.json +0 -32
  625. package/fixtures/kasse-texte.json +0 -513
  626. package/fixtures/oberflaeche.json +0 -557
  627. package/fixtures/rechnung-api-beispiele/brands-ok.json +0 -8
  628. package/fixtures/rechnung-api-beispiele/customer-get-fehler-beide.json +0 -15
  629. package/fixtures/rechnung-api-beispiele/setup-status-ok.json +0 -8
  630. package/fixtures/rechnung-api-beispiele/zahlung-fehler-ohne-schluessel.json +0 -14
  631. package/fixtures/rechnung-api-beispiele/zahlung-fehler-vor-ort.json +0 -15
  632. package/fixtures/rechnung-api-beispiele/zahlung-nachtrag.json +0 -14
  633. package/fixtures/rechnung-texte.json +0 -464
  634. /package/dist/cjs/{rechnung → invoice}/typen.js +0 -0
  635. /package/dist/esm/{rechnung → invoice}/typen.js +0 -0
  636. /package/fixtures/{erwartet/storno-rabatt.grid32.txt → expected/cancellation-discount.grid32.txt} +0 -0
  637. /package/fixtures/{erwartet/storno-rabatt.grid48.txt → expected/cancellation-discount.grid48.txt} +0 -0
  638. /package/fixtures/{erwartet/storno-voll.grid32.txt → expected/cancellation-full.grid32.txt} +0 -0
  639. /package/fixtures/{erwartet/storno-voll.grid48.txt → expected/cancellation-full.grid48.txt} +0 -0
  640. /package/fixtures/{erwartet/storno-teil.grid32.txt → expected/cancellation-partial.grid32.txt} +0 -0
  641. /package/fixtures/{erwartet/storno-teil.grid48.txt → expected/cancellation-partial.grid48.txt} +0 -0
  642. /package/fixtures/{erwartet/storno-split-voll.grid32.txt → expected/cancellation-split-full.grid32.txt} +0 -0
  643. /package/fixtures/{erwartet/storno-split-voll.grid48.txt → expected/cancellation-split-full.grid48.txt} +0 -0
  644. /package/fixtures/{erwartet/storno-split-teil.grid32.txt → expected/cancellation-split-partial.grid32.txt} +0 -0
  645. /package/fixtures/{erwartet/storno-split-teil.grid48.txt → expected/cancellation-split-partial.grid48.txt} +0 -0
  646. /package/fixtures/{erwartet/karte-eigener.grid32.txt → expected/card-custom.grid32.txt} +0 -0
  647. /package/fixtures/{erwartet/karte-eigener.grid48.txt → expected/card-custom.grid48.txt} +0 -0
  648. /package/fixtures/{erwartet/karte-gptom-ios.grid32.txt → expected/card-gptom-ios.grid32.txt} +0 -0
  649. /package/fixtures/{erwartet/karte-gptom-ios.grid48.txt → expected/card-gptom-ios.grid48.txt} +0 -0
  650. /package/fixtures/{erwartet/karte-gptom.grid32.txt → expected/card-gptom.grid32.txt} +0 -0
  651. /package/fixtures/{erwartet/karte-gptom.grid48.txt → expected/card-gptom.grid48.txt} +0 -0
  652. /package/fixtures/{erwartet/karte-hobex-cloud.grid32.txt → expected/card-hobex-cloud.grid32.txt} +0 -0
  653. /package/fixtures/{erwartet/karte-hobex-cloud.grid48.txt → expected/card-hobex-cloud.grid48.txt} +0 -0
  654. /package/fixtures/{erwartet/karte-hobex-hps.grid32.txt → expected/card-hobex-hps.grid32.txt} +0 -0
  655. /package/fixtures/{erwartet/karte-hobex-hps.grid48.txt → expected/card-hobex-hps.grid48.txt} +0 -0
  656. /package/fixtures/{erwartet/karte-mypos.grid32.txt → expected/card-mypos.grid32.txt} +0 -0
  657. /package/fixtures/{erwartet/karte-mypos.grid48.txt → expected/card-mypos.grid48.txt} +0 -0
  658. /package/fixtures/{erwartet/karte-stripe-eps.grid32.txt → expected/card-stripe-eps.grid32.txt} +0 -0
  659. /package/fixtures/{erwartet/karte-stripe-eps.grid48.txt → expected/card-stripe-eps.grid48.txt} +0 -0
  660. /package/fixtures/{erwartet/karte-stripe.grid32.txt → expected/card-stripe.grid32.txt} +0 -0
  661. /package/fixtures/{erwartet/karte-stripe.grid48.txt → expected/card-stripe.grid48.txt} +0 -0
  662. /package/fixtures/{erwartet/karte-sumup.grid32.txt → expected/card-sumup.grid32.txt} +0 -0
  663. /package/fixtures/{erwartet/karte-sumup.grid48.txt → expected/card-sumup.grid48.txt} +0 -0
  664. /package/fixtures/{erwartet/rabattzeilen.grid32.txt → expected/discount-lines.grid32.txt} +0 -0
  665. /package/fixtures/{erwartet/rabattzeilen.grid48.txt → expected/discount-lines.grid48.txt} +0 -0
  666. /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid32.txt → expected/discount-owner-tip.grid32.txt} +0 -0
  667. /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid48.txt → expected/discount-owner-tip.grid48.txt} +0 -0
  668. /package/fixtures/{erwartet/rabatt-einfach.grid32.txt → expected/discount-simple.grid32.txt} +0 -0
  669. /package/fixtures/{erwartet/rabatt-einfach.grid48.txt → expected/discount-simple.grid48.txt} +0 -0
  670. /package/fixtures/{erwartet/rabatt-trinkgeld.grid32.txt → expected/discount-tip.grid32.txt} +0 -0
  671. /package/fixtures/{erwartet/rabatt-trinkgeld.grid48.txt → expected/discount-tip.grid48.txt} +0 -0
  672. /package/fixtures/{erwartet/rabatt-wertgutschein.grid32.txt → expected/discount-value-voucher.grid32.txt} +0 -0
  673. /package/fixtures/{erwartet/rabatt-wertgutschein.grid48.txt → expected/discount-value-voucher.grid48.txt} +0 -0
  674. /package/fixtures/{erwartet/logo-probe-hoch.raster32.txt → expected/logo-sample-tall.raster32.txt} +0 -0
  675. /package/fixtures/{erwartet/logo-probe.raster32.txt → expected/logo-sample.raster32.txt} +0 -0
  676. /package/fixtures/{erwartet/langer-artikelname.grid32.txt → expected/long-item-name.grid32.txt} +0 -0
  677. /package/fixtures/{erwartet/langer-artikelname.grid48.txt → expected/long-item-name.grid48.txt} +0 -0
  678. /package/fixtures/{erwartet/verkauf-karte.grid32.txt → expected/sale-card.grid32.txt} +0 -0
  679. /package/fixtures/{erwartet/verkauf-karte.grid48.txt → expected/sale-card.grid48.txt} +0 -0
  680. /package/fixtures/{erwartet/verkauf-bar.grid32.txt → expected/sale-cash.grid32.txt} +0 -0
  681. /package/fixtures/{erwartet/verkauf-bar.grid48.txt → expected/sale-cash.grid48.txt} +0 -0
  682. /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid32.txt → expected/sale-small-business.grid32.txt} +0 -0
  683. /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid48.txt → expected/sale-small-business.grid48.txt} +0 -0
  684. /package/fixtures/{erwartet/signaturausfall-verkauf.grid32.txt → expected/signature-outage-sale.grid32.txt} +0 -0
  685. /package/fixtures/{erwartet/signaturausfall-verkauf.grid48.txt → expected/signature-outage-sale.grid48.txt} +0 -0
  686. /package/fixtures/{erwartet/split-karte-karte-bar.grid32.txt → expected/split-card-card-cash.grid32.txt} +0 -0
  687. /package/fixtures/{erwartet/split-karte-karte-bar.grid48.txt → expected/split-card-card-cash.grid48.txt} +0 -0
  688. /package/fixtures/{erwartet/split-bar-rueckgeld.grid32.txt → expected/split-cash-change.grid32.txt} +0 -0
  689. /package/fixtures/{erwartet/split-bar-rueckgeld.grid48.txt → expected/split-cash-change.grid48.txt} +0 -0
  690. /package/fixtures/{erwartet/split-langer-betrag.grid32.txt → expected/split-long-amount.grid32.txt} +0 -0
  691. /package/fixtures/{erwartet/split-langer-betrag.grid48.txt → expected/split-long-amount.grid48.txt} +0 -0
  692. /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid32.txt → expected/split-one-card-tip.grid32.txt} +0 -0
  693. /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid48.txt → expected/split-one-card-tip.grid48.txt} +0 -0
  694. /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid32.txt → expected/split-table-round-tip.grid32.txt} +0 -0
  695. /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid48.txt → expected/split-table-round-tip.grid48.txt} +0 -0
  696. /package/fixtures/{erwartet/split-trinkgeld-karte.grid32.txt → expected/split-tip-card.grid32.txt} +0 -0
  697. /package/fixtures/{erwartet/split-trinkgeld-karte.grid48.txt → expected/split-tip-card.grid48.txt} +0 -0
  698. /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid32.txt → expected/split-two-cards-same-provider.grid32.txt} +0 -0
  699. /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid48.txt → expected/split-two-cards-same-provider.grid48.txt} +0 -0
  700. /package/fixtures/{erwartet/testkasse-verkauf.grid32.txt → expected/test-cashregister-sale.grid32.txt} +0 -0
  701. /package/fixtures/{erwartet/testkasse-verkauf.grid48.txt → expected/test-cashregister-sale.grid48.txt} +0 -0
  702. /package/fixtures/{erwartet/testsignatur-verkauf.grid32.txt → expected/test-signature-sale.grid32.txt} +0 -0
  703. /package/fixtures/{erwartet/testsignatur-verkauf.grid48.txt → expected/test-signature-sale.grid48.txt} +0 -0
  704. /package/fixtures/{erwartet → expected}/training.grid32.txt +0 -0
  705. /package/fixtures/{erwartet → expected}/training.grid48.txt +0 -0
  706. /package/fixtures/{erwartet/null-jahr.grid32.txt → expected/zero-annual.grid32.txt} +0 -0
  707. /package/fixtures/{erwartet/null-jahr.grid48.txt → expected/zero-annual.grid48.txt} +0 -0
  708. /package/fixtures/{erwartet/null-schluss.grid32.txt → expected/zero-final.grid32.txt} +0 -0
  709. /package/fixtures/{erwartet/null-schluss.grid48.txt → expected/zero-final.grid48.txt} +0 -0
  710. /package/fixtures/{erwartet/null-pruef.grid32.txt → expected/zero-manual.grid32.txt} +0 -0
  711. /package/fixtures/{erwartet/null-pruef.grid48.txt → expected/zero-manual.grid48.txt} +0 -0
  712. /package/fixtures/{erwartet/null-monat.grid32.txt → expected/zero-monthly.grid32.txt} +0 -0
  713. /package/fixtures/{erwartet/null-monat.grid48.txt → expected/zero-monthly.grid48.txt} +0 -0
  714. /package/fixtures/{erwartet/null-ausfall.grid32.txt → expected/zero-outage-end.grid32.txt} +0 -0
  715. /package/fixtures/{erwartet/null-ausfall.grid48.txt → expected/zero-outage-end.grid48.txt} +0 -0
  716. /package/fixtures/{erwartet/null-start.grid32.txt → expected/zero-start.grid32.txt} +0 -0
  717. /package/fixtures/{erwartet/null-start.grid48.txt → expected/zero-start.grid48.txt} +0 -0
@@ -20,48 +20,48 @@
20
20
  * Spec: docs/specs/2026-09-17-rechnung-ganzzahlen-design.md § 5.
21
21
  */
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.RechenFehler = exports.STEUERFREIE_FAELLE = exports.BETRAG_GRENZE_CENTS = void 0;
24
- exports.rund = rund;
25
- exports.rechnungRechnen = rechnungRechnen;
26
- exports.positionAusEuro = positionAusEuro;
27
- exports.anteiligerPreis = anteiligerPreis;
28
- exports.satzSchluessel = satzSchluessel;
29
- exports.satzText = satzText;
30
- exports.preisText = preisText;
23
+ exports.CalcError = exports.ZERO_RATED_TAX_SCHEMES = exports.MAX_AMOUNT_CENTS = void 0;
24
+ exports.roundDiv = roundDiv;
25
+ exports.calculateInvoice = calculateInvoice;
26
+ exports.itemFromEuro = itemFromEuro;
27
+ exports.proratedPriceMicros = proratedPriceMicros;
28
+ exports.vatRateMapKey = vatRateMapKey;
29
+ exports.formatVatRate = formatVatRate;
30
+ exports.formatUnitPrice = formatUnitPrice;
31
31
  /** Skala des Zeilenbruchs: 10⁻¹⁷ Cent. */
32
32
  const E = 10n ** 17n;
33
33
  /** Hoechster Betrag je Zeile und je Rechnung: 999.999.999,99 €. */
34
- exports.BETRAG_GRENZE_CENTS = 99_999_999_999;
34
+ exports.MAX_AMOUNT_CENTS = 99_999_999_999;
35
35
  /** Steuerfaelle, in denen die Rechnung keine Steuer ausweist: jede Zeile zaehlt zu 0 %. */
36
- exports.STEUERFREIE_FAELLE = Object.freeze([
36
+ exports.ZERO_RATED_TAX_SCHEMES = Object.freeze([
37
37
  'smallBusiness',
38
38
  'reverseCharge',
39
- 'igLieferung',
39
+ 'intraCommunitySupply',
40
40
  'exportThirdCountry',
41
41
  'domesticReverseCharge',
42
42
  'outsideScope',
43
43
  ]);
44
44
  /** Fehler des Kerns — mit Code, Feld und Index, damit die API daraus einen Feldfehler machen kann. */
45
- class RechenFehler extends Error {
45
+ class CalcError extends Error {
46
46
  code;
47
- feld;
47
+ field;
48
48
  index;
49
- constructor(code, nachricht, feld, index) {
50
- super(nachricht);
51
- this.name = 'RechenFehler';
49
+ constructor(code, message, field, index) {
50
+ super(message);
51
+ this.name = 'CalcError';
52
52
  this.code = code;
53
- this.feld = feld;
53
+ this.field = field;
54
54
  this.index = index;
55
55
  }
56
56
  }
57
- exports.RechenFehler = RechenFehler;
57
+ exports.CalcError = CalcError;
58
58
  /**
59
59
  * `a / b` kaufmaennisch gerundet, halbe Einheit vom Nullpunkt weg; `b` > 0.
60
60
  *
61
61
  * Ohne Gleitkomma: `(2·|a| + b) / (2·b)` ist genau dann eins groesser, wenn der
62
62
  * Rest mindestens die halbe Einheit betraegt.
63
63
  */
64
- function rund(a, b) {
64
+ function roundDiv(a, b) {
65
65
  const negativ = a < 0n;
66
66
  const betrag = negativ ? -a : a;
67
67
  const ganz = (2n * betrag + b) / (2n * b);
@@ -75,11 +75,11 @@ const GRENZEN = {
75
75
  };
76
76
  function ganzzahl(wert, feld, index) {
77
77
  if (typeof wert !== 'number' || !Number.isInteger(wert)) {
78
- throw new RechenFehler('kein_ganzzahlwert', `items[${index}].${feld} muss eine ganze Zahl sein`, feld, index);
78
+ throw new CalcError('not_integer', `items[${index}].${feld} muss eine ganze Zahl sein`, feld, index);
79
79
  }
80
80
  const [min, max] = GRENZEN[feld];
81
81
  if (wert < min || wert > max) {
82
- throw new RechenFehler('ausserhalb', `items[${index}].${feld} liegt ausserhalb von ${min} … ${max}`, feld, index);
82
+ throw new CalcError('out_of_range', `items[${index}].${feld} liegt ausserhalb von ${min} … ${max}`, feld, index);
83
83
  }
84
84
  return wert;
85
85
  }
@@ -95,7 +95,7 @@ function ganzzahl(wert, feld, index) {
95
95
  function verteile(gruppe, feld, faktor, nenner, ziel) {
96
96
  const werte = gruppe.map((z) => {
97
97
  const zaehler = z.L * faktor;
98
- return { z, zaehler, wert: rund(zaehler, nenner) };
98
+ return { z, zaehler, wert: roundDiv(zaehler, nenner) };
99
99
  });
100
100
  let rest = ziel - werte.reduce((s, w) => s + w.wert, 0n);
101
101
  if (rest !== 0n) {
@@ -117,18 +117,18 @@ function verteile(gruppe, feld, faktor, nenner, ziel) {
117
117
  for (const w of werte)
118
118
  w.z[feld] = Number(w.wert);
119
119
  }
120
- function rechnungRechnen(positionen, optionen) {
121
- const steuerfrei = exports.STEUERFREIE_FAELLE.includes(optionen.taxScheme ?? 'normal');
122
- const bruttoPreise = optionen.priceMode === 'gross' && !steuerfrei;
123
- const grenze = BigInt(exports.BETRAG_GRENZE_CENTS) * E;
124
- const zeilen = positionen.map((p, index) => {
120
+ function calculateInvoice(items, options) {
121
+ const steuerfrei = exports.ZERO_RATED_TAX_SCHEMES.includes(options.taxScheme ?? 'normal');
122
+ const bruttoPreise = options.priceMode === 'gross' && !steuerfrei;
123
+ const grenze = BigInt(exports.MAX_AMOUNT_CENTS) * E;
124
+ const zeilen = items.map((p, index) => {
125
125
  const preis = BigInt(ganzzahl(p.unitPriceMicros, 'unitPriceMicros', index));
126
126
  const menge = BigInt(ganzzahl(p.quantityMilli, 'quantityMilli', index));
127
127
  const rabatt = BigInt(ganzzahl(p.discountBp ?? 0, 'discountBp', index));
128
128
  const satz = ganzzahl(p.vatRateBp ?? 0, 'vatRateBp', index);
129
129
  const L = preis * menge * (10000n - rabatt) * 1000000n;
130
130
  if ((L < 0n ? -L : L) > grenze) {
131
- throw new RechenFehler('amount_too_large', `items[${index}] uebersteigt ${exports.BETRAG_GRENZE_CENTS} Cent`, 'unitPriceMicros', index);
131
+ throw new CalcError('amount_too_large', `items[${index}] uebersteigt ${exports.MAX_AMOUNT_CENTS} Cent`, 'unitPriceMicros', index);
132
132
  }
133
133
  return { index, rateBp: steuerfrei ? 0 : satz, L, netCents: 0, grossCents: 0 };
134
134
  });
@@ -148,13 +148,13 @@ function rechnungRechnen(positionen, optionen) {
148
148
  let vatCents;
149
149
  let grossCents;
150
150
  if (bruttoPreise) {
151
- grossCents = rund(S, E);
152
- netCents = rund(grossCents * 10000n, 10000n + r);
151
+ grossCents = roundDiv(S, E);
152
+ netCents = roundDiv(grossCents * 10000n, 10000n + r);
153
153
  vatCents = grossCents - netCents;
154
154
  }
155
155
  else {
156
- netCents = rund(S, E);
157
- vatCents = rund(S * r, E * 10000n);
156
+ netCents = roundDiv(S, E);
157
+ vatCents = roundDiv(S * r, E * 10000n);
158
158
  grossCents = netCents + vatCents;
159
159
  }
160
160
  if (bruttoPreise) {
@@ -182,8 +182,8 @@ function rechnungRechnen(positionen, optionen) {
182
182
  lines: zeilen.map((z) => ({ netCents: z.netCents, grossCents: z.grossCents, rateBp: z.rateBp })),
183
183
  };
184
184
  for (const feld of ['netCents', 'vatCents', 'grossCents']) {
185
- if (Math.abs(ergebnis[feld]) > exports.BETRAG_GRENZE_CENTS) {
186
- throw new RechenFehler('amount_too_large', `Die Rechnung uebersteigt ${exports.BETRAG_GRENZE_CENTS} Cent (${feld})`);
185
+ if (Math.abs(ergebnis[feld]) > exports.MAX_AMOUNT_CENTS) {
186
+ throw new CalcError('amount_too_large', `Die Rechnung uebersteigt ${exports.MAX_AMOUNT_CENTS} Cent (${feld})`);
187
187
  }
188
188
  }
189
189
  return ergebnis;
@@ -235,47 +235,47 @@ const EURO_FELDER = ['unitPrice', 'quantity', 'vatRate', 'discountPct'];
235
235
  * abgerechnet hat. Ein fehlender Preis dagegen ist NIE 0: sonst wuerde eine
236
236
  * Position, der nur der Preis fehlt, still zur 0-€-Zeile.
237
237
  */
238
- function positionAusEuro(item) {
238
+ function itemFromEuro(item) {
239
239
  if (typeof item.unitPriceMicros === 'number') {
240
- return { ok: true, position: item };
240
+ return { ok: true, item: item };
241
241
  }
242
242
  const roh = item.unitPrice;
243
243
  if (typeof roh !== 'number' || !Number.isFinite(roh)) {
244
- return { ok: false, feld: 'unitPrice', grund: 'kein_zahlwert' };
244
+ return { ok: false, field: 'unitPrice', reason: 'not_a_number' };
245
245
  }
246
246
  const micros = ganzAusDezimaltext(Math.abs(roh), 6);
247
247
  if (micros === null)
248
- return { ok: false, feld: 'unitPrice', grund: 'nachkommastellen' };
248
+ return { ok: false, field: 'unitPrice', reason: 'too_many_decimals' };
249
249
  if (micros > GRENZEN.unitPriceMicros[1])
250
- return { ok: false, feld: 'unitPrice', grund: 'ausserhalb' };
250
+ return { ok: false, field: 'unitPrice', reason: 'out_of_range' };
251
251
  const zahl = (feld, stellen, max) => {
252
252
  const w = item[feld];
253
253
  if (w === undefined || w === null)
254
254
  return { ok: true, wert: 0 };
255
255
  if (typeof w !== 'number' || !Number.isFinite(w))
256
- return { ok: false, grund: 'kein_zahlwert' };
256
+ return { ok: false, grund: 'not_a_number' };
257
257
  const ganz = ganzAusDezimaltext(w, stellen);
258
258
  if (ganz === null)
259
- return { ok: false, grund: 'nachkommastellen' };
259
+ return { ok: false, grund: 'too_many_decimals' };
260
260
  if (ganz < (feld === 'quantity' ? -max : 0) || ganz > max)
261
- return { ok: false, grund: 'ausserhalb' };
261
+ return { ok: false, grund: 'out_of_range' };
262
262
  return { ok: true, wert: ganz };
263
263
  };
264
264
  const menge = zahl('quantity', 3, GRENZEN.quantityMilli[1]);
265
265
  if (!menge.ok)
266
- return { ok: false, feld: 'quantity', grund: menge.grund };
266
+ return { ok: false, field: 'quantity', reason: menge.grund };
267
267
  const satz = zahl('vatRate', 2, 10_000);
268
268
  if (!satz.ok)
269
- return { ok: false, feld: 'vatRate', grund: satz.grund };
269
+ return { ok: false, field: 'vatRate', reason: satz.grund };
270
270
  const rabatt = zahl('discountPct', 2, 10_000);
271
271
  if (!rabatt.ok)
272
- return { ok: false, feld: 'discountPct', grund: rabatt.grund };
272
+ return { ok: false, field: 'discountPct', reason: rabatt.grund };
273
273
  const rest = { ...item };
274
274
  for (const feld of EURO_FELDER)
275
275
  delete rest[feld];
276
276
  return {
277
277
  ok: true,
278
- position: {
278
+ item: {
279
279
  ...rest,
280
280
  unitPriceMicros: micros,
281
281
  quantityMilli: roh < 0 ? -menge.wert : menge.wert,
@@ -290,32 +290,32 @@ function positionAusEuro(item) {
290
290
  * stuende auf der ersten Rechnung ein Preis mit sechs Stellen, wo bisher zwei
291
291
  * standen.
292
292
  */
293
- function anteiligerPreis(unitPriceMicros, monate, intervall) {
293
+ function proratedPriceMicros(unitPriceMicros, months, interval) {
294
294
  const micros = BigInt(unitPriceMicros);
295
- const anteil = rund(micros * BigInt(monate), BigInt(intervall));
295
+ const anteil = roundDiv(micros * BigInt(months), BigInt(interval));
296
296
  if (unitPriceMicros % 10_000 !== 0)
297
297
  return Number(anteil);
298
- return Number(rund(anteil, 10000n) * 10000n);
298
+ return Number(roundDiv(anteil, 10000n) * 10000n);
299
299
  }
300
300
  /**
301
301
  * Schluessel eines USt-Satzes in den gespeicherten Maps (`creditedCents.byRate`,
302
302
  * `invoice_stats.vatByRate`): der Prozenttext mit Punkt, genau wie
303
303
  * `String(satz)` ihn bisher gebildet hat. NICHT fuer die Anzeige — dafuer gibt
304
- * es `satzText`.
304
+ * es `formatVatRate`.
305
305
  */
306
- function satzSchluessel(rateBp) {
306
+ function vatRateMapKey(rateBp) {
307
307
  return String(rateBp / 100);
308
308
  }
309
309
  /** Ein USt-Satz fuer die Anzeige: oesterreichisch mit Komma, ohne nachlaufende Nullen. */
310
- function satzText(rateBp) {
311
- return satzSchluessel(rateBp).replace('.', ',');
310
+ function formatVatRate(rateBp) {
311
+ return vatRateMapKey(rateBp).replace('.', ',');
312
312
  }
313
313
  /**
314
314
  * Ein Einzelpreis fuer die Anzeige: mindestens zwei, hoechstens sechs
315
315
  * Nachkommastellen, Tausenderpunkt, Komma als Trennzeichen — in jeder Sprache
316
316
  * oesterreichisch, wie die Betraege auf dem Blatt.
317
317
  */
318
- function preisText(unitPriceMicros) {
318
+ function formatUnitPrice(unitPriceMicros) {
319
319
  const negativ = unitPriceMicros < 0;
320
320
  const betrag = Math.abs(unitPriceMicros);
321
321
  const ganz = Math.trunc(betrag / 1_000_000);
@@ -2,7 +2,7 @@
2
2
  * Die Aufrufe der Rechnungs-API — Kunden, Rechnungen, Gutschriften, Dateien.
3
3
  *
4
4
  * Jede Funktion nimmt den Transport als ersten Parameter und ist einzeln
5
- * importierbar; die Fassade [createRechnungApi] bindet ihn nur einmal.
5
+ * importierbar; die Fassade [createInvoiceApi] bindet ihn nur einmal.
6
6
  *
7
7
  * **Geprueft wird hier nichts Fachliches.** Die Anfrage geht unveraendert an
8
8
  * das Backend, das sie gegen denselben Vertrag prueft (`vertrag.ts`) und einen
@@ -17,19 +17,19 @@
17
17
  * der Aufruf `KasseneckValidationError` mit `scope:'response'`.
18
18
  */
19
19
  import type { InternerBinaerTransport, InternerTransport } from '../client/aufrufe.js';
20
- import type { EInvoiceFormat, InvoiceLanguage } from './vertrag.js';
21
- import type { Brand, CancelInvoiceRequest, CancelResult, CreditNoteRequest, CreditNoteResult, Customer, CustomerInput, CustomerPage, CustomerSearch, InvoiceDetail, InvoiceListQuery, InvoicePage, InvoiceSetupStatus, IssueInvoiceRequest, IssueResult, PreviewResult, RecordPaymentRequest, RecordPaymentResult } from './typen.js';
22
- export declare function createCustomer(rufen: InternerTransport, customer: CustomerInput, optionen?: {
20
+ import { type EInvoiceFormat, type InvoiceLanguage } from './vertrag.js';
21
+ import type { Brand, CancelInvoiceRequest, CancelResult, CreditNoteRequest, CreditNoteResult, Customer, CustomerInput, CustomerPage, CustomerSearch, InvoiceDetail, InvoiceListQuery, InvoicePage, InvoiceSetupStatus, InvoiceXml, IssueInvoiceRequest, IssueResult, PreviewResult, RecordPaymentRequest, RecordPaymentResult } from './typen.js';
22
+ export declare function createCustomer(transport: InternerTransport, customer: CustomerInput, options?: {
23
23
  idempotencyKey?: string;
24
24
  }): Promise<Customer>;
25
- export declare function getCustomer(rufen: InternerTransport, kennung: {
25
+ export declare function getCustomer(transport: InternerTransport, ref: {
26
26
  customerId: string;
27
27
  } | {
28
28
  externalId: string;
29
29
  }): Promise<Customer>;
30
- export declare function updateCustomer(rufen: InternerTransport, customerId: string, patch: Partial<CustomerInput>): Promise<Customer>;
31
- export declare function searchCustomers(rufen: InternerTransport, suche: CustomerSearch): Promise<CustomerPage>;
32
- export declare function issueInvoice(rufen: InternerTransport, anfrage: IssueInvoiceRequest): Promise<IssueResult>;
30
+ export declare function updateCustomer(transport: InternerTransport, customerId: string, patch: Partial<CustomerInput>): Promise<Customer>;
31
+ export declare function searchCustomers(transport: InternerTransport, search: CustomerSearch): Promise<CustomerPage>;
32
+ export declare function issueInvoice(transport: InternerTransport, request: IssueInvoiceRequest): Promise<IssueResult>;
33
33
  /**
34
34
  * Probelauf von `issueInvoice`: dieselbe Anfrage wird geprueft und gerechnet
35
35
  * wie beim Ausstellen, aber nichts festgeschrieben. Die Antwort nennt Summen,
@@ -40,28 +40,28 @@ export declare function issueInvoice(rufen: InternerTransport, anfrage: IssueInv
40
40
  * danach unveraendert ausstellen. Verbindlich ist das Ausstellen — zwischen
41
41
  * Probelauf und Ausstellen kann sich der Kunde oder das Konto aendern.
42
42
  */
43
- export declare function previewInvoice(rufen: InternerTransport, anfrage: IssueInvoiceRequest): Promise<PreviewResult>;
44
- export declare function cancelInvoice(rufen: InternerTransport, anfrage: CancelInvoiceRequest): Promise<CancelResult>;
45
- export declare function createCreditNote(rufen: InternerTransport, anfrage: CreditNoteRequest): Promise<CreditNoteResult>;
46
- export declare function getInvoice(rufen: InternerTransport, kennung: {
43
+ export declare function previewInvoice(transport: InternerTransport, request: IssueInvoiceRequest): Promise<PreviewResult>;
44
+ export declare function cancelInvoice(transport: InternerTransport, request: CancelInvoiceRequest): Promise<CancelResult>;
45
+ export declare function createCreditNote(transport: InternerTransport, request: CreditNoteRequest): Promise<CreditNoteResult>;
46
+ export declare function getInvoice(transport: InternerTransport, ref: {
47
47
  invoiceId: string;
48
48
  } | {
49
49
  number: string;
50
50
  }): Promise<InvoiceDetail>;
51
- export declare function listInvoices(rufen: InternerTransport, abfrage?: InvoiceListQuery): Promise<InvoicePage>;
51
+ export declare function listInvoices(transport: InternerTransport, query?: InvoiceListQuery): Promise<InvoicePage>;
52
52
  /**
53
53
  * Darf dieses Konto ueber die API ausstellen, und was fehlt noch? Laeuft auch
54
54
  * ohne Freigabe und vor der Live-Freischaltung — genau dann braucht man die
55
55
  * Antwort. Vor dem ersten `issueInvoice` aufrufen und `missing` anzeigen.
56
56
  */
57
- export declare function getInvoiceSetupStatus(rufen: InternerTransport): Promise<InvoiceSetupStatus>;
57
+ export declare function getInvoiceSetupStatus(transport: InternerTransport): Promise<InvoiceSetupStatus>;
58
58
  /**
59
59
  * Das PDF der Rechnung (bei Gutschriften: der Gutschrift), mit eingebetteter
60
60
  * Factur-X-Datei. Mit `language` in der anderen Sprache als der Rechnung kommt
61
61
  * eine **Uebersetzungskopie**: dieselbe Nummer, auf jeder Seite als Uebersetzung
62
62
  * gekennzeichnet, ohne eingebettete E-Rechnung — keine eigene Rechnung.
63
63
  */
64
- export declare function getInvoicePdf(rufenBinaer: InternerBinaerTransport, invoiceId: string, optionen?: {
64
+ export declare function getInvoicePdf(binaryTransport: InternerBinaerTransport, invoiceId: string, options?: {
65
65
  language?: InvoiceLanguage;
66
66
  }): Promise<Uint8Array>;
67
67
  /**
@@ -73,12 +73,14 @@ export declare function getInvoicePdf(rufenBinaer: InternerBinaerTransport, invo
73
73
  * zusaetzlich `notice` — eine Barzahlung ist ein Barumsatz und braucht einen
74
74
  * Beleg (§ 132a BAO), den dieser Vermerk nicht ersetzt.
75
75
  */
76
- export declare function recordInvoicePayment(rufen: InternerTransport, anfrage: RecordPaymentRequest): Promise<RecordPaymentResult>;
76
+ export declare function recordInvoicePayment(transport: InternerTransport, request: RecordPaymentRequest): Promise<RecordPaymentResult>;
77
77
  /** Die Marken des Kontos — die Kennung geht als `brandId` in `issueInvoice`. */
78
- export declare function listBrands(rufen: InternerTransport): Promise<Brand[]>;
78
+ export declare function listBrands(transport: InternerTransport): Promise<Brand[]>;
79
79
  /**
80
- * Die E-Rechnung als XML-Text. Sie kommt im gewohnten Umschlag (`data.xml`)
81
- * und nicht als rohe Datei: so bleibt ein fachlicher Fehler
82
- * (`einvoice_incomplete` mit `missing[]`) ein gewoehnlicher Fehler.
80
+ * Die E-Rechnung samt Format und Dateiname, genau wie der Server sie schickt.
81
+ * Sie kommt im gewohnten Umschlag (`data.xml`) und nicht als rohe Datei: so
82
+ * bleibt ein fachlicher Fehler (`einvoice_incomplete` mit `missing[]`) ein
83
+ * gewoehnlicher Fehler. Den Dateinamen nicht selbst bauen, sondern
84
+ * `filename` nehmen (`invoice-<Nummer>.xml`).
83
85
  */
84
- export declare function getInvoiceXml(rufen: InternerTransport, invoiceId: string, format?: EInvoiceFormat): Promise<string>;
86
+ export declare function getInvoiceXml(transport: InternerTransport, invoiceId: string, format?: EInvoiceFormat): Promise<InvoiceXml>;
@@ -3,7 +3,7 @@
3
3
  * Die Aufrufe der Rechnungs-API — Kunden, Rechnungen, Gutschriften, Dateien.
4
4
  *
5
5
  * Jede Funktion nimmt den Transport als ersten Parameter und ist einzeln
6
- * importierbar; die Fassade [createRechnungApi] bindet ihn nur einmal.
6
+ * importierbar; die Fassade [createInvoiceApi] bindet ihn nur einmal.
7
7
  *
8
8
  * **Geprueft wird hier nichts Fachliches.** Die Anfrage geht unveraendert an
9
9
  * das Backend, das sie gegen denselben Vertrag prueft (`vertrag.ts`) und einen
@@ -34,6 +34,7 @@ exports.recordInvoicePayment = recordInvoicePayment;
34
34
  exports.listBrands = listBrands;
35
35
  exports.getInvoiceXml = getInvoiceXml;
36
36
  const errors_js_1 = require("../client/errors.js");
37
+ const vertrag_js_1 = require("./vertrag.js");
37
38
  function objekt(wert) {
38
39
  return wert !== null && typeof wert === 'object' && !Array.isArray(wert)
39
40
  ? wert
@@ -86,30 +87,30 @@ function kennungVerlangen(aufruf, kennung, felder) {
86
87
  /** Anfrageobjekt als Nutzlast — flache Kopie, damit der Aufrufer sein Objekt behaelt. */
87
88
  const nutzlast = (anfrage) => ({ ...anfrage });
88
89
  // ---- Kunden -----------------------------------------------------------------
89
- async function createCustomer(rufen, customer, optionen = {}) {
90
+ async function createCustomer(transport, customer, options = {}) {
90
91
  const params = { customer };
91
- if (optionen.idempotencyKey)
92
- params['idempotencyKey'] = optionen.idempotencyKey;
93
- const daten = await rufen('createCustomer', params);
92
+ if (options.idempotencyKey)
93
+ params['idempotencyKey'] = options.idempotencyKey;
94
+ const daten = await transport('createCustomer', params);
94
95
  return pflichtObjekt('createCustomer', daten, 'customer');
95
96
  }
96
- async function getCustomer(rufen, kennung) {
97
- kennungVerlangen('getCustomer', kennung, '{ customerId } oder { externalId }');
98
- const daten = await rufen('getCustomer', nutzlast(kennung));
97
+ async function getCustomer(transport, ref) {
98
+ kennungVerlangen('getCustomer', ref, '{ customerId } oder { externalId }');
99
+ const daten = await transport('getCustomer', nutzlast(ref));
99
100
  return pflichtObjekt('getCustomer', daten, 'customer');
100
101
  }
101
- async function updateCustomer(rufen, customerId, patch) {
102
- const daten = await rufen('updateCustomer', { customerId, customer: patch });
102
+ async function updateCustomer(transport, customerId, patch) {
103
+ const daten = await transport('updateCustomer', { customerId, customer: patch });
103
104
  return pflichtObjekt('updateCustomer', daten, 'customer');
104
105
  }
105
- async function searchCustomers(rufen, suche) {
106
- const daten = await rufen('searchCustomers', nutzlast(suche));
106
+ async function searchCustomers(transport, search) {
107
+ const daten = await transport('searchCustomers', nutzlast(search));
107
108
  const { eintraege, nextCursor } = seite('searchCustomers', daten, 'customers');
108
109
  return { customers: eintraege, nextCursor };
109
110
  }
110
111
  // ---- Rechnungen -------------------------------------------------------------
111
- async function issueInvoice(rufen, anfrage) {
112
- const daten = await rufen('issueInvoice', nutzlast(anfrage));
112
+ async function issueInvoice(transport, request) {
113
+ const daten = await transport('issueInvoice', nutzlast(request));
113
114
  const ergebnis = {
114
115
  invoice: pflichtObjekt('issueInvoice', daten, 'invoice'),
115
116
  replayed: objekt(daten)['replayed'] === true,
@@ -129,16 +130,16 @@ async function issueInvoice(rufen, anfrage) {
129
130
  * danach unveraendert ausstellen. Verbindlich ist das Ausstellen — zwischen
130
131
  * Probelauf und Ausstellen kann sich der Kunde oder das Konto aendern.
131
132
  */
132
- async function previewInvoice(rufen, anfrage) {
133
- const daten = await rufen('issueInvoice', { ...nutzlast(anfrage), dryRun: true });
133
+ async function previewInvoice(transport, request) {
134
+ const daten = await transport('issueInvoice', { ...nutzlast(request), dryRun: true });
134
135
  const ergebnis = { preview: pflichtObjekt('issueInvoice', daten, 'preview') };
135
136
  const notice = hinweise(daten);
136
137
  if (notice)
137
138
  ergebnis.notice = notice;
138
139
  return ergebnis;
139
140
  }
140
- async function cancelInvoice(rufen, anfrage) {
141
- const daten = await rufen('cancelInvoice', nutzlast(anfrage));
141
+ async function cancelInvoice(transport, request) {
142
+ const daten = await transport('cancelInvoice', nutzlast(request));
142
143
  return {
143
144
  creditNote: pflichtObjekt('cancelInvoice', daten, 'creditNote'),
144
145
  original: pflichtObjekt('cancelInvoice', daten, 'original'),
@@ -146,21 +147,21 @@ async function cancelInvoice(rufen, anfrage) {
146
147
  replayed: objekt(daten)['replayed'] === true,
147
148
  };
148
149
  }
149
- async function createCreditNote(rufen, anfrage) {
150
- const daten = await rufen('createCreditNote', nutzlast(anfrage));
150
+ async function createCreditNote(transport, request) {
151
+ const daten = await transport('createCreditNote', nutzlast(request));
151
152
  return {
152
153
  creditNote: pflichtObjekt('createCreditNote', daten, 'creditNote'),
153
154
  remainingCents: zahl(objekt(daten)['remainingCents']),
154
155
  replayed: objekt(daten)['replayed'] === true,
155
156
  };
156
157
  }
157
- async function getInvoice(rufen, kennung) {
158
- kennungVerlangen('getInvoice', kennung, '{ invoiceId } oder { number }');
159
- const daten = await rufen('getInvoice', nutzlast(kennung));
158
+ async function getInvoice(transport, ref) {
159
+ kennungVerlangen('getInvoice', ref, '{ invoiceId } oder { number }');
160
+ const daten = await transport('getInvoice', nutzlast(ref));
160
161
  return pflichtObjekt('getInvoice', daten, 'invoice');
161
162
  }
162
- async function listInvoices(rufen, abfrage = {}) {
163
- const daten = await rufen('listInvoices', nutzlast(abfrage));
163
+ async function listInvoices(transport, query = {}) {
164
+ const daten = await transport('listInvoices', nutzlast(query));
164
165
  const { eintraege, nextCursor } = seite('listInvoices', daten, 'invoices');
165
166
  return { invoices: eintraege, nextCursor };
166
167
  }
@@ -170,8 +171,8 @@ async function listInvoices(rufen, abfrage = {}) {
170
171
  * ohne Freigabe und vor der Live-Freischaltung — genau dann braucht man die
171
172
  * Antwort. Vor dem ersten `issueInvoice` aufrufen und `missing` anzeigen.
172
173
  */
173
- async function getInvoiceSetupStatus(rufen) {
174
- const daten = objekt(await rufen('getInvoiceSetupStatus', {}));
174
+ async function getInvoiceSetupStatus(transport) {
175
+ const daten = objekt(await transport('getInvoiceSetupStatus', {}));
175
176
  if (typeof daten['ready'] !== 'boolean' || !Array.isArray(daten['missing'])) {
176
177
  throw new errors_js_1.KasseneckValidationError('getInvoiceSetupStatus', 'Antwort ohne ready/missing', 'response');
177
178
  }
@@ -188,11 +189,11 @@ async function getInvoiceSetupStatus(rufen) {
188
189
  * eine **Uebersetzungskopie**: dieselbe Nummer, auf jeder Seite als Uebersetzung
189
190
  * gekennzeichnet, ohne eingebettete E-Rechnung — keine eigene Rechnung.
190
191
  */
191
- function getInvoicePdf(rufenBinaer, invoiceId, optionen = {}) {
192
+ function getInvoicePdf(binaryTransport, invoiceId, options = {}) {
192
193
  const params = { invoiceId };
193
- if (optionen.language)
194
- params['language'] = optionen.language;
195
- return rufenBinaer('getInvoicePdf', params);
194
+ if (options.language)
195
+ params['language'] = options.language;
196
+ return binaryTransport('getInvoicePdf', params);
196
197
  }
197
198
  /**
198
199
  * Eine Zahlung nachtragen, die nach dem Ausstellen eingetroffen ist
@@ -203,8 +204,8 @@ function getInvoicePdf(rufenBinaer, invoiceId, optionen = {}) {
203
204
  * zusaetzlich `notice` — eine Barzahlung ist ein Barumsatz und braucht einen
204
205
  * Beleg (§ 132a BAO), den dieser Vermerk nicht ersetzt.
205
206
  */
206
- async function recordInvoicePayment(rufen, anfrage) {
207
- const daten = await rufen('recordInvoicePayment', nutzlast(anfrage));
207
+ async function recordInvoicePayment(transport, request) {
208
+ const daten = await transport('recordInvoicePayment', nutzlast(request));
208
209
  const roh = objekt(daten);
209
210
  const ergebnis = {
210
211
  invoice: pflichtObjekt('recordInvoicePayment', daten, 'invoice'),
@@ -217,22 +218,31 @@ async function recordInvoicePayment(rufen, anfrage) {
217
218
  return ergebnis;
218
219
  }
219
220
  /** Die Marken des Kontos — die Kennung geht als `brandId` in `issueInvoice`. */
220
- async function listBrands(rufen) {
221
- const brands = objekt(await rufen('listBrands', {}))['brands'];
221
+ async function listBrands(transport) {
222
+ const brands = objekt(await transport('listBrands', {}))['brands'];
222
223
  if (!Array.isArray(brands))
223
224
  throw new errors_js_1.KasseneckValidationError('listBrands', 'Antwort ohne brands', 'response');
224
225
  return brands;
225
226
  }
226
227
  /**
227
- * Die E-Rechnung als XML-Text. Sie kommt im gewohnten Umschlag (`data.xml`)
228
- * und nicht als rohe Datei: so bleibt ein fachlicher Fehler
229
- * (`einvoice_incomplete` mit `missing[]`) ein gewoehnlicher Fehler.
228
+ * Die E-Rechnung samt Format und Dateiname, genau wie der Server sie schickt.
229
+ * Sie kommt im gewohnten Umschlag (`data.xml`) und nicht als rohe Datei: so
230
+ * bleibt ein fachlicher Fehler (`einvoice_incomplete` mit `missing[]`) ein
231
+ * gewoehnlicher Fehler. Den Dateinamen nicht selbst bauen, sondern
232
+ * `filename` nehmen (`invoice-<Nummer>.xml`).
230
233
  */
231
- async function getInvoiceXml(rufen, invoiceId, format = 'ubl') {
232
- const daten = await rufen('getInvoiceXml', { invoiceId, format });
233
- const xml = objekt(daten)['xml'];
234
+ async function getInvoiceXml(transport, invoiceId, format = 'ubl') {
235
+ const daten = objekt(await transport('getInvoiceXml', { invoiceId, format }));
236
+ const { xml, filename } = daten;
237
+ const gesendet = daten['format'];
234
238
  if (typeof xml !== 'string' || !xml) {
235
239
  throw new errors_js_1.KasseneckValidationError('getInvoiceXml', 'Antwort ohne xml', 'response');
236
240
  }
237
- return xml;
241
+ if (typeof gesendet !== 'string' || !vertrag_js_1.EINVOICE_FORMATS.includes(gesendet)) {
242
+ throw new errors_js_1.KasseneckValidationError('getInvoiceXml', 'Antwort ohne gueltiges format', 'response');
243
+ }
244
+ if (typeof filename !== 'string' || !filename) {
245
+ throw new errors_js_1.KasseneckValidationError('getInvoiceXml', 'Antwort ohne filename', 'response');
246
+ }
247
+ return { xml, format: gesendet, filename };
238
248
  }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Fehler der Rechnungs-API auswerten: am Code, nie am Text.
3
+ *
4
+ * Es zaehlen die Codes des Vertrags ([INVOICE_ERROR_CODES]) und die, die
5
+ * Anmeldung und Rand auf jedem Rechnungsaufruf erzeugen koennen
6
+ * ([INVOICE_REQUEST_ERROR_CODES], z. B. `dialect_mismatch`, `not_found`,
7
+ * `route_missing`). Ein fremder Code ist fuer diese Helfer kein
8
+ * Rechnungs-Fehler: wer darauf verzweigt, soll es bewusst ueber
9
+ * `KasseneckApiError.code` tun.
10
+ */
11
+ import type { KasseneckApiError } from '../client/errors.js';
12
+ import { type InvoiceErrorCode, type InvoiceRequestErrorCode } from './vertrag.js';
13
+ /** Ein Code, den ein Rechnungsaufruf liefern kann. */
14
+ export type InvoiceApiErrorCode = InvoiceErrorCode | InvoiceRequestErrorCode;
15
+ /** `true` fuer einen Code aus [INVOICE_ERROR_CODES] oder [INVOICE_REQUEST_ERROR_CODES]. */
16
+ export declare function isInvoiceErrorCode(value: unknown): value is InvoiceApiErrorCode;
17
+ /** Der Fehlercode eines geworfenen Fehlers; `undefined`, wenn es keiner der Rechnungs-API ist. */
18
+ export declare function invoiceErrorCode(error: unknown): InvoiceApiErrorCode | undefined;
19
+ /**
20
+ * Kurzform fuer `catch (e) { if (isInvoiceError(e, 'customer_exists')) … }`.
21
+ * Ohne `code`: ist es ueberhaupt ein Fehler der Rechnungs-API?
22
+ */
23
+ export declare function isInvoiceError(error: unknown, code?: InvoiceApiErrorCode): error is KasseneckApiError;
24
+ /** Ein Feldfehler aus `data.errors[]` einer `validation`-Antwort. */
25
+ export interface InvoiceFieldError {
26
+ /** Feldpfad in der gesendeten Anfrage, z. B. `items[2].vatRate` oder `customer.vatId`. */
27
+ field: string;
28
+ message: string;
29
+ }
30
+ /** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
31
+ export declare function invoiceFieldErrors(error: unknown): InvoiceFieldError[];
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /**
3
+ * Fehler der Rechnungs-API auswerten: am Code, nie am Text.
4
+ *
5
+ * Es zaehlen die Codes des Vertrags ([INVOICE_ERROR_CODES]) und die, die
6
+ * Anmeldung und Rand auf jedem Rechnungsaufruf erzeugen koennen
7
+ * ([INVOICE_REQUEST_ERROR_CODES], z. B. `dialect_mismatch`, `not_found`,
8
+ * `route_missing`). Ein fremder Code ist fuer diese Helfer kein
9
+ * Rechnungs-Fehler: wer darauf verzweigt, soll es bewusst ueber
10
+ * `KasseneckApiError.code` tun.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.isInvoiceErrorCode = isInvoiceErrorCode;
14
+ exports.invoiceErrorCode = invoiceErrorCode;
15
+ exports.isInvoiceError = isInvoiceError;
16
+ exports.invoiceFieldErrors = invoiceFieldErrors;
17
+ const fehlercodes_js_1 = require("../client/fehlercodes.js");
18
+ const vertrag_js_1 = require("./vertrag.js");
19
+ const BEKANNT = new Set([...vertrag_js_1.INVOICE_ERROR_CODES, ...vertrag_js_1.INVOICE_REQUEST_ERROR_CODES]);
20
+ /** `true` fuer einen Code aus [INVOICE_ERROR_CODES] oder [INVOICE_REQUEST_ERROR_CODES]. */
21
+ function isInvoiceErrorCode(value) {
22
+ return typeof value === 'string' && BEKANNT.has(value);
23
+ }
24
+ /** Der Fehlercode eines geworfenen Fehlers; `undefined`, wenn es keiner der Rechnungs-API ist. */
25
+ function invoiceErrorCode(error) {
26
+ return (0, fehlercodes_js_1.bekannterCode)(error, BEKANNT);
27
+ }
28
+ /**
29
+ * Kurzform fuer `catch (e) { if (isInvoiceError(e, 'customer_exists')) … }`.
30
+ * Ohne `code`: ist es ueberhaupt ein Fehler der Rechnungs-API?
31
+ */
32
+ function isInvoiceError(error, code) {
33
+ const gefunden = invoiceErrorCode(error);
34
+ return gefunden !== undefined && (code === undefined || gefunden === code);
35
+ }
36
+ /** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
37
+ function invoiceFieldErrors(error) {
38
+ return (0, fehlercodes_js_1.feldfehlerVon)(error);
39
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * `@kreiseck/kasseneck-api/invoice` – Rechnungen (§ 11 UStG, keine Belege)
3
+ * und Kunden ueber die Rechnungs-API.
4
+ *
5
+ * Ein eigener Unterpfad wie `partner`: der `api_key` eines Kontos, mit dem
6
+ * Rechnungen ausgestellt werden, gehoert auf einen **Server** und soll nicht
7
+ * versehentlich in ein Browser-Buendel der Kasse wandern.
8
+ *
9
+ * Die Beschreibung der Endpunkte steht in der Referenz des Backends
10
+ * (`docs/api/rechnungen.md`). Was hier steht, ist der Vertrag als Daten und die
11
+ * Benutzung des Clients.
12
+ */
13
+ export { createInvoiceApi, type InvoiceApi, type InvoiceApiOptions } from './api.js';
14
+ export { invoiceKeyAuth, type InvoiceKeyAuthOptions } from './auth.js';
15
+ export { isInvoiceError, isInvoiceErrorCode, invoiceErrorCode, invoiceFieldErrors, type InvoiceApiErrorCode, type InvoiceFieldError, } from './fehler.js';
16
+ export { cancelInvoice, createCreditNote, createCustomer, getCustomer, getInvoice, getInvoicePdf, getInvoiceSetupStatus, getInvoiceXml, issueInvoice, listBrands, listInvoices, previewInvoice, recordInvoicePayment, searchCustomers, updateCustomer, } from './endpunkte.js';
17
+ export type { Brand, CancelInvoiceRequest, CancelResult, CreditNoteRequest, CreditNoteResult, Customer, CustomerInput, CustomerPage, CustomerSearch, EInvoiceStatus, Invoice, InvoiceDetail, InvoiceDetailPayment, InvoiceItem, InvoiceItemInput, InvoiceListQuery, InvoicePage, InvoiceRecipient, InvoiceSetupGap, InvoiceSetupStatus, InvoiceTotals, InvoiceXml, InvoiceNotice, InvoicePayment, InvoicePreview, InvoiceRateTotals, IssueInvoiceRequest, IssueResult, PaymentInput, PreviewResult, RecordPaymentRequest, RecordPaymentResult, } from './typen.js';
18
+ export { INVOICE_TEXTS, invoiceText, type InvoiceTextKey } from './texte.js';
19
+ export { computeInvoiceTotals, ZERO_RATED_TAX_SCHEMES, type TotalsItem } from './summen.js';
20
+ export { proratedPriceMicros, MAX_AMOUNT_CENTS, itemFromEuro, formatUnitPrice, CalcError, calculateInvoice, roundDiv, vatRateMapKey, formatVatRate, type CalcResult, type CalcErrorCode, type CalcOptions, type CalcItem, type RateTotal, type ItemConversion, type ConversionReason, type LineAmount, } from './calc.js';
21
+ export { INVOICE_CONTRACT_VERSION, INVOICE_ENDPOINTS, INVOICE_ERROR_CODES, INVOICE_REQUEST_ERROR_CODES, CREDIT_NOTE_REASONS, TAX_SCHEMES, PRICE_MODES, VAT_RATES, CUSTOMER_TYPES, INVOICE_LIST_STATUS, DOC_TYPES, EINVOICE_FORMATS, EINVOICE_MISSING_CODES, WRITE_OFF_REASON_CODES, INVOICE_LANGUAGES, INVOICE_PAYMENT_METHODS, ITEM_KINDS, REVERSE_CHARGE_REASONS, INVOICE_NOTICE_CODES, INVOICE_UNITS, INVOICE_UNIT_CODES, INVOICE_SETUP_REQUIREMENTS, CUSTOMER_FIELDS, ITEM_FIELDS, ITEM_PRICE_EXACTLY_ONE, INVOICE_REQUESTS, INVOICE_EXACTLY_ONE, INVOICE_AT_LEAST_ONE, type InvoiceEndpoint, type InvoiceErrorCode, type InvoiceRequestErrorCode, type CreditNoteReason, type TaxScheme, type PriceMode, type VatRatePercent, type CustomerType, type InvoiceListStatus, type DocType, type EInvoiceFormat, type EInvoiceMissingCode, type WriteOffReasonCode, type InvoiceLanguage, type InvoicePaymentMethod, type ItemKind, type ReverseChargeReason, type InvoiceNoticeCode, type InvoiceUnit, type InvoiceSetupRequirement, type FieldFormat, type Field, } from './vertrag.js';