@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
@@ -0,0 +1,196 @@
1
+ import { POS_BUSINESS_DEFAULTS, POS_BUSINESS_VALUES, POS_DEVICE_DEFAULTS, POS_DEVICE_VALUES, POS_SHORTCUT_DEFAULTS, POS_SHORTCUT_SHARED_PAIRS, } from '../pos/settings.js';
2
+ import { hat, innereNamen, istObjekt, regel } from './draht.js';
3
+ import { KATALOGE, SCHEMAS } from './vokabular.js';
4
+ const bool = (v) => typeof v === 'boolean';
5
+ const hex = (v) => typeof v === 'string' && /^#[0-9a-fA-F]{6}$/.test(v);
6
+ const kuerzel = (v) => typeof v === 'string' && /^[A-Za-z0-9]{1,3}$/.test(v);
7
+ const ganz = (min, max) => (v) => Number.isInteger(v) && v >= min && v <= max;
8
+ const ip = (v) => v === '' || (typeof v === 'string' && /^(\d{1,3}\.){3}\d{1,3}$/.test(v) && v.split('.').every((t) => Number(t) <= 255));
9
+ const kennung = (v) => typeof v === 'string' && v.length <= 64 && /^[\w:.\- ]*$/.test(v);
10
+ // eslint-disable-next-line no-control-regex
11
+ const UNSICHTBAR = /[\u0000-\u001F\u007F-\u009F\u200B-\u200F\u2028\u2029\u202A-\u202E\u2060\u2066-\u2069\uFEFF]/;
12
+ const klartext = (v) => typeof v === 'string' && v.length <= 64 && !UNSICHTBAR.test(v) && (v === '' || v.trim() !== '');
13
+ const tid = (v) => typeof v === 'string' && /^\d{0,16}$/.test(v);
14
+ const prozentChips = (v) => {
15
+ if (!Array.isArray(v) || v.length > 5)
16
+ return false;
17
+ const gesehen = [];
18
+ for (const x of v) {
19
+ if (typeof x !== 'number' || !Number.isFinite(x) || x <= 0 || x > 100)
20
+ return false;
21
+ const r = Math.round(x * 10) / 10;
22
+ if (r !== x || gesehen.includes(r))
23
+ return false;
24
+ gesehen.push(r);
25
+ }
26
+ return true;
27
+ };
28
+ const logoBildUrl = (v) => v === '' || (typeof v === 'string' && v.length <= 600 && v.startsWith('https://firebasestorage.googleapis.com/'));
29
+ /** Pruefer je aeusserem Feld, soweit das Feld keine Aufzaehlung und keine Karte ist. */
30
+ const PRUEFER = {
31
+ business: {
32
+ logoText: kuerzel, logoEnabled: bool, color: hex, clock: bool, lockScreen: bool, staffPhotos: bool, logoutAfterSale: bool,
33
+ fastLogin: bool, showPrices: bool, showVat: bool, emoji: bool, categoryColors: bool, customAmountAllowed: bool,
34
+ note: bool, search: bool, payCash: bool, payCard: bool, tip: bool, tipSplit: bool, change: bool, exactCash: bool,
35
+ paySplit: bool, tipChips: prozentChips, logoImage: logoBildUrl, watermarkX: ganz(-25, 125), watermarkY: ganz(-25, 125),
36
+ glass: bool, hints: bool, discountChips: prozentChips,
37
+ },
38
+ device: {
39
+ extraColumns: ganz(-2, 4), touch: bool, printerEnabled: bool, printerIp: ip, printerPort: ganz(1, 65535),
40
+ printerBluetoothId: kennung, printerName: klartext, printerId: kennung, printerDeviceId: kennung, connectPrinterId: kennung,
41
+ drawerEnabled: bool, terminalIp: ip, terminalPort: ganz(1, 65535), terminalTid: tid, shortcutHints: bool,
42
+ },
43
+ };
44
+ /** Aufzaehlungen (aussen, englisch) je Teil. */
45
+ const AUFZAEHLUNGEN = {
46
+ business: POS_BUSINESS_VALUES, device: POS_DEVICE_VALUES,
47
+ };
48
+ /** Schalter-Karten: erlaubte Schluessel (Backend STEUERSAETZE, TG_STUFEN = Schluessel der Vorgabe). */
49
+ const KARTEN = {
50
+ vatRates: Object.keys(POS_BUSINESS_DEFAULTS.vatRates),
51
+ tipSteps: Object.keys(POS_BUSINESS_DEFAULTS.tipSteps),
52
+ };
53
+ /** Tastenmuster (Backend TASTE_MUSTER). */
54
+ const TASTE_MUSTER = /^((Ctrl|Alt|Shift|Meta|Mod)\+){0,3}([A-Z0-9]|F\d{1,2}|Enter|Escape|Backspace|Space|Tab|Delete|Arrow(Up|Down|Left|Right)|[+\-*/.,])$/;
55
+ /** Schema-Teil (aussen -> innen) und die Kataloge seiner Werte. */
56
+ function teilSchema(teil) {
57
+ return regel(SCHEMAS.getKasseSettings.data[teil]).unter;
58
+ }
59
+ function katalogFuer(teil, aussen) {
60
+ const verweis = SCHEMAS.getKasseSettings.werte[`${teil}.${aussen}`];
61
+ return verweis ? KATALOGE[verweis.$catalog] ?? null : null;
62
+ }
63
+ /** Tasten: aeussere und innere Aktionsnamen, Vorgabe und Paare in innerer Form. */
64
+ const TASTEN_SCHEMA = regel(teilSchema('device').shortcuts).unter;
65
+ const AKTION_AUSSEN = innereNamen(TASTEN_SCHEMA); // innen -> aussen
66
+ const AKTION_INNEN = new Map([...AKTION_AUSSEN].map(([i, a]) => [a, i]));
67
+ const innen = (aktion) => AKTION_INNEN.get(aktion) ?? aktion;
68
+ const TASTEN_VORGABE_INNEN = Object.fromEntries(Object.entries(POS_SHORTCUT_DEFAULTS).map(([a, t]) => [innen(a), [...t]]));
69
+ const darfTeilen = (a, b) => POS_SHORTCUT_SHARED_PAIRS.some(([x, y]) => (innen(x) === a && innen(y) === b) || (innen(x) === b && innen(y) === a));
70
+ /** Zwilling von `entwirreTasten`: die gespeicherte Wahl gewinnt, eine beanspruchte Vorgabe-Taste faellt. */
71
+ function entwirreTasten(gemischt, gespeichert) {
72
+ const beansprucht = new Map();
73
+ for (const [aktion, tasten] of Object.entries(gespeichert)) {
74
+ if (!Array.isArray(tasten))
75
+ continue;
76
+ for (const t of tasten)
77
+ beansprucht.set(t, aktion);
78
+ }
79
+ const raus = {};
80
+ for (const [aktion, tasten] of Object.entries(gemischt)) {
81
+ if (!Array.isArray(tasten) || aktion in gespeichert) {
82
+ raus[aktion] = tasten;
83
+ continue;
84
+ }
85
+ raus[aktion] = tasten.filter((t) => {
86
+ const inhaber = beansprucht.get(t);
87
+ return !inhaber || inhaber === aktion || darfTeilen(inhaber, aktion);
88
+ });
89
+ }
90
+ return raus;
91
+ }
92
+ /** Nimmt `tastenkarte` diesen einen Eintrag an? (bekannte Aktion, 0-3 Tasten im Muster) */
93
+ function tasteGueltig(aktion, tasten) {
94
+ if (!AKTION_AUSSEN.has(aktion))
95
+ return false;
96
+ return Array.isArray(tasten) && tasten.length <= 3 && tasten.every((t) => typeof t === 'string' && TASTE_MUSTER.test(t));
97
+ }
98
+ /**
99
+ * Ein Aufzaehlungswert: gueltig (innen bekannt), unbekannt vom richtigen Typ
100
+ * (bleibt, siehe oben) oder ungueltig. Innen gilt die Liste des Servers, also
101
+ * die aeussere Liste durch den Katalog zurueck: ein englischer Wert im
102
+ * gespeicherten Stand (`stil: 'night'`) ist dort ungueltig.
103
+ */
104
+ function aufzaehlung(liste, katalog, w) {
105
+ const zurueck = new Map(Object.entries(katalog ?? {}).map(([i, a]) => [a, i]));
106
+ const innenListe = liste.map((a) => (typeof a === 'string' && zurueck.has(a) ? zurueck.get(a) : a));
107
+ if (innenListe.includes(w))
108
+ return 'gueltig';
109
+ if (typeof w !== typeof liste[0])
110
+ return 'ungueltig';
111
+ if (liste.includes(w) || zurueck.has(w))
112
+ return 'ungueltig';
113
+ return 'unbekannt';
114
+ }
115
+ function teilNachAussen(teil, gespeichert, weg) {
116
+ if (!istObjekt(gespeichert))
117
+ return {};
118
+ const schema = teilSchema(teil);
119
+ const aussenName = innereNamen(schema); // innen -> aussen
120
+ const raus = {};
121
+ for (const [k, w] of Object.entries(gespeichert)) {
122
+ const aussen = aussenName.get(k);
123
+ // mische: was innen unbekannt ist, kommt gar nicht erst in den Stand.
124
+ if (aussen === undefined || w === undefined)
125
+ continue;
126
+ const pfad = `${teil}.${aussen}`;
127
+ if (aussen === 'shortcuts') {
128
+ if (!w || typeof w !== 'object') {
129
+ weg.push(pfad);
130
+ continue;
131
+ }
132
+ let gemischt = Object.assign({}, TASTEN_VORGABE_INNEN, w);
133
+ if (!Array.isArray(w))
134
+ gemischt = entwirreTasten(gemischt, w);
135
+ const karte = {};
136
+ for (const [aktion, tasten] of Object.entries(gemischt)) {
137
+ if (tasteGueltig(aktion, tasten))
138
+ karte[AKTION_AUSSEN.get(aktion)] = tasten;
139
+ else
140
+ weg.push(`${pfad}.${AKTION_AUSSEN.get(aktion) ?? aktion}`);
141
+ }
142
+ raus[aussen] = karte;
143
+ continue;
144
+ }
145
+ if (hat(KARTEN, aussen)) {
146
+ if (!w || typeof w !== 'object') {
147
+ weg.push(pfad);
148
+ continue;
149
+ }
150
+ const karte = {};
151
+ for (const [sk, sw] of Object.entries(w)) {
152
+ if (KARTEN[aussen].includes(sk) && typeof sw === 'boolean')
153
+ karte[sk] = sw;
154
+ else
155
+ weg.push(`${pfad}.${sk}`);
156
+ }
157
+ raus[aussen] = karte;
158
+ continue;
159
+ }
160
+ const liste = AUFZAEHLUNGEN[teil][aussen];
161
+ if (liste) {
162
+ const katalog = katalogFuer(teil, aussen);
163
+ const art = aufzaehlung(liste, katalog, w);
164
+ if (art === 'ungueltig') {
165
+ weg.push(pfad);
166
+ continue;
167
+ }
168
+ raus[aussen] = katalog && typeof w === 'string' && hat(katalog, w) ? katalog[w] : w;
169
+ continue;
170
+ }
171
+ const pruefer = PRUEFER[teil][aussen];
172
+ if (pruefer && pruefer(w))
173
+ raus[aussen] = w;
174
+ else
175
+ weg.push(pfad);
176
+ }
177
+ return raus;
178
+ }
179
+ /**
180
+ * Gespeicherte Einstellungen `{ betrieb, geraet }` in der Drahtform, nur die
181
+ * gespeicherten und gueltigen Felder (die Vorgaben mischt der Leser dazu),
182
+ * und die weggelassenen aeusseren Pfade.
183
+ */
184
+ export function _storedPosSettingsToWire(stored) {
185
+ const s = istObjekt(stored) ? stored : {};
186
+ const weg = [];
187
+ const business = teilNachAussen('business', s.betrieb, weg);
188
+ const device = teilNachAussen('device', s.geraet, weg);
189
+ return { business, device, weggelassen: weg };
190
+ }
191
+ /** Nur fuer den Test: die Feldliste der Pruefer (muss mit der Vorgabe deckungsgleich sein). */
192
+ export const _PRUEFER_FELDER = Object.freeze({
193
+ business: [...Object.keys(PRUEFER.business), ...Object.keys(POS_BUSINESS_VALUES), ...Object.keys(KARTEN)],
194
+ device: [...Object.keys(PRUEFER.device), ...Object.keys(POS_DEVICE_VALUES), 'shortcuts'],
195
+ standard: { business: Object.keys(POS_BUSINESS_DEFAULTS), device: Object.keys(POS_DEVICE_DEFAULTS) },
196
+ });
@@ -0,0 +1,109 @@
1
+ /**
2
+ * `@kreiseck/kasseneck-api/stored`: gespeicherte Firestore-Dokumente (innen,
3
+ * deutsch) als dieselben englischen Modelle, die der Draht `/v3` liefert.
4
+ *
5
+ * Fuer Verbraucher, die Firestore direkt lesen (Admin-Panel, Echtzeit-Listener
6
+ * auf Belege). So gibt es in 1.0 ein englisches Modell und keinen zweiten
7
+ * Draht-Dialekt: jede Funktion hier uebersetzt das Dokument genau so, wie der
8
+ * Server es unter `/v3` bzw. `/api/v3` hinausgibt (Schluessel und Werte aus
9
+ * dem Vertrags-Export `fixtures/v3/v3-vokabular.json`), und liest das
10
+ * Ergebnis dann mit demselben Leser wie eine Antwort. Ein Test haelt jedes
11
+ * gespeicherte Dokument des Vertrags gegen seine Antwort.
12
+ *
13
+ * Belege kommen im Kanal der Kasse (`app`): mit Anbieterdaten der Zahlungen
14
+ * (`payments[].providerData`/`providerPaymentId`, alte Kartenfelder).
15
+ */
16
+ import { type ReceiptWithCompany } from '../client/receipts.js';
17
+ import { type ReceiptCompany } from '../models/receipt-company.js';
18
+ import type { Receipt, RegistrationInfo } from '../models/receipt.js';
19
+ import { type PosSettings } from '../pos/settings.js';
20
+ import { type PosArticle } from '../pos/artikel.js';
21
+ /** Ein Firestore-Dokument mit seiner Kennung (die nicht in den Daten steht). */
22
+ export interface StoredDocument {
23
+ id: string;
24
+ data: unknown;
25
+ }
26
+ /**
27
+ * Ein Belegdokument (`users/{uid}/cashregisters/{id}/receipts/{id}`) als
28
+ * [Receipt], wie `getReceipt` am Kassenweg ihn liefert. Wirft
29
+ * `KasseneckValidationError`, wenn es kein Belegdokument ist.
30
+ */
31
+ export declare function fromStoredReceipt(doc: unknown): Receipt;
32
+ export interface StoredReceiptOptions {
33
+ /**
34
+ * Die Kopf-Version dieses Belegs (`users/{uid}/beleg_kopf/{id}`): die mit
35
+ * `receipt.headerVersionId` (gespeichert `kopfId`), bei Altbelegen ohne
36
+ * Zuordnung die zum Belegzeitpunkt gueltige (`gueltigAb`/`gueltigBis`).
37
+ */
38
+ headerVersion: StoredDocument;
39
+ /**
40
+ * Das Kontodokument (`users/{uid}`): Logo, wenn die Version noch keines
41
+ * kennt, und die Logo-Stufe (`register_settings.kasse.logoSkala`).
42
+ */
43
+ account?: unknown;
44
+ /** Konto einer Testumgebung (Aufdruck TESTKASSE, keine Testsignatur-Warnung). */
45
+ testCashregister?: boolean;
46
+ /**
47
+ * Registrierdaten fuer einen Nullbeleg, der sie nicht selbst traegt
48
+ * (Altbestand; der Server schlaegt sie an Karte und Kasse nach). Fehlt die
49
+ * Angabe, bleiben beide Zeitpunkte leer.
50
+ */
51
+ registrationInfo?: RegistrationInfo;
52
+ }
53
+ /**
54
+ * Ein Belegdokument samt Firma und Layout, wie `getReceiptWithCompany` am
55
+ * Kassenweg es liefert: Kopf und Fuss aus der Kopf-Version, das Layout mit
56
+ * demselben Regelwerk und in derselben Breite (80 mm) wie am Server.
57
+ */
58
+ export declare function fromStoredReceiptWithCompany(doc: unknown, options: StoredReceiptOptions): ReceiptWithCompany;
59
+ /**
60
+ * Eine Kopf-Version (`users/{uid}/beleg_kopf/{id}`) als [ReceiptCompany], wie
61
+ * die Beleg-Antwort sie traegt. `receipt`: ein Nullbeleg traegt kein Logo;
62
+ * `account`: kennt die Version noch kein Logo, gilt das des Kontos.
63
+ */
64
+ export declare function fromStoredCompany(headerVersion: unknown, options?: {
65
+ account?: unknown;
66
+ receipt?: {
67
+ receiptType?: unknown;
68
+ };
69
+ }): ReceiptCompany;
70
+ /**
71
+ * Gespeicherte Kassen-Einstellungen als [PosSettings], wie `getKasseSettings`
72
+ * am Kassenweg sie liefert: `betrieb` aus
73
+ * `users/{uid}.register_settings.kasse`, `geraet` aus
74
+ * `users/{uid}/register_devices/{id}.kasse` (fehlt = Vorgaben).
75
+ *
76
+ * Wie am Server faellt weg, was der Validator beim Lesen nicht annimmt: ein
77
+ * fremder Steuersatz oder eine fremde Trinkgeldstufe, eine unbekannte
78
+ * Tasten-Aktion (erst nach dem Entwirren der Tasten, wie `mische`), eine Taste
79
+ * ausserhalb des Musters, ein Wert ausserhalb seines Bereichs oder Musters
80
+ * (`wzPos: 500`, Farbe, IP). An seiner Stelle steht die Vorgabe;
81
+ * [invalidStoredPosSettings] nennt jeden solchen Pfad. So schickt ein
82
+ * spaeteres Speichern nie einen Eintrag, den der Server abweist.
83
+ *
84
+ * Einzige Ausnahme: ein unbekannter Wert eines Aufzaehlungsfeldes vom
85
+ * richtigen Typ (`stil: 'sepia'`) bleibt woertlich stehen wie ein unbekannter
86
+ * Wert vom Draht; [unknownPosSettingValues] nennt ihn. Reste der inneren Form
87
+ * 0.x fallen auf die Vorgabe zurueck.
88
+ */
89
+ export declare function fromStoredPosSettings(stored: {
90
+ betrieb?: unknown;
91
+ geraet?: unknown;
92
+ } | null | undefined): PosSettings;
93
+ /**
94
+ * Die aeusseren Pfade (`business.watermarkX`, `business.vatRates.7`,
95
+ * `device.shortcuts.cash`), deren gespeicherten Wert der Server beim Lesen
96
+ * weglaesst und [fromStoredPosSettings] darum durch die Vorgabe ersetzt. Fuer
97
+ * die Anzeige „gespeicherter Wert ungueltig, Vorgabe gilt“.
98
+ */
99
+ export declare function invalidStoredPosSettings(stored: {
100
+ betrieb?: unknown;
101
+ geraet?: unknown;
102
+ } | null | undefined): string[];
103
+ /**
104
+ * Ein Artikeldokument (`users/{uid}/articles/{id}`) als [PosArticle], wie
105
+ * `listMyArticles` am Kassenweg ihn liefert. Felder, die kein Schreibweg
106
+ * kennt, und Katalogwerte, die der Vertrag nicht kennt, fallen wie am Server
107
+ * weg.
108
+ */
109
+ export declare function fromStoredArticle(id: string, stored: unknown): PosArticle;
@@ -0,0 +1,217 @@
1
+ /**
2
+ * `@kreiseck/kasseneck-api/stored`: gespeicherte Firestore-Dokumente (innen,
3
+ * deutsch) als dieselben englischen Modelle, die der Draht `/v3` liefert.
4
+ *
5
+ * Fuer Verbraucher, die Firestore direkt lesen (Admin-Panel, Echtzeit-Listener
6
+ * auf Belege). So gibt es in 1.0 ein englisches Modell und keinen zweiten
7
+ * Draht-Dialekt: jede Funktion hier uebersetzt das Dokument genau so, wie der
8
+ * Server es unter `/v3` bzw. `/api/v3` hinausgibt (Schluessel und Werte aus
9
+ * dem Vertrags-Export `fixtures/v3/v3-vokabular.json`), und liest das
10
+ * Ergebnis dann mit demselben Leser wie eine Antwort. Ein Test haelt jedes
11
+ * gespeicherte Dokument des Vertrags gegen seine Antwort.
12
+ *
13
+ * Belege kommen im Kanal der Kasse (`app`): mit Anbieterdaten der Zahlungen
14
+ * (`payments[].providerData`/`providerPaymentId`, alte Kartenfelder).
15
+ */
16
+ import { belegAusHuelle, belegMitFirmaAusHuelle } from '../client/receipts.js';
17
+ import { fromReceiptCompanyPayload } from '../models/receipt-company.js';
18
+ import { buildReceiptLayout, CURRENT_LAYOUT_RULESET, receiptSignatureIsTest } from '../receipt/layout.js';
19
+ import { sanitizePosSettings } from '../pos/settings.js';
20
+ import { fromPosArticlePayload } from '../pos/artikel.js';
21
+ import { KasseneckValidationError } from '../client/errors.js';
22
+ import { _receiptEnvelopeToWire, _storedArticleToWire, _storedReceiptInner, _storedReceiptToWire, pruefangabenDerHuelle, } from './draht.js';
23
+ import { _storedPosSettingsToWire } from './einstellungen.js';
24
+ const istObjekt = (w) => w !== null && typeof w === 'object' && !Array.isArray(w);
25
+ // ---- Belege -----------------------------------------------------------------
26
+ /**
27
+ * Ein Belegdokument (`users/{uid}/cashregisters/{id}/receipts/{id}`) als
28
+ * [Receipt], wie `getReceipt` am Kassenweg ihn liefert. Wirft
29
+ * `KasseneckValidationError`, wenn es kein Belegdokument ist.
30
+ */
31
+ export function fromStoredReceipt(doc) {
32
+ return belegAusHuelle({ receipt: zeilenAlsText(_storedReceiptToWire(doc, 'fromStoredReceipt')) }, 'fromStoredReceipt');
33
+ }
34
+ /**
35
+ * Freitextzeilen (`customerDetails`, `legalMessage`) als Liste gespeichert:
36
+ * als Text mit Zeilenumbruechen lesen, wie das Layout am Server
37
+ * (beleg-layout.belegPayload). Bewusst nachsichtiger als der Draht: dort
38
+ * geht die Liste woertlich hinaus, und der Leser des Pakets scheitert an ihr
39
+ * (Backend-Folgepunkt: Huelle oder Leser). Das Panel soll anzeigen statt
40
+ * abzustuerzen.
41
+ */
42
+ function zeilenAlsText(beleg) {
43
+ const raus = { ...beleg };
44
+ for (const feld of ['customerDetails', 'legalMessage']) {
45
+ const w = raus[feld];
46
+ if (Array.isArray(w))
47
+ raus[feld] = w.filter(Boolean).join('\n');
48
+ }
49
+ return raus;
50
+ }
51
+ /**
52
+ * Ein Belegdokument samt Firma und Layout, wie `getReceiptWithCompany` am
53
+ * Kassenweg es liefert: Kopf und Fuss aus der Kopf-Version, das Layout mit
54
+ * demselben Regelwerk und in derselben Breite (80 mm) wie am Server.
55
+ */
56
+ export function fromStoredReceiptWithCompany(doc, options) {
57
+ const name = 'fromStoredReceiptWithCompany';
58
+ if (!istObjekt(options) || !istObjekt(options.headerVersion) || typeof options.headerVersion.id !== 'string') {
59
+ throw new KasseneckValidationError(name, 'headerVersion { id, data } fehlt', 'request');
60
+ }
61
+ const beleg = _storedReceiptInner(doc, name);
62
+ // Die Version muss die des Belegs sein: sonst zeigte er still den heutigen
63
+ // Kopf statt des eingefrorenen (BAO § 131). Altbelege ohne kopfId waehlt der
64
+ // Aufrufer ueber das Zeitfenster.
65
+ if (typeof beleg.kopfId === 'string' && beleg.kopfId !== options.headerVersion.id) {
66
+ throw new KasseneckValidationError(name, `headerVersion ${options.headerVersion.id} ist nicht die Kopf-Version des Belegs (${beleg.kopfId})`, 'request');
67
+ }
68
+ const testKasse = options.testCashregister === true;
69
+ const huelle = {
70
+ receipt: beleg,
71
+ ...betriebsfelder(options.headerVersion.data, options.account, beleg),
72
+ logo_skala: logoStufe(options.account),
73
+ kopfId: options.headerVersion.id,
74
+ pruefangaben: pruefangabenFuer(beleg, options.registrationInfo),
75
+ testSignatur: receiptSignatureIsTest({ qr: typeof beleg.qr === 'string' ? beleg.qr : '' }) && !testKasse,
76
+ testKasse,
77
+ };
78
+ const draht = _receiptEnvelopeToWire(huelle);
79
+ draht.receipt = zeilenAlsText(draht.receipt);
80
+ const raus = belegMitFirmaAusHuelle(draht, name);
81
+ raus.layout = layoutWieServer(raus, beleg.layoutRegeln);
82
+ return raus;
83
+ }
84
+ /**
85
+ * Registrierdaten der Huelle wie `pruefangabenFuerBeleg`: nur Nullbelege;
86
+ * festgehaltene `pruefangaben` des Belegs gehen vor, sonst die Angabe des
87
+ * Aufrufers (der Server schlaegt dann an Karte und Kasse nach), sonst leer.
88
+ */
89
+ function pruefangabenFuer(beleg, angabe) {
90
+ if (beleg.receiptType !== 'zero')
91
+ return null;
92
+ if (beleg.pruefangaben && typeof beleg.pruefangaben === 'object')
93
+ return pruefangabenDerHuelle(beleg.pruefangaben);
94
+ return { karteRegistriertAm: angabe?.cardRegisteredAt ?? null, kasseRegistriertAm: angabe?.cashregisterRegisteredAt ?? null };
95
+ }
96
+ /**
97
+ * Layout wie `beleg-layout.layoutFuerBeleg`: 80 mm, Regelwerk mindestens das
98
+ * aktuelle. Kann der Server es nicht bauen, liefert er `null` (dann baut
99
+ * [receiptLayoutFromResult] selbst); ebenso hier.
100
+ */
101
+ function layoutWieServer(b, regelwerk) {
102
+ const ruleset = Math.max(Number(regelwerk) || 1, CURRENT_LAYOUT_RULESET);
103
+ try {
104
+ return buildReceiptLayout(b.receipt, b.company, {
105
+ paperSize: 'mm80', ruleset, testCashregister: b.testCashregister, testSignature: b.testSignature, registrationInfo: b.registrationInfo,
106
+ });
107
+ }
108
+ catch {
109
+ return null;
110
+ }
111
+ }
112
+ // ---- Firma ------------------------------------------------------------------
113
+ const KOPF_FELDER = ['companyName', 'street', 'zip', 'city', 'phone', 'uid', 'taxnr', 'isSmallBusiness',
114
+ 'footer1', 'footer2', 'footer3', 'footer4', 'thanksMessage', 'showKreiseckLogo', 'logoUrl'];
115
+ /** Zwilling von `beleg-kopf-core.nurKopf`: Luecken der Version mit denselben Vorgaben. */
116
+ function nurKopf(version) {
117
+ const v = istObjekt(version) ? version : {};
118
+ const raus = {};
119
+ for (const f of KOPF_FELDER) {
120
+ if (f === 'logoUrl') {
121
+ if (v.logoUrl !== undefined)
122
+ raus.logoUrl = v.logoUrl;
123
+ continue;
124
+ }
125
+ raus[f] = v[f] !== undefined ? v[f]
126
+ : f === 'thanksMessage' ? []
127
+ : f === 'isSmallBusiness' || f === 'showKreiseckLogo' ? false
128
+ : f === 'uid' || f.startsWith('footer') ? null : '';
129
+ }
130
+ return raus;
131
+ }
132
+ /**
133
+ * Betriebsfelder der Beleg-Huelle aus einer Kopf-Version (Zwilling von
134
+ * `alsBetriebPayload` und `logoFuerBeleg`, beleg-kopf-core.js): innere
135
+ * Namen (`uid`, `taxnr`), die der Rand dann uebersetzt.
136
+ */
137
+ function betriebsfelder(version, account, beleg) {
138
+ const k = nurKopf(version);
139
+ // Nachsichtiger als der Server: ein Dank als Zeichenkette (moeglich ueber
140
+ // nachtragKopf) laesst belegAntwort scheitern (`join`), hier bleibt er leer.
141
+ const dank = Array.isArray(k.thanksMessage) ? k.thanksMessage : [];
142
+ const konto = istObjekt(account) ? account : {};
143
+ let logo;
144
+ if (beleg && beleg.receiptType === 'zero')
145
+ logo = null;
146
+ else if (istObjekt(version) && version.logoUrl !== undefined)
147
+ logo = version.logoUrl || null;
148
+ else
149
+ logo = (typeof konto.logo_url === 'string' && konto.logo_url) || null;
150
+ return {
151
+ company: k.companyName, street: k.street, zip: k.zip, city: k.city, phone: k.phone,
152
+ uid: k.uid, taxnr: k.taxnr, is_small_business: k.isSmallBusiness,
153
+ footer1: k.footer1, footer2: k.footer2, footer3: k.footer3, footer4: k.footer4,
154
+ thanks_message: dank.length ? dank.join('\n') : null,
155
+ kreiseck_logo: k.showKreiseckLogo,
156
+ logo_url: logo,
157
+ };
158
+ }
159
+ /** Zwilling von `logoStufeFuerKonto`: Kasse-Einstellung `logoSkala`, sonst M. */
160
+ function logoStufe(account) {
161
+ const konto = istObjekt(account) ? account : {};
162
+ const rs = istObjekt(konto.register_settings) ? konto.register_settings : {};
163
+ const kasse = istObjekt(rs.kasse) ? rs.kasse : {};
164
+ return ['S', 'M', 'L', 'XL'].includes(kasse.logoSkala) ? kasse.logoSkala : 'M';
165
+ }
166
+ /**
167
+ * Eine Kopf-Version (`users/{uid}/beleg_kopf/{id}`) als [ReceiptCompany], wie
168
+ * die Beleg-Antwort sie traegt. `receipt`: ein Nullbeleg traegt kein Logo;
169
+ * `account`: kennt die Version noch kein Logo, gilt das des Kontos.
170
+ */
171
+ export function fromStoredCompany(headerVersion, options = {}) {
172
+ const draht = _receiptEnvelopeToWire(betriebsfelder(headerVersion, options.account, options.receipt));
173
+ return fromReceiptCompanyPayload(draht);
174
+ }
175
+ // ---- Kassen-Einstellungen ------------------------------------------------------
176
+ /**
177
+ * Gespeicherte Kassen-Einstellungen als [PosSettings], wie `getKasseSettings`
178
+ * am Kassenweg sie liefert: `betrieb` aus
179
+ * `users/{uid}.register_settings.kasse`, `geraet` aus
180
+ * `users/{uid}/register_devices/{id}.kasse` (fehlt = Vorgaben).
181
+ *
182
+ * Wie am Server faellt weg, was der Validator beim Lesen nicht annimmt: ein
183
+ * fremder Steuersatz oder eine fremde Trinkgeldstufe, eine unbekannte
184
+ * Tasten-Aktion (erst nach dem Entwirren der Tasten, wie `mische`), eine Taste
185
+ * ausserhalb des Musters, ein Wert ausserhalb seines Bereichs oder Musters
186
+ * (`wzPos: 500`, Farbe, IP). An seiner Stelle steht die Vorgabe;
187
+ * [invalidStoredPosSettings] nennt jeden solchen Pfad. So schickt ein
188
+ * spaeteres Speichern nie einen Eintrag, den der Server abweist.
189
+ *
190
+ * Einzige Ausnahme: ein unbekannter Wert eines Aufzaehlungsfeldes vom
191
+ * richtigen Typ (`stil: 'sepia'`) bleibt woertlich stehen wie ein unbekannter
192
+ * Wert vom Draht; [unknownPosSettingValues] nennt ihn. Reste der inneren Form
193
+ * 0.x fallen auf die Vorgabe zurueck.
194
+ */
195
+ export function fromStoredPosSettings(stored) {
196
+ const { business, device } = _storedPosSettingsToWire(stored);
197
+ return sanitizePosSettings({ business, device });
198
+ }
199
+ /**
200
+ * Die aeusseren Pfade (`business.watermarkX`, `business.vatRates.7`,
201
+ * `device.shortcuts.cash`), deren gespeicherten Wert der Server beim Lesen
202
+ * weglaesst und [fromStoredPosSettings] darum durch die Vorgabe ersetzt. Fuer
203
+ * die Anzeige „gespeicherter Wert ungueltig, Vorgabe gilt“.
204
+ */
205
+ export function invalidStoredPosSettings(stored) {
206
+ return _storedPosSettingsToWire(stored).weggelassen;
207
+ }
208
+ // ---- Artikel ------------------------------------------------------------------
209
+ /**
210
+ * Ein Artikeldokument (`users/{uid}/articles/{id}`) als [PosArticle], wie
211
+ * `listMyArticles` am Kassenweg ihn liefert. Felder, die kein Schreibweg
212
+ * kennt, und Katalogwerte, die der Vertrag nicht kennt, fallen wie am Server
213
+ * weg.
214
+ */
215
+ export function fromStoredArticle(id, stored) {
216
+ return fromPosArticlePayload(_storedArticleToWire(id, stored));
217
+ }
@@ -0,0 +1,18 @@
1
+ /** Fingerabdruck des Vertrags-Exports, aus dem diese Datei stammt (`_quelle.sha256`). */
2
+ export declare const VOKABULAR_QUELLE = "29994ca53adc96e7cb49b9e3688b102a69c126544ef092fc6579a2e1fcd0d555";
3
+ /** Schema-Notation des Vertrags: Blatt 'aussen': 'innen', Objekt { __: 'innen', ... }, Liste [ { __: 'innen', ... } ]. */
4
+ export type SchemaEintrag = string | SchemaObjekt | readonly [SchemaObjekt];
5
+ export interface SchemaObjekt {
6
+ readonly [aussen: string]: SchemaEintrag;
7
+ }
8
+ /** Schema je Endpunkt (aussen -> innen) und Wertverweise auf die Kataloge. */
9
+ export declare const SCHEMAS: Readonly<Record<'getReceipt' | 'getKasseSettings' | 'listMyArticles', {
10
+ readonly data: SchemaObjekt;
11
+ readonly werte: Readonly<Record<string, {
12
+ readonly $catalog: string;
13
+ }>>;
14
+ }>>;
15
+ /** Die Felder eines Artikels in der Antwort (`listMyArticles`), aussen. */
16
+ export declare const ARTIKEL_FELDER: readonly string[];
17
+ /** Wertkataloge innen (deutsch) -> aussen (englisch). */
18
+ export declare const KATALOGE: Readonly<Record<string, Readonly<Record<string, string>>>>;