@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
@@ -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';