@kreiseck/kasseneck-api 0.31.0 → 1.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (712) hide show
  1. package/CHANGELOG.md +317 -0
  2. package/README.de.md +11 -7
  3. package/README.md +509 -126
  4. package/dist/cjs/client/api.d.ts +7 -6
  5. package/dist/cjs/client/api.js +2 -2
  6. package/dist/cjs/client/aufrufe.d.ts +29 -5
  7. package/dist/cjs/client/aufrufe.js +114 -2
  8. package/dist/cjs/client/auth.d.ts +2 -0
  9. package/dist/cjs/client/auth.js +17 -1
  10. package/dist/cjs/client/cashregisters.d.ts +1 -1
  11. package/dist/cjs/client/cashregisters.js +2 -2
  12. package/dist/cjs/client/errors.d.ts +94 -19
  13. package/dist/cjs/client/errors.js +132 -28
  14. package/dist/cjs/client/fehlercodes.d.ts +9 -0
  15. package/dist/cjs/client/fehlercodes.js +36 -0
  16. package/dist/cjs/client/index.d.ts +5 -5
  17. package/dist/cjs/client/index.js +11 -3
  18. package/dist/cjs/client/receipts.d.ts +131 -124
  19. package/dist/cjs/client/receipts.js +196 -137
  20. package/dist/cjs/client/reports.d.ts +26 -4
  21. package/dist/cjs/client/reports.js +37 -4
  22. package/dist/cjs/client/status.d.ts +3 -3
  23. package/dist/cjs/client/status.js +7 -7
  24. package/dist/cjs/client/transport.d.ts +56 -4
  25. package/dist/cjs/client/transport.js +234 -25
  26. package/dist/cjs/enums/vat-rate.d.ts +2 -2
  27. package/dist/cjs/enums/vat-rate.js +1 -1
  28. package/dist/cjs/index.d.ts +4 -3
  29. package/dist/cjs/index.js +42 -13
  30. package/dist/{esm/rechnung → cjs/invoice}/api.d.ts +18 -17
  31. package/dist/cjs/{rechnung → invoice}/api.js +6 -6
  32. package/dist/{esm/rechnung → cjs/invoice}/auth.d.ts +2 -2
  33. package/dist/cjs/{rechnung → invoice}/auth.js +5 -5
  34. package/dist/{esm/rechnung/rechnen.d.ts → cjs/invoice/calc.d.ts} +27 -27
  35. package/dist/cjs/{rechnung/rechnen.js → invoice/calc.js} +54 -54
  36. package/dist/{esm/rechnung → cjs/invoice}/endpunkte.d.ts +23 -21
  37. package/dist/cjs/{rechnung → invoice}/endpunkte.js +52 -42
  38. package/dist/cjs/invoice/fehler.d.ts +31 -0
  39. package/dist/cjs/invoice/fehler.js +39 -0
  40. package/dist/cjs/invoice/index.d.ts +21 -0
  41. package/dist/cjs/invoice/index.js +86 -0
  42. package/dist/cjs/{rechnung → invoice}/summen.d.ts +12 -12
  43. package/dist/cjs/{rechnung → invoice}/summen.js +14 -14
  44. package/dist/cjs/invoice/texte.d.ts +224 -0
  45. package/dist/cjs/invoice/texte.js +425 -0
  46. package/dist/{esm/rechnung → cjs/invoice}/typen.d.ts +32 -11
  47. package/dist/cjs/{rechnung → invoice}/vertrag.d.ts +97 -71
  48. package/dist/cjs/{rechnung → invoice}/vertrag.js +144 -82
  49. package/dist/cjs/models/cancellation.d.ts +43 -24
  50. package/dist/cjs/models/cancellation.js +94 -46
  51. package/dist/cjs/models/hobex-receipt.d.ts +3 -3
  52. package/dist/cjs/models/hobex-receipt.js +35 -35
  53. package/dist/cjs/models/index.d.ts +6 -5
  54. package/dist/cjs/models/index.js +22 -2
  55. package/dist/cjs/models/payment-errors.d.ts +32 -15
  56. package/dist/cjs/models/payment-errors.js +80 -32
  57. package/dist/cjs/models/receipt-company.d.ts +6 -5
  58. package/dist/cjs/models/receipt-company.js +4 -4
  59. package/dist/cjs/models/receipt-email.d.ts +32 -18
  60. package/dist/cjs/models/receipt-email.js +69 -24
  61. package/dist/cjs/models/receipt-errors.d.ts +39 -0
  62. package/dist/cjs/models/receipt-errors.js +94 -0
  63. package/dist/cjs/models/receipt-item.d.ts +9 -1
  64. package/dist/cjs/models/receipt-item.js +3 -0
  65. package/dist/cjs/models/receipt-summary.d.ts +10 -4
  66. package/dist/cjs/models/receipt-summary.js +10 -4
  67. package/dist/cjs/models/receipt.d.ts +31 -2
  68. package/dist/cjs/models/receipt.js +12 -1
  69. package/dist/cjs/models/voucher.d.ts +7 -6
  70. package/dist/cjs/models/voucher.js +2 -7
  71. package/dist/cjs/partner/ablauf.d.ts +10 -10
  72. package/dist/cjs/partner/ablauf.js +29 -29
  73. package/dist/cjs/partner/api.d.ts +26 -23
  74. package/dist/cjs/partner/api.js +11 -13
  75. package/dist/cjs/partner/auth.d.ts +1 -1
  76. package/dist/cjs/partner/auth.js +2 -2
  77. package/dist/cjs/partner/betrieb.d.ts +7 -7
  78. package/dist/cjs/partner/betrieb.js +10 -10
  79. package/dist/cjs/partner/endpunkte.d.ts +27 -14
  80. package/dist/cjs/partner/endpunkte.js +80 -39
  81. package/dist/cjs/partner/fehler.d.ts +60 -30
  82. package/dist/cjs/partner/fehler.js +99 -43
  83. package/dist/cjs/partner/index.d.ts +13 -12
  84. package/dist/cjs/partner/index.js +35 -22
  85. package/dist/cjs/partner/secret.d.ts +3 -3
  86. package/dist/cjs/partner/secret.js +6 -6
  87. package/dist/cjs/partner/typen.d.ts +129 -71
  88. package/dist/cjs/partner/typen.js +76 -3
  89. package/dist/cjs/partner/webhook-signatur.d.ts +2 -2
  90. package/dist/cjs/partner/webhook-signatur.js +12 -12
  91. package/dist/cjs/partner/webhooks.d.ts +60 -32
  92. package/dist/cjs/partner/webhooks.js +40 -34
  93. package/dist/cjs/payments/hobex.d.ts +11 -3
  94. package/dist/cjs/payments/hobex.js +17 -5
  95. package/dist/cjs/payments/stripe.d.ts +5 -2
  96. package/dist/cjs/payments/stripe.js +10 -5
  97. package/dist/cjs/pos/artikel.d.ts +90 -0
  98. package/dist/cjs/pos/artikel.js +89 -0
  99. package/dist/cjs/pos/client.d.ts +27 -0
  100. package/dist/cjs/pos/client.js +144 -0
  101. package/dist/cjs/pos/drucker.d.ts +86 -0
  102. package/dist/cjs/pos/drucker.js +78 -0
  103. package/dist/cjs/pos/errors.d.ts +36 -0
  104. package/dist/cjs/pos/errors.js +95 -0
  105. package/dist/cjs/pos/index.d.ts +15 -0
  106. package/dist/cjs/pos/index.js +102 -0
  107. package/dist/cjs/pos/settings.d.ts +313 -0
  108. package/dist/cjs/pos/settings.js +376 -0
  109. package/dist/cjs/pos/texte.d.ts +883 -0
  110. package/dist/cjs/pos/texte.js +489 -0
  111. package/dist/cjs/{kasse → pos}/trinkgeld.d.ts +1 -1
  112. package/dist/cjs/{kasse → pos}/trinkgeld.js +2 -2
  113. package/dist/cjs/printing/escpos.d.ts +29 -29
  114. package/dist/cjs/printing/escpos.js +61 -61
  115. package/dist/cjs/printing/index.d.ts +2 -2
  116. package/dist/cjs/printing/index.js +17 -17
  117. package/dist/cjs/printing/qr-groesse.d.ts +38 -38
  118. package/dist/cjs/printing/qr-groesse.js +47 -47
  119. package/dist/cjs/printing/webusb.d.ts +2 -2
  120. package/dist/cjs/printing/webusb.js +4 -4
  121. package/dist/cjs/react/index.d.ts +21 -21
  122. package/dist/cjs/react/index.js +40 -30
  123. package/dist/cjs/receipt/bild.d.ts +4 -4
  124. package/dist/cjs/receipt/bild.js +11 -11
  125. package/dist/cjs/receipt/blatt.d.ts +46 -46
  126. package/dist/cjs/receipt/blatt.js +59 -59
  127. package/dist/cjs/receipt/discount.d.ts +1 -1
  128. package/dist/cjs/receipt/discount.js +8 -8
  129. package/dist/cjs/receipt/due.d.ts +86 -0
  130. package/dist/cjs/receipt/due.js +261 -0
  131. package/dist/cjs/receipt/epos.d.ts +22 -22
  132. package/dist/cjs/receipt/epos.js +45 -45
  133. package/dist/cjs/receipt/grid.d.ts +10 -10
  134. package/dist/cjs/receipt/grid.js +20 -20
  135. package/dist/cjs/receipt/index.d.ts +9 -8
  136. package/dist/cjs/receipt/index.js +26 -23
  137. package/dist/cjs/receipt/layout-escpos.d.ts +24 -24
  138. package/dist/cjs/receipt/layout-escpos.js +49 -49
  139. package/dist/cjs/receipt/layout.d.ts +28 -23
  140. package/dist/cjs/receipt/layout.js +45 -21
  141. package/dist/cjs/receipt/marke-daten.d.ts +8 -8
  142. package/dist/cjs/receipt/marke-daten.js +8 -8
  143. package/dist/cjs/receipt/marke.d.ts +7 -7
  144. package/dist/cjs/receipt/marke.js +10 -10
  145. package/dist/cjs/register/errors.d.ts +61 -0
  146. package/dist/cjs/register/errors.js +112 -0
  147. package/dist/cjs/register/index.d.ts +14 -1
  148. package/dist/cjs/register/index.js +20 -1
  149. package/dist/cjs/register/pairing.d.ts +55 -36
  150. package/dist/cjs/register/pairing.js +33 -29
  151. package/dist/cjs/register/session.d.ts +5 -5
  152. package/dist/cjs/register/session.js +7 -7
  153. package/dist/cjs/stored/draht.d.ts +45 -0
  154. package/dist/cjs/stored/draht.js +220 -0
  155. package/dist/cjs/stored/einstellungen.d.ts +23 -0
  156. package/dist/cjs/stored/einstellungen.js +200 -0
  157. package/dist/cjs/stored/index.d.ts +109 -0
  158. package/dist/cjs/stored/index.js +225 -0
  159. package/dist/cjs/stored/vokabular.d.ts +18 -0
  160. package/dist/cjs/stored/vokabular.js +389 -0
  161. package/dist/cjs/version.d.ts +7 -0
  162. package/dist/cjs/version.js +10 -0
  163. package/dist/cjs/vienna-time.d.ts +1 -1
  164. package/dist/cjs/vienna-time.js +2 -2
  165. package/dist/esm/client/api.d.ts +7 -6
  166. package/dist/esm/client/api.js +4 -4
  167. package/dist/esm/client/aufrufe.d.ts +29 -5
  168. package/dist/esm/client/aufrufe.js +111 -1
  169. package/dist/esm/client/auth.d.ts +2 -0
  170. package/dist/esm/client/auth.js +16 -1
  171. package/dist/esm/client/cashregisters.d.ts +1 -1
  172. package/dist/esm/client/cashregisters.js +2 -2
  173. package/dist/esm/client/errors.d.ts +94 -19
  174. package/dist/esm/client/errors.js +129 -27
  175. package/dist/esm/client/fehlercodes.d.ts +9 -0
  176. package/dist/esm/client/fehlercodes.js +32 -0
  177. package/dist/esm/client/index.d.ts +5 -5
  178. package/dist/esm/client/index.js +5 -5
  179. package/dist/esm/client/receipts.d.ts +131 -124
  180. package/dist/esm/client/receipts.js +195 -140
  181. package/dist/esm/client/reports.d.ts +26 -4
  182. package/dist/esm/client/reports.js +36 -4
  183. package/dist/esm/client/status.d.ts +3 -3
  184. package/dist/esm/client/status.js +7 -7
  185. package/dist/esm/client/transport.d.ts +56 -4
  186. package/dist/esm/client/transport.js +233 -24
  187. package/dist/esm/enums/vat-rate.d.ts +2 -2
  188. package/dist/esm/enums/vat-rate.js +1 -1
  189. package/dist/esm/index.d.ts +4 -3
  190. package/dist/esm/index.js +4 -3
  191. package/dist/{cjs/rechnung → esm/invoice}/api.d.ts +18 -17
  192. package/dist/esm/{rechnung → invoice}/api.js +6 -6
  193. package/dist/{cjs/rechnung → esm/invoice}/auth.d.ts +2 -2
  194. package/dist/esm/{rechnung → invoice}/auth.js +4 -4
  195. package/dist/{cjs/rechnung/rechnen.d.ts → esm/invoice/calc.d.ts} +27 -27
  196. package/dist/esm/{rechnung/rechnen.js → invoice/calc.js} +45 -45
  197. package/dist/{cjs/rechnung → esm/invoice}/endpunkte.d.ts +23 -21
  198. package/dist/esm/{rechnung → invoice}/endpunkte.js +52 -42
  199. package/dist/esm/invoice/fehler.d.ts +31 -0
  200. package/dist/esm/invoice/fehler.js +33 -0
  201. package/dist/esm/invoice/index.d.ts +21 -0
  202. package/dist/esm/invoice/index.js +20 -0
  203. package/dist/esm/{rechnung → invoice}/summen.d.ts +12 -12
  204. package/dist/esm/{rechnung → invoice}/summen.js +12 -12
  205. package/dist/esm/invoice/texte.d.ts +224 -0
  206. package/dist/esm/invoice/texte.js +421 -0
  207. package/dist/{cjs/rechnung → esm/invoice}/typen.d.ts +32 -11
  208. package/dist/esm/{rechnung → invoice}/vertrag.d.ts +97 -71
  209. package/dist/esm/{rechnung → invoice}/vertrag.js +143 -81
  210. package/dist/esm/models/cancellation.d.ts +43 -24
  211. package/dist/esm/models/cancellation.js +90 -45
  212. package/dist/esm/models/hobex-receipt.d.ts +3 -3
  213. package/dist/esm/models/hobex-receipt.js +35 -35
  214. package/dist/esm/models/index.d.ts +6 -5
  215. package/dist/esm/models/index.js +6 -5
  216. package/dist/esm/models/payment-errors.d.ts +32 -15
  217. package/dist/esm/models/payment-errors.js +77 -32
  218. package/dist/esm/models/receipt-company.d.ts +6 -5
  219. package/dist/esm/models/receipt-company.js +4 -4
  220. package/dist/esm/models/receipt-email.d.ts +32 -18
  221. package/dist/esm/models/receipt-email.js +65 -23
  222. package/dist/esm/models/receipt-errors.d.ts +39 -0
  223. package/dist/esm/models/receipt-errors.js +87 -0
  224. package/dist/esm/models/receipt-item.d.ts +9 -1
  225. package/dist/esm/models/receipt-item.js +3 -0
  226. package/dist/esm/models/receipt-summary.d.ts +10 -4
  227. package/dist/esm/models/receipt-summary.js +9 -3
  228. package/dist/esm/models/receipt.d.ts +31 -2
  229. package/dist/esm/models/receipt.js +12 -2
  230. package/dist/esm/models/voucher.d.ts +7 -6
  231. package/dist/esm/models/voucher.js +2 -7
  232. package/dist/esm/partner/ablauf.d.ts +10 -10
  233. package/dist/esm/partner/ablauf.js +27 -27
  234. package/dist/esm/partner/api.d.ts +26 -23
  235. package/dist/esm/partner/api.js +13 -15
  236. package/dist/esm/partner/auth.d.ts +1 -1
  237. package/dist/esm/partner/auth.js +2 -2
  238. package/dist/esm/partner/betrieb.d.ts +7 -7
  239. package/dist/esm/partner/betrieb.js +8 -8
  240. package/dist/esm/partner/endpunkte.d.ts +27 -14
  241. package/dist/esm/partner/endpunkte.js +79 -39
  242. package/dist/esm/partner/fehler.d.ts +60 -30
  243. package/dist/esm/partner/fehler.js +91 -35
  244. package/dist/esm/partner/index.d.ts +13 -12
  245. package/dist/esm/partner/index.js +12 -11
  246. package/dist/esm/partner/secret.d.ts +3 -3
  247. package/dist/esm/partner/secret.js +5 -5
  248. package/dist/esm/partner/typen.d.ts +129 -71
  249. package/dist/esm/partner/typen.js +75 -2
  250. package/dist/esm/partner/webhook-signatur.d.ts +2 -2
  251. package/dist/esm/partner/webhook-signatur.js +12 -12
  252. package/dist/esm/partner/webhooks.d.ts +60 -32
  253. package/dist/esm/partner/webhooks.js +38 -32
  254. package/dist/esm/payments/hobex.d.ts +11 -3
  255. package/dist/esm/payments/hobex.js +18 -6
  256. package/dist/esm/payments/stripe.d.ts +5 -2
  257. package/dist/esm/payments/stripe.js +11 -6
  258. package/dist/esm/pos/artikel.d.ts +90 -0
  259. package/dist/esm/pos/artikel.js +79 -0
  260. package/dist/esm/pos/client.d.ts +27 -0
  261. package/dist/esm/pos/client.js +137 -0
  262. package/dist/esm/pos/drucker.d.ts +86 -0
  263. package/dist/esm/pos/drucker.js +71 -0
  264. package/dist/esm/pos/errors.d.ts +36 -0
  265. package/dist/esm/pos/errors.js +88 -0
  266. package/dist/esm/pos/index.d.ts +15 -0
  267. package/dist/esm/pos/index.js +20 -0
  268. package/dist/esm/pos/settings.d.ts +313 -0
  269. package/dist/esm/pos/settings.js +367 -0
  270. package/dist/esm/pos/texte.d.ts +883 -0
  271. package/dist/esm/pos/texte.js +481 -0
  272. package/dist/esm/{kasse → pos}/trinkgeld.d.ts +1 -1
  273. package/dist/esm/{kasse → pos}/trinkgeld.js +2 -2
  274. package/dist/esm/printing/escpos.d.ts +29 -29
  275. package/dist/esm/printing/escpos.js +56 -56
  276. package/dist/esm/printing/index.d.ts +2 -2
  277. package/dist/esm/printing/index.js +2 -2
  278. package/dist/esm/printing/qr-groesse.d.ts +38 -38
  279. package/dist/esm/printing/qr-groesse.js +42 -42
  280. package/dist/esm/printing/webusb.d.ts +2 -2
  281. package/dist/esm/printing/webusb.js +4 -4
  282. package/dist/esm/react/index.d.ts +21 -21
  283. package/dist/esm/react/index.js +39 -29
  284. package/dist/esm/receipt/bild.d.ts +4 -4
  285. package/dist/esm/receipt/bild.js +11 -11
  286. package/dist/esm/receipt/blatt.d.ts +46 -46
  287. package/dist/esm/receipt/blatt.js +55 -55
  288. package/dist/esm/receipt/discount.d.ts +1 -1
  289. package/dist/esm/receipt/discount.js +7 -7
  290. package/dist/esm/receipt/due.d.ts +86 -0
  291. package/dist/esm/receipt/due.js +257 -0
  292. package/dist/esm/receipt/epos.d.ts +22 -22
  293. package/dist/esm/receipt/epos.js +47 -47
  294. package/dist/esm/receipt/grid.d.ts +10 -10
  295. package/dist/esm/receipt/grid.js +18 -18
  296. package/dist/esm/receipt/index.d.ts +9 -8
  297. package/dist/esm/receipt/index.js +9 -8
  298. package/dist/esm/receipt/layout-escpos.d.ts +24 -24
  299. package/dist/esm/receipt/layout-escpos.js +51 -51
  300. package/dist/esm/receipt/layout.d.ts +28 -23
  301. package/dist/esm/receipt/layout.js +44 -20
  302. package/dist/esm/receipt/marke-daten.d.ts +8 -8
  303. package/dist/esm/receipt/marke-daten.js +7 -7
  304. package/dist/esm/receipt/marke.d.ts +7 -7
  305. package/dist/esm/receipt/marke.js +10 -10
  306. package/dist/esm/register/errors.d.ts +61 -0
  307. package/dist/esm/register/errors.js +104 -0
  308. package/dist/esm/register/index.d.ts +14 -1
  309. package/dist/esm/register/index.js +13 -0
  310. package/dist/esm/register/pairing.d.ts +55 -36
  311. package/dist/esm/register/pairing.js +33 -29
  312. package/dist/esm/register/session.d.ts +5 -5
  313. package/dist/esm/register/session.js +7 -7
  314. package/dist/esm/stored/draht.d.ts +45 -0
  315. package/dist/esm/stored/draht.js +208 -0
  316. package/dist/esm/stored/einstellungen.d.ts +23 -0
  317. package/dist/esm/stored/einstellungen.js +196 -0
  318. package/dist/esm/stored/index.d.ts +109 -0
  319. package/dist/esm/stored/index.js +217 -0
  320. package/dist/esm/stored/vokabular.d.ts +18 -0
  321. package/dist/esm/stored/vokabular.js +386 -0
  322. package/dist/esm/version.d.ts +7 -0
  323. package/dist/esm/version.js +7 -0
  324. package/dist/esm/vienna-time.d.ts +1 -1
  325. package/dist/esm/vienna-time.js +2 -2
  326. package/fixtures/{erwartet/storno-rabatt.lines.json → expected/cancellation-discount.lines.json} +2 -2
  327. package/fixtures/expected/cancellation-discount.sheet32.json +248 -0
  328. package/fixtures/{erwartet/storno-rabatt.blatt48.json → expected/cancellation-discount.sheet48.json} +119 -119
  329. package/fixtures/{erwartet/storno-voll.lines.json → expected/cancellation-full.lines.json} +2 -2
  330. package/fixtures/expected/cancellation-full.sheet32.json +218 -0
  331. package/fixtures/{erwartet/storno-voll.blatt48.json → expected/cancellation-full.sheet48.json} +107 -107
  332. package/fixtures/{erwartet/storno-teil.lines.json → expected/cancellation-partial.lines.json} +2 -2
  333. package/fixtures/expected/cancellation-partial.sheet32.json +206 -0
  334. package/fixtures/{erwartet/storno-teil.blatt48.json → expected/cancellation-partial.sheet48.json} +101 -101
  335. package/fixtures/{erwartet/storno-split-voll.lines.json → expected/cancellation-split-full.lines.json} +2 -2
  336. package/fixtures/expected/cancellation-split-full.sheet32.json +320 -0
  337. package/fixtures/{erwartet/storno-split-voll.blatt48.json → expected/cancellation-split-full.sheet48.json} +158 -158
  338. package/fixtures/{erwartet/storno-split-teil.lines.json → expected/cancellation-split-partial.lines.json} +2 -2
  339. package/fixtures/expected/cancellation-split-partial.sheet32.json +230 -0
  340. package/fixtures/{erwartet/storno-split-teil.blatt48.json → expected/cancellation-split-partial.sheet48.json} +113 -113
  341. package/fixtures/{erwartet/karte-eigener.lines.json → expected/card-custom.lines.json} +1 -1
  342. package/fixtures/expected/card-custom.sheet32.json +158 -0
  343. package/fixtures/{erwartet/karte-eigener.blatt48.json → expected/card-custom.sheet48.json} +80 -80
  344. package/fixtures/{erwartet/karte-gptom-ios.lines.json → expected/card-gptom-ios.lines.json} +1 -1
  345. package/fixtures/expected/card-gptom-ios.sheet32.json +230 -0
  346. package/fixtures/{erwartet/karte-gptom-ios.blatt48.json → expected/card-gptom-ios.sheet48.json} +116 -116
  347. package/fixtures/{erwartet/karte-gptom.lines.json → expected/card-gptom.lines.json} +1 -1
  348. package/fixtures/expected/card-gptom.sheet32.json +230 -0
  349. package/fixtures/{erwartet/karte-gptom.blatt48.json → expected/card-gptom.sheet48.json} +116 -116
  350. package/fixtures/{erwartet/karte-hobex-cloud.lines.json → expected/card-hobex-cloud.lines.json} +1 -1
  351. package/fixtures/expected/card-hobex-cloud.sheet32.json +200 -0
  352. package/fixtures/{erwartet/karte-hobex-cloud.blatt48.json → expected/card-hobex-cloud.sheet48.json} +101 -101
  353. package/fixtures/{erwartet/karte-hobex-hps.lines.json → expected/card-hobex-hps.lines.json} +1 -1
  354. package/fixtures/expected/card-hobex-hps.sheet32.json +224 -0
  355. package/fixtures/{erwartet/karte-hobex-hps.blatt48.json → expected/card-hobex-hps.sheet48.json} +113 -113
  356. package/fixtures/{erwartet/karte-mypos.lines.json → expected/card-mypos.lines.json} +1 -1
  357. package/fixtures/expected/card-mypos.sheet32.json +254 -0
  358. package/fixtures/{erwartet/karte-mypos.blatt48.json → expected/card-mypos.sheet48.json} +122 -122
  359. package/fixtures/{erwartet/karte-stripe-eps.lines.json → expected/card-stripe-eps.lines.json} +1 -1
  360. package/fixtures/expected/card-stripe-eps.sheet32.json +194 -0
  361. package/fixtures/{erwartet/karte-stripe-eps.blatt48.json → expected/card-stripe-eps.sheet48.json} +98 -98
  362. package/fixtures/{erwartet/karte-stripe.lines.json → expected/card-stripe.lines.json} +1 -1
  363. package/fixtures/expected/card-stripe.sheet32.json +212 -0
  364. package/fixtures/{erwartet/karte-stripe.blatt48.json → expected/card-stripe.sheet48.json} +107 -107
  365. package/fixtures/{erwartet/karte-sumup.lines.json → expected/card-sumup.lines.json} +1 -1
  366. package/fixtures/expected/card-sumup.sheet32.json +218 -0
  367. package/fixtures/{erwartet/karte-sumup.blatt48.json → expected/card-sumup.sheet48.json} +104 -104
  368. package/fixtures/{erwartet/rabattzeilen.lines.json → expected/discount-lines.lines.json} +1 -1
  369. package/fixtures/expected/discount-lines.sheet32.json +200 -0
  370. package/fixtures/{erwartet/rabattzeilen.blatt48.json → expected/discount-lines.sheet48.json} +98 -98
  371. package/fixtures/{erwartet/rabatt-chef-trinkgeld.lines.json → expected/discount-owner-tip.lines.json} +1 -1
  372. package/fixtures/expected/discount-owner-tip.sheet32.json +212 -0
  373. package/fixtures/{erwartet/rabatt-chef-trinkgeld.blatt48.json → expected/discount-owner-tip.sheet48.json} +104 -104
  374. package/fixtures/{erwartet/rabatt-einfach.lines.json → expected/discount-simple.lines.json} +1 -1
  375. package/fixtures/expected/discount-simple.sheet32.json +182 -0
  376. package/fixtures/{erwartet/rabatt-einfach.blatt48.json → expected/discount-simple.sheet48.json} +89 -89
  377. package/fixtures/{erwartet/rabatt-trinkgeld.lines.json → expected/discount-tip.lines.json} +1 -1
  378. package/fixtures/expected/discount-tip.sheet32.json +212 -0
  379. package/fixtures/{erwartet/rabatt-trinkgeld.blatt48.json → expected/discount-tip.sheet48.json} +104 -104
  380. package/fixtures/{erwartet/rabatt-wertgutschein.lines.json → expected/discount-value-voucher.lines.json} +1 -1
  381. package/fixtures/expected/discount-value-voucher.sheet32.json +218 -0
  382. package/fixtures/{erwartet/rabatt-wertgutschein.blatt48.json → expected/discount-value-voucher.sheet48.json} +107 -107
  383. package/fixtures/{erwartet/langer-artikelname.lines.json → expected/long-item-name.lines.json} +1 -1
  384. package/fixtures/expected/long-item-name.sheet32.json +176 -0
  385. package/fixtures/{erwartet/langer-artikelname.blatt48.json → expected/long-item-name.sheet48.json} +86 -86
  386. package/fixtures/{erwartet/verkauf-karte.lines.json → expected/sale-card.lines.json} +1 -1
  387. package/fixtures/expected/sale-card.sheet32.json +176 -0
  388. package/fixtures/{erwartet/verkauf-karte.blatt48.json → expected/sale-card.sheet48.json} +86 -86
  389. package/fixtures/{erwartet/verkauf-bar.lines.json → expected/sale-cash.lines.json} +1 -1
  390. package/fixtures/expected/sale-cash.sheet32.json +176 -0
  391. package/fixtures/{erwartet/verkauf-bar.blatt48.json → expected/sale-cash.sheet48.json} +86 -86
  392. package/fixtures/{erwartet/verkauf-kleinunternehmer.lines.json → expected/sale-small-business.lines.json} +1 -1
  393. package/fixtures/expected/sale-small-business.sheet32.json +182 -0
  394. package/fixtures/{erwartet/verkauf-kleinunternehmer.blatt48.json → expected/sale-small-business.sheet48.json} +89 -89
  395. package/fixtures/{erwartet/signaturausfall-verkauf.lines.json → expected/signature-outage-sale.lines.json} +1 -1
  396. package/fixtures/expected/signature-outage-sale.sheet32.json +194 -0
  397. package/fixtures/{erwartet/signaturausfall-verkauf.blatt48.json → expected/signature-outage-sale.sheet48.json} +92 -92
  398. package/fixtures/{erwartet/split-karte-karte-bar.lines.json → expected/split-card-card-cash.lines.json} +1 -1
  399. package/fixtures/expected/split-card-card-cash.sheet32.json +356 -0
  400. package/fixtures/{erwartet/split-karte-karte-bar.blatt48.json → expected/split-card-card-cash.sheet48.json} +170 -170
  401. package/fixtures/{erwartet/split-bar-rueckgeld.lines.json → expected/split-cash-change.lines.json} +1 -1
  402. package/fixtures/expected/split-cash-change.sheet32.json +194 -0
  403. package/fixtures/{erwartet/split-bar-rueckgeld.blatt48.json → expected/split-cash-change.sheet48.json} +92 -92
  404. package/fixtures/{erwartet/split-langer-betrag.lines.json → expected/split-long-amount.lines.json} +1 -1
  405. package/fixtures/expected/split-long-amount.sheet32.json +266 -0
  406. package/fixtures/{erwartet/split-langer-betrag.blatt48.json → expected/split-long-amount.sheet48.json} +131 -131
  407. package/fixtures/{erwartet/split-eine-karte-trinkgeld.lines.json → expected/split-one-card-tip.lines.json} +1 -1
  408. package/fixtures/expected/split-one-card-tip.sheet32.json +242 -0
  409. package/fixtures/{erwartet/split-eine-karte-trinkgeld.blatt48.json → expected/split-one-card-tip.sheet48.json} +113 -113
  410. package/fixtures/{erwartet/split-tischrunde-trinkgeld.lines.json → expected/split-table-round-tip.lines.json} +1 -1
  411. package/fixtures/expected/split-table-round-tip.sheet32.json +470 -0
  412. package/fixtures/{erwartet/split-tischrunde-trinkgeld.blatt48.json → expected/split-table-round-tip.sheet48.json} +218 -218
  413. package/fixtures/{erwartet/split-trinkgeld-karte.lines.json → expected/split-tip-card.lines.json} +1 -1
  414. package/fixtures/expected/split-tip-card.sheet32.json +272 -0
  415. package/fixtures/{erwartet/split-trinkgeld-karte.blatt48.json → expected/split-tip-card.sheet48.json} +128 -128
  416. package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.lines.json → expected/split-two-cards-same-provider.lines.json} +1 -1
  417. package/fixtures/expected/split-two-cards-same-provider.sheet32.json +326 -0
  418. package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.blatt48.json → expected/split-two-cards-same-provider.sheet48.json} +149 -149
  419. package/fixtures/{erwartet/testkasse-verkauf.lines.json → expected/test-cashregister-sale.lines.json} +3 -3
  420. package/fixtures/expected/test-cashregister-sale.sheet32.json +224 -0
  421. package/fixtures/{erwartet/testkasse-verkauf.blatt48.json → expected/test-cashregister-sale.sheet48.json} +110 -110
  422. package/fixtures/{erwartet/testsignatur-verkauf.lines.json → expected/test-signature-sale.lines.json} +3 -3
  423. package/fixtures/expected/test-signature-sale.sheet32.json +236 -0
  424. package/fixtures/{erwartet/testsignatur-verkauf.blatt48.json → expected/test-signature-sale.sheet48.json} +110 -110
  425. package/fixtures/{erwartet → expected}/training.lines.json +2 -2
  426. package/fixtures/expected/training.sheet32.json +236 -0
  427. package/fixtures/{erwartet/training.blatt48.json → expected/training.sheet48.json} +110 -110
  428. package/fixtures/{erwartet/null-jahr.lines.json → expected/zero-annual.lines.json} +2 -2
  429. package/fixtures/expected/zero-annual.sheet32.json +212 -0
  430. package/fixtures/{erwartet/null-jahr.blatt48.json → expected/zero-annual.sheet48.json} +95 -95
  431. package/fixtures/{erwartet/null-schluss.lines.json → expected/zero-final.lines.json} +2 -2
  432. package/fixtures/expected/zero-final.sheet32.json +206 -0
  433. package/fixtures/{erwartet/null-schluss.blatt48.json → expected/zero-final.sheet48.json} +95 -95
  434. package/fixtures/{erwartet/null-pruef.lines.json → expected/zero-manual.lines.json} +2 -2
  435. package/fixtures/expected/zero-manual.sheet32.json +206 -0
  436. package/fixtures/{erwartet/null-pruef.blatt48.json → expected/zero-manual.sheet48.json} +95 -95
  437. package/fixtures/{erwartet/null-monat.lines.json → expected/zero-monthly.lines.json} +2 -2
  438. package/fixtures/expected/zero-monthly.sheet32.json +206 -0
  439. package/fixtures/{erwartet/null-monat.blatt48.json → expected/zero-monthly.sheet48.json} +95 -95
  440. package/fixtures/{erwartet/null-ausfall.lines.json → expected/zero-outage-end.lines.json} +2 -2
  441. package/fixtures/expected/zero-outage-end.sheet32.json +206 -0
  442. package/fixtures/{erwartet/null-ausfall.blatt48.json → expected/zero-outage-end.sheet48.json} +95 -95
  443. package/fixtures/{erwartet/null-start.lines.json → expected/zero-start.lines.json} +2 -2
  444. package/fixtures/expected/zero-start.sheet32.json +206 -0
  445. package/fixtures/{erwartet/null-start.blatt48.json → expected/zero-start.sheet48.json} +95 -95
  446. package/fixtures/hobex-hps-codes.json +12 -12
  447. package/fixtures/invoice-api-examples/brands-ok.json +8 -0
  448. package/fixtures/{rechnung-api-beispiele/credit-fehler-grund.json → invoice-api-examples/credit-error-reason.json} +6 -6
  449. package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/credit-ok.json +6 -6
  450. package/fixtures/{rechnung-api-beispiele/customer-fehler-uid.json → invoice-api-examples/customer-error-vat-id.json} +4 -4
  451. package/fixtures/invoice-api-examples/customer-get-error-both.json +15 -0
  452. package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/customer-ok.json +4 -4
  453. package/fixtures/{rechnung-api-beispiele/customer-search-fehler-leer.json → invoice-api-examples/customer-search-error-empty.json} +4 -4
  454. package/fixtures/{rechnung-api-beispiele/issue-rabatt.json → invoice-api-examples/issue-discount.json} +6 -6
  455. package/fixtures/{rechnung-api-beispiele/issue-englisch.json → invoice-api-examples/issue-english.json} +7 -7
  456. package/fixtures/{rechnung-api-beispiele/issue-fehler-cent.json → invoice-api-examples/issue-error-cent.json} +6 -6
  457. package/fixtures/{rechnung-api-beispiele/issue-fehler-sprache.json → invoice-api-examples/issue-error-language.json} +5 -5
  458. package/fixtures/{rechnung-api-beispiele/issue-fehler-negativ.json → invoice-api-examples/issue-error-negative.json} +6 -6
  459. package/fixtures/{rechnung-api-beispiele/issue-fehler-zahlungsart.json → invoice-api-examples/issue-error-payment-method.json} +8 -6
  460. package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-beide.json → invoice-api-examples/issue-error-price-both.json} +6 -6
  461. package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-fehlt.json → invoice-api-examples/issue-error-price-missing.json} +6 -6
  462. package/fixtures/{rechnung-api-beispiele/issue-fehler-menge.json → invoice-api-examples/issue-error-quantity.json} +6 -6
  463. package/fixtures/{rechnung-api-beispiele/issue-fehler-satz.json → invoice-api-examples/issue-error-rate.json} +6 -6
  464. package/fixtures/{rechnung-api-beispiele/issue-fehler-einheit.json → invoice-api-examples/issue-error-unit.json} +5 -5
  465. package/fixtures/{rechnung-api-beispiele/issue-fehler-unbekannt.json → invoice-api-examples/issue-error-unknown.json} +6 -6
  466. package/fixtures/{rechnung-api-beispiele/issue-brutto-20.json → invoice-api-examples/issue-gross-20.json} +6 -6
  467. package/fixtures/{rechnung-api-beispiele/issue-mikropreis.json → invoice-api-examples/issue-micro-price.json} +6 -6
  468. package/fixtures/{rechnung-api-beispiele/issue-gemischt.json → invoice-api-examples/issue-mixed.json} +6 -6
  469. package/fixtures/{rechnung-api-beispiele/issue-netto-20.json → invoice-api-examples/issue-net-20.json} +6 -6
  470. package/fixtures/{rechnung-api-beispiele/issue-bezahlt.json → invoice-api-examples/issue-paid.json} +7 -7
  471. package/fixtures/{rechnung-api-beispiele/issue-kleinunternehmer.json → invoice-api-examples/issue-small-business.json} +6 -6
  472. package/fixtures/invoice-api-examples/payment-error-on-site.json +17 -0
  473. package/fixtures/invoice-api-examples/payment-error-without-key.json +16 -0
  474. package/fixtures/invoice-api-examples/payment-recorded-later.json +14 -0
  475. package/fixtures/{rechnung-api-beispiele/setup-status-fehler-feld.json → invoice-api-examples/setup-status-error-field.json} +4 -4
  476. package/fixtures/invoice-api-examples/setup-status-ok.json +8 -0
  477. package/fixtures/{rechnung-api.schema.json → invoice-api.schema.json} +24 -24
  478. package/fixtures/{rechnung-rechnen-zufall.json → invoice-calc-random.json} +828 -828
  479. package/fixtures/{rechnung-rechnen.json → invoice-calc.json} +47 -47
  480. package/fixtures/invoice-texts.json +464 -0
  481. package/fixtures/{rechnung-summen.json → invoice-totals.json} +25 -25
  482. package/fixtures/{position-aus-euro.json → item-from-euro.json} +26 -26
  483. package/fixtures/manifest.json +252 -252
  484. package/fixtures/pos-message-cases.json +32 -0
  485. package/fixtures/pos-settings-defaults.json +149 -0
  486. package/fixtures/{kasse-texte.json → pos-texts.json} +416 -416
  487. package/fixtures/receipt-due-generated.json +1218 -0
  488. package/fixtures/{belege/storno-rabatt.json → receipts/cancellation-discount.json} +3 -3
  489. package/fixtures/{belege/storno-voll.json → receipts/cancellation-full.json} +3 -3
  490. package/fixtures/{belege/storno-teil.json → receipts/cancellation-partial.json} +3 -3
  491. package/fixtures/{belege/storno-split-voll.json → receipts/cancellation-split-full.json} +3 -3
  492. package/fixtures/{belege/storno-split-teil.json → receipts/cancellation-split-partial.json} +3 -3
  493. package/fixtures/{belege/karte-eigener.json → receipts/card-custom.json} +2 -2
  494. package/fixtures/{belege/karte-gptom-ios.json → receipts/card-gptom-ios.json} +2 -2
  495. package/fixtures/{belege/karte-gptom.json → receipts/card-gptom.json} +2 -2
  496. package/fixtures/{belege/karte-hobex-cloud.json → receipts/card-hobex-cloud.json} +2 -2
  497. package/fixtures/{belege/karte-hobex-hps.json → receipts/card-hobex-hps.json} +2 -2
  498. package/fixtures/{belege/karte-mypos.json → receipts/card-mypos.json} +2 -2
  499. package/fixtures/{belege/karte-stripe-eps.json → receipts/card-stripe-eps.json} +2 -2
  500. package/fixtures/{belege/karte-stripe.json → receipts/card-stripe.json} +2 -2
  501. package/fixtures/{belege/karte-sumup.json → receipts/card-sumup.json} +2 -2
  502. package/fixtures/{belege/rabattzeilen.json → receipts/discount-lines.json} +2 -2
  503. package/fixtures/{belege/rabatt-chef-trinkgeld.json → receipts/discount-owner-tip.json} +2 -2
  504. package/fixtures/{belege/rabatt-einfach.json → receipts/discount-simple.json} +2 -2
  505. package/fixtures/{belege/rabatt-trinkgeld.json → receipts/discount-tip.json} +2 -2
  506. package/fixtures/{belege/rabatt-wertgutschein.json → receipts/discount-value-voucher.json} +2 -2
  507. package/fixtures/{belege/langer-artikelname.json → receipts/long-item-name.json} +2 -2
  508. package/fixtures/{belege/verkauf-karte.json → receipts/sale-card.json} +2 -2
  509. package/fixtures/{belege/verkauf-bar.json → receipts/sale-cash.json} +2 -2
  510. package/fixtures/{belege/verkauf-kleinunternehmer.json → receipts/sale-small-business.json} +1 -1
  511. package/fixtures/{belege/signaturausfall-verkauf.json → receipts/signature-outage-sale.json} +2 -2
  512. package/fixtures/{belege/split-karte-karte-bar.json → receipts/split-card-card-cash.json} +2 -2
  513. package/fixtures/{belege/split-bar-rueckgeld.json → receipts/split-cash-change.json} +2 -2
  514. package/fixtures/{belege/split-langer-betrag.json → receipts/split-long-amount.json} +2 -2
  515. package/fixtures/{belege/split-eine-karte-trinkgeld.json → receipts/split-one-card-tip.json} +2 -2
  516. package/fixtures/{belege/split-tischrunde-trinkgeld.json → receipts/split-table-round-tip.json} +2 -2
  517. package/fixtures/{belege/split-trinkgeld-karte.json → receipts/split-tip-card.json} +2 -2
  518. package/fixtures/{belege/split-zwei-karten-gleicher-anbieter.json → receipts/split-two-cards-same-provider.json} +2 -2
  519. package/fixtures/{belege/testsignatur-verkauf.json → receipts/test-cashregister-sale.json} +3 -3
  520. package/fixtures/{belege/testkasse-verkauf.json → receipts/test-signature-sale.json} +3 -3
  521. package/fixtures/{belege → receipts}/training.json +2 -2
  522. package/fixtures/{belege/null-jahr.json → receipts/zero-annual.json} +5 -5
  523. package/fixtures/{belege/null-schluss.json → receipts/zero-final.json} +5 -5
  524. package/fixtures/{belege/null-pruef.json → receipts/zero-manual.json} +5 -5
  525. package/fixtures/{belege/null-monat.json → receipts/zero-monthly.json} +5 -5
  526. package/fixtures/{belege/null-ausfall.json → receipts/zero-outage-end.json} +5 -5
  527. package/fixtures/{belege/null-start.json → receipts/zero-start.json} +5 -5
  528. package/fixtures/renames-1.0.json +1490 -0
  529. package/fixtures/{kasse-settings-standard.json → stored/pos-settings-defaults.json} +7 -7
  530. package/fixtures/surface.json +877 -0
  531. package/fixtures/v3/README.md +125 -0
  532. package/fixtures/v3/antworten/belege.json +4738 -0
  533. package/fixtures/v3/antworten/belegmail.json +154 -0
  534. package/fixtures/v3/antworten/kasse-belege.json +4304 -0
  535. package/fixtures/v3/antworten/kasse.json +12716 -0
  536. package/fixtures/v3/antworten/rechnungen.json +1712 -0
  537. package/fixtures/v3/antworten/storno.json +737 -0
  538. package/fixtures/v3/stored/belege.json +502 -0
  539. package/fixtures/v3/stored/kasse.json +3461 -0
  540. package/fixtures/v3/stored/rechnungen.json +750 -0
  541. package/fixtures/v3/v3-vokabular.json +3375 -0
  542. package/fixtures/v3/zahlbetrag-faelle.json +794 -0
  543. package/package.json +32 -18
  544. package/dist/cjs/kasse/artikel.d.ts +0 -83
  545. package/dist/cjs/kasse/artikel.js +0 -79
  546. package/dist/cjs/kasse/client.d.ts +0 -10
  547. package/dist/cjs/kasse/client.js +0 -38
  548. package/dist/cjs/kasse/drucker.d.ts +0 -59
  549. package/dist/cjs/kasse/drucker.js +0 -50
  550. package/dist/cjs/kasse/index.d.ts +0 -13
  551. package/dist/cjs/kasse/index.js +0 -83
  552. package/dist/cjs/kasse/settings.d.ts +0 -229
  553. package/dist/cjs/kasse/settings.js +0 -172
  554. package/dist/cjs/kasse/texte.d.ts +0 -868
  555. package/dist/cjs/kasse/texte.js +0 -474
  556. package/dist/cjs/rechnung/fehler.d.ts +0 -21
  557. package/dist/cjs/rechnung/fehler.js +0 -44
  558. package/dist/cjs/rechnung/index.d.ts +0 -21
  559. package/dist/cjs/rechnung/index.js +0 -82
  560. package/dist/cjs/rechnung/texte.d.ts +0 -222
  561. package/dist/cjs/rechnung/texte.js +0 -425
  562. package/dist/esm/kasse/artikel.d.ts +0 -83
  563. package/dist/esm/kasse/artikel.js +0 -70
  564. package/dist/esm/kasse/client.d.ts +0 -10
  565. package/dist/esm/kasse/client.js +0 -33
  566. package/dist/esm/kasse/drucker.d.ts +0 -59
  567. package/dist/esm/kasse/drucker.js +0 -45
  568. package/dist/esm/kasse/index.d.ts +0 -13
  569. package/dist/esm/kasse/index.js +0 -18
  570. package/dist/esm/kasse/settings.d.ts +0 -229
  571. package/dist/esm/kasse/settings.js +0 -168
  572. package/dist/esm/kasse/texte.d.ts +0 -868
  573. package/dist/esm/kasse/texte.js +0 -466
  574. package/dist/esm/rechnung/fehler.d.ts +0 -21
  575. package/dist/esm/rechnung/fehler.js +0 -39
  576. package/dist/esm/rechnung/index.d.ts +0 -21
  577. package/dist/esm/rechnung/index.js +0 -20
  578. package/dist/esm/rechnung/texte.d.ts +0 -222
  579. package/dist/esm/rechnung/texte.js +0 -421
  580. package/fixtures/erwartet/karte-eigener.blatt32.json +0 -158
  581. package/fixtures/erwartet/karte-gptom-ios.blatt32.json +0 -230
  582. package/fixtures/erwartet/karte-gptom.blatt32.json +0 -230
  583. package/fixtures/erwartet/karte-hobex-cloud.blatt32.json +0 -200
  584. package/fixtures/erwartet/karte-hobex-hps.blatt32.json +0 -224
  585. package/fixtures/erwartet/karte-mypos.blatt32.json +0 -254
  586. package/fixtures/erwartet/karte-stripe-eps.blatt32.json +0 -194
  587. package/fixtures/erwartet/karte-stripe.blatt32.json +0 -212
  588. package/fixtures/erwartet/karte-sumup.blatt32.json +0 -218
  589. package/fixtures/erwartet/langer-artikelname.blatt32.json +0 -176
  590. package/fixtures/erwartet/null-ausfall.blatt32.json +0 -206
  591. package/fixtures/erwartet/null-jahr.blatt32.json +0 -212
  592. package/fixtures/erwartet/null-monat.blatt32.json +0 -206
  593. package/fixtures/erwartet/null-pruef.blatt32.json +0 -206
  594. package/fixtures/erwartet/null-schluss.blatt32.json +0 -206
  595. package/fixtures/erwartet/null-start.blatt32.json +0 -206
  596. package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt32.json +0 -212
  597. package/fixtures/erwartet/rabatt-einfach.blatt32.json +0 -182
  598. package/fixtures/erwartet/rabatt-trinkgeld.blatt32.json +0 -212
  599. package/fixtures/erwartet/rabatt-wertgutschein.blatt32.json +0 -218
  600. package/fixtures/erwartet/rabattzeilen.blatt32.json +0 -200
  601. package/fixtures/erwartet/signaturausfall-verkauf.blatt32.json +0 -194
  602. package/fixtures/erwartet/split-bar-rueckgeld.blatt32.json +0 -194
  603. package/fixtures/erwartet/split-eine-karte-trinkgeld.blatt32.json +0 -242
  604. package/fixtures/erwartet/split-karte-karte-bar.blatt32.json +0 -356
  605. package/fixtures/erwartet/split-langer-betrag.blatt32.json +0 -266
  606. package/fixtures/erwartet/split-tischrunde-trinkgeld.blatt32.json +0 -470
  607. package/fixtures/erwartet/split-trinkgeld-karte.blatt32.json +0 -272
  608. package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.blatt32.json +0 -326
  609. package/fixtures/erwartet/storno-rabatt.blatt32.json +0 -248
  610. package/fixtures/erwartet/storno-split-teil.blatt32.json +0 -230
  611. package/fixtures/erwartet/storno-split-voll.blatt32.json +0 -320
  612. package/fixtures/erwartet/storno-teil.blatt32.json +0 -206
  613. package/fixtures/erwartet/storno-voll.blatt32.json +0 -218
  614. package/fixtures/erwartet/testkasse-verkauf.blatt32.json +0 -224
  615. package/fixtures/erwartet/testsignatur-verkauf.blatt32.json +0 -236
  616. package/fixtures/erwartet/training.blatt32.json +0 -236
  617. package/fixtures/erwartet/verkauf-bar.blatt32.json +0 -176
  618. package/fixtures/erwartet/verkauf-karte.blatt32.json +0 -176
  619. package/fixtures/erwartet/verkauf-kleinunternehmer.blatt32.json +0 -182
  620. package/fixtures/kasse-meldungen-faelle.json +0 -32
  621. package/fixtures/oberflaeche.json +0 -558
  622. package/fixtures/rechnung-api-beispiele/brands-ok.json +0 -8
  623. package/fixtures/rechnung-api-beispiele/customer-get-fehler-beide.json +0 -15
  624. package/fixtures/rechnung-api-beispiele/setup-status-ok.json +0 -8
  625. package/fixtures/rechnung-api-beispiele/zahlung-fehler-ohne-schluessel.json +0 -14
  626. package/fixtures/rechnung-api-beispiele/zahlung-fehler-vor-ort.json +0 -15
  627. package/fixtures/rechnung-api-beispiele/zahlung-nachtrag.json +0 -14
  628. package/fixtures/rechnung-texte.json +0 -464
  629. /package/dist/cjs/{rechnung → invoice}/typen.js +0 -0
  630. /package/dist/esm/{rechnung → invoice}/typen.js +0 -0
  631. /package/fixtures/{erwartet/storno-rabatt.grid32.txt → expected/cancellation-discount.grid32.txt} +0 -0
  632. /package/fixtures/{erwartet/storno-rabatt.grid48.txt → expected/cancellation-discount.grid48.txt} +0 -0
  633. /package/fixtures/{erwartet/storno-voll.grid32.txt → expected/cancellation-full.grid32.txt} +0 -0
  634. /package/fixtures/{erwartet/storno-voll.grid48.txt → expected/cancellation-full.grid48.txt} +0 -0
  635. /package/fixtures/{erwartet/storno-teil.grid32.txt → expected/cancellation-partial.grid32.txt} +0 -0
  636. /package/fixtures/{erwartet/storno-teil.grid48.txt → expected/cancellation-partial.grid48.txt} +0 -0
  637. /package/fixtures/{erwartet/storno-split-voll.grid32.txt → expected/cancellation-split-full.grid32.txt} +0 -0
  638. /package/fixtures/{erwartet/storno-split-voll.grid48.txt → expected/cancellation-split-full.grid48.txt} +0 -0
  639. /package/fixtures/{erwartet/storno-split-teil.grid32.txt → expected/cancellation-split-partial.grid32.txt} +0 -0
  640. /package/fixtures/{erwartet/storno-split-teil.grid48.txt → expected/cancellation-split-partial.grid48.txt} +0 -0
  641. /package/fixtures/{erwartet/karte-eigener.grid32.txt → expected/card-custom.grid32.txt} +0 -0
  642. /package/fixtures/{erwartet/karte-eigener.grid48.txt → expected/card-custom.grid48.txt} +0 -0
  643. /package/fixtures/{erwartet/karte-gptom-ios.grid32.txt → expected/card-gptom-ios.grid32.txt} +0 -0
  644. /package/fixtures/{erwartet/karte-gptom-ios.grid48.txt → expected/card-gptom-ios.grid48.txt} +0 -0
  645. /package/fixtures/{erwartet/karte-gptom.grid32.txt → expected/card-gptom.grid32.txt} +0 -0
  646. /package/fixtures/{erwartet/karte-gptom.grid48.txt → expected/card-gptom.grid48.txt} +0 -0
  647. /package/fixtures/{erwartet/karte-hobex-cloud.grid32.txt → expected/card-hobex-cloud.grid32.txt} +0 -0
  648. /package/fixtures/{erwartet/karte-hobex-cloud.grid48.txt → expected/card-hobex-cloud.grid48.txt} +0 -0
  649. /package/fixtures/{erwartet/karte-hobex-hps.grid32.txt → expected/card-hobex-hps.grid32.txt} +0 -0
  650. /package/fixtures/{erwartet/karte-hobex-hps.grid48.txt → expected/card-hobex-hps.grid48.txt} +0 -0
  651. /package/fixtures/{erwartet/karte-mypos.grid32.txt → expected/card-mypos.grid32.txt} +0 -0
  652. /package/fixtures/{erwartet/karte-mypos.grid48.txt → expected/card-mypos.grid48.txt} +0 -0
  653. /package/fixtures/{erwartet/karte-stripe-eps.grid32.txt → expected/card-stripe-eps.grid32.txt} +0 -0
  654. /package/fixtures/{erwartet/karte-stripe-eps.grid48.txt → expected/card-stripe-eps.grid48.txt} +0 -0
  655. /package/fixtures/{erwartet/karte-stripe.grid32.txt → expected/card-stripe.grid32.txt} +0 -0
  656. /package/fixtures/{erwartet/karte-stripe.grid48.txt → expected/card-stripe.grid48.txt} +0 -0
  657. /package/fixtures/{erwartet/karte-sumup.grid32.txt → expected/card-sumup.grid32.txt} +0 -0
  658. /package/fixtures/{erwartet/karte-sumup.grid48.txt → expected/card-sumup.grid48.txt} +0 -0
  659. /package/fixtures/{erwartet/rabattzeilen.grid32.txt → expected/discount-lines.grid32.txt} +0 -0
  660. /package/fixtures/{erwartet/rabattzeilen.grid48.txt → expected/discount-lines.grid48.txt} +0 -0
  661. /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid32.txt → expected/discount-owner-tip.grid32.txt} +0 -0
  662. /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid48.txt → expected/discount-owner-tip.grid48.txt} +0 -0
  663. /package/fixtures/{erwartet/rabatt-einfach.grid32.txt → expected/discount-simple.grid32.txt} +0 -0
  664. /package/fixtures/{erwartet/rabatt-einfach.grid48.txt → expected/discount-simple.grid48.txt} +0 -0
  665. /package/fixtures/{erwartet/rabatt-trinkgeld.grid32.txt → expected/discount-tip.grid32.txt} +0 -0
  666. /package/fixtures/{erwartet/rabatt-trinkgeld.grid48.txt → expected/discount-tip.grid48.txt} +0 -0
  667. /package/fixtures/{erwartet/rabatt-wertgutschein.grid32.txt → expected/discount-value-voucher.grid32.txt} +0 -0
  668. /package/fixtures/{erwartet/rabatt-wertgutschein.grid48.txt → expected/discount-value-voucher.grid48.txt} +0 -0
  669. /package/fixtures/{erwartet/logo-probe-hoch.raster32.txt → expected/logo-sample-tall.raster32.txt} +0 -0
  670. /package/fixtures/{erwartet/logo-probe.raster32.txt → expected/logo-sample.raster32.txt} +0 -0
  671. /package/fixtures/{erwartet/langer-artikelname.grid32.txt → expected/long-item-name.grid32.txt} +0 -0
  672. /package/fixtures/{erwartet/langer-artikelname.grid48.txt → expected/long-item-name.grid48.txt} +0 -0
  673. /package/fixtures/{erwartet/verkauf-karte.grid32.txt → expected/sale-card.grid32.txt} +0 -0
  674. /package/fixtures/{erwartet/verkauf-karte.grid48.txt → expected/sale-card.grid48.txt} +0 -0
  675. /package/fixtures/{erwartet/verkauf-bar.grid32.txt → expected/sale-cash.grid32.txt} +0 -0
  676. /package/fixtures/{erwartet/verkauf-bar.grid48.txt → expected/sale-cash.grid48.txt} +0 -0
  677. /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid32.txt → expected/sale-small-business.grid32.txt} +0 -0
  678. /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid48.txt → expected/sale-small-business.grid48.txt} +0 -0
  679. /package/fixtures/{erwartet/signaturausfall-verkauf.grid32.txt → expected/signature-outage-sale.grid32.txt} +0 -0
  680. /package/fixtures/{erwartet/signaturausfall-verkauf.grid48.txt → expected/signature-outage-sale.grid48.txt} +0 -0
  681. /package/fixtures/{erwartet/split-karte-karte-bar.grid32.txt → expected/split-card-card-cash.grid32.txt} +0 -0
  682. /package/fixtures/{erwartet/split-karte-karte-bar.grid48.txt → expected/split-card-card-cash.grid48.txt} +0 -0
  683. /package/fixtures/{erwartet/split-bar-rueckgeld.grid32.txt → expected/split-cash-change.grid32.txt} +0 -0
  684. /package/fixtures/{erwartet/split-bar-rueckgeld.grid48.txt → expected/split-cash-change.grid48.txt} +0 -0
  685. /package/fixtures/{erwartet/split-langer-betrag.grid32.txt → expected/split-long-amount.grid32.txt} +0 -0
  686. /package/fixtures/{erwartet/split-langer-betrag.grid48.txt → expected/split-long-amount.grid48.txt} +0 -0
  687. /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid32.txt → expected/split-one-card-tip.grid32.txt} +0 -0
  688. /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid48.txt → expected/split-one-card-tip.grid48.txt} +0 -0
  689. /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid32.txt → expected/split-table-round-tip.grid32.txt} +0 -0
  690. /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid48.txt → expected/split-table-round-tip.grid48.txt} +0 -0
  691. /package/fixtures/{erwartet/split-trinkgeld-karte.grid32.txt → expected/split-tip-card.grid32.txt} +0 -0
  692. /package/fixtures/{erwartet/split-trinkgeld-karte.grid48.txt → expected/split-tip-card.grid48.txt} +0 -0
  693. /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid32.txt → expected/split-two-cards-same-provider.grid32.txt} +0 -0
  694. /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid48.txt → expected/split-two-cards-same-provider.grid48.txt} +0 -0
  695. /package/fixtures/{erwartet/testkasse-verkauf.grid32.txt → expected/test-cashregister-sale.grid32.txt} +0 -0
  696. /package/fixtures/{erwartet/testkasse-verkauf.grid48.txt → expected/test-cashregister-sale.grid48.txt} +0 -0
  697. /package/fixtures/{erwartet/testsignatur-verkauf.grid32.txt → expected/test-signature-sale.grid32.txt} +0 -0
  698. /package/fixtures/{erwartet/testsignatur-verkauf.grid48.txt → expected/test-signature-sale.grid48.txt} +0 -0
  699. /package/fixtures/{erwartet → expected}/training.grid32.txt +0 -0
  700. /package/fixtures/{erwartet → expected}/training.grid48.txt +0 -0
  701. /package/fixtures/{erwartet/null-jahr.grid32.txt → expected/zero-annual.grid32.txt} +0 -0
  702. /package/fixtures/{erwartet/null-jahr.grid48.txt → expected/zero-annual.grid48.txt} +0 -0
  703. /package/fixtures/{erwartet/null-schluss.grid32.txt → expected/zero-final.grid32.txt} +0 -0
  704. /package/fixtures/{erwartet/null-schluss.grid48.txt → expected/zero-final.grid48.txt} +0 -0
  705. /package/fixtures/{erwartet/null-pruef.grid32.txt → expected/zero-manual.grid32.txt} +0 -0
  706. /package/fixtures/{erwartet/null-pruef.grid48.txt → expected/zero-manual.grid48.txt} +0 -0
  707. /package/fixtures/{erwartet/null-monat.grid32.txt → expected/zero-monthly.grid32.txt} +0 -0
  708. /package/fixtures/{erwartet/null-monat.grid48.txt → expected/zero-monthly.grid48.txt} +0 -0
  709. /package/fixtures/{erwartet/null-ausfall.grid32.txt → expected/zero-outage-end.grid32.txt} +0 -0
  710. /package/fixtures/{erwartet/null-ausfall.grid48.txt → expected/zero-outage-end.grid48.txt} +0 -0
  711. /package/fixtures/{erwartet/null-start.grid32.txt → expected/zero-start.grid32.txt} +0 -0
  712. /package/fixtures/{erwartet/null-start.grid48.txt → expected/zero-start.grid48.txt} +0 -0
@@ -1,10 +1,11 @@
1
1
  import { type TransportOptions } from '../client/transport.js';
2
2
  import { type ReceiptCompany } from '../models/receipt-company.js';
3
- import { type KasseSettings } from '../kasse/settings.js';
3
+ import type { PosSettings } from '../pos/settings.js';
4
4
  /**
5
5
  * Verbindungsangaben ohne Anmeldung — alles, was [TransportOptions] ausser der
6
- * Anmeldung fuehrt. Alle Felder sind wahlfrei: ohne Angabe gelten Basis-URL und
7
- * Zeitlimit der Produktion und das globale `fetch`.
6
+ * Anmeldung fuehrt. Alle Felder sind wahlfrei: ohne Angabe gelten der Kassenweg
7
+ * der Produktion ([POS_BASE_URL]), das Zeitlimit der Produktion und das
8
+ * globale `fetch`. Die Web-Kasse gibt `posBaseUrl: '/api/v3'` (gleicher Ursprung).
8
9
  */
9
10
  export type RegisterDeviceConnection = Omit<TransportOptions, 'auth'>;
10
11
  /** Ausweis eines gekoppelten Geraets — Nachweis der beiden Folgeaufrufe. */
@@ -44,11 +45,11 @@ export interface RegisterGeo {
44
45
  acc?: number;
45
46
  }
46
47
  /** Angaben, die Kopplung und Login zusaetzlich mitschicken duerfen. */
47
- export interface RegisterGeraeteAngaben {
48
+ export interface RegisterDeviceInfo {
48
49
  client?: RegisterClientInfo;
49
50
  geo?: RegisterGeo | null;
50
51
  }
51
- export interface PairRegisterDeviceOptions extends RegisterDeviceConnection, RegisterGeraeteAngaben {
52
+ export interface PairRegisterDeviceOptions extends RegisterDeviceConnection, RegisterDeviceInfo {
52
53
  /**
53
54
  * Die Kasse ist schon auf einem anderen Geraet geoeffnet (BELEGT-Rueckfrage):
54
55
  * `true` uebernimmt sie hierher und widerruft das alte Geraet.
@@ -67,14 +68,25 @@ export interface PairRegisterDeviceOptions extends RegisterDeviceConnection, Reg
67
68
  /** Bezeichnung dieses Geraets in der Geraeteliste; ohne Angabe "Kasse". */
68
69
  label?: string;
69
70
  }
70
- /** Ergebnis der Kopplung — der vollstaendige Ausweis dieses Geraets. */
71
+ /**
72
+ * Ergebnis der Kopplung: der vollstaendige Ausweis dieses Geraets.
73
+ *
74
+ * **Speicherformat der App bleibt, wie es ist** (Nachtrag §9, B2): wer den
75
+ * Ausweis ablegt, bildet `companyName`/`cashregisterLabel` auf seine
76
+ * bisherigen Felder ab (Web-Kasse: `betrieb`/`kasse`). Die Aufrufe dieses
77
+ * Pakets lesen aus einem abgelegten Satz nur `ownerUid`, `deviceId`,
78
+ * `deviceSecret` (und `cashregisterId` beim Login); weitere Felder eines alten
79
+ * Satzes stoeren nicht.
80
+ */
71
81
  export interface PairedRegisterDevice extends RegisterDeviceCredentials {
72
82
  /** Kasse, an die die Kopplung dieses Geraet gebunden hat. */
73
83
  cashregisterId: string;
74
- /** Firmenname des Betriebs (Backend: `betrieb`) — Anzeige, kann leer sein. */
84
+ /** Firmenname des Betriebs; Anzeige, kann leer sein. */
75
85
  companyName: string;
76
- /** Bezeichnung der Kasse (Backend: `kasse`) — Anzeige, kann leer sein. */
86
+ /** Bezeichnung der Kasse (ohne Bezeichnung die Kassen-ID); Anzeige, kann leer sein. */
77
87
  cashregisterLabel: string;
88
+ /** Die Kopplung gilt der Test-Umgebung des Betriebs (`kr_test_`-Konto). */
89
+ testEnvironment: boolean;
78
90
  }
79
91
  /**
80
92
  * Art eines Kassen-Benutzers: eine Person oder ein Geraet (Sammelkonto). Ein
@@ -93,25 +105,25 @@ export interface RegisterUserSummary {
93
105
  * Betriebs gesetzt: die Kasse zeigt ihm das Freifeld statt der Kaestchen.
94
106
  * Das Backend sendet das Feld nur, wenn es zutrifft; gelesen ist es immer da.
95
107
  */
96
- altbestand: boolean;
108
+ pinPolicyOutdated: boolean;
97
109
  }
98
- /** PIN-Regel des Betriebs — daraus baut die Kasse Kaestchen und Tastatur. */
110
+ /** PIN-Regel des Betriebs: daraus baut die Kasse Kaestchen und Tastatur. */
99
111
  export interface RegisterPinPolicy {
100
112
  /** Feste Stellenzahl (Backend: 3 bis 6). */
101
- stellen: number;
102
- /** `ziffern` (nur 0-9) oder `zeichen` (0-9 plus Kopplungs-Alphabet). */
103
- zeichen: 'ziffern' | 'zeichen' | (string & {});
113
+ length: number;
114
+ /** `digits` (nur 0-9) oder `alphanumeric` (0-9 plus Kopplungs-Alphabet). */
115
+ charset: 'digits' | 'alphanumeric' | (string & {});
104
116
  }
105
- /** Anmeldemodus des Geraets; ein unbekannter kuenftiger Wert kommt durch. */
106
- export type RegisterLoginMode = 'auswahl' | 'pin' | (string & {});
117
+ /** Anmeldemodus des Geraets: Benutzerauswahl oder nur PIN. */
118
+ export type RegisterLoginMode = 'select_user' | 'pin';
107
119
  /** Antwort von [listRegisterUsersForDevice]: Benutzer, Regel, Modus. */
108
120
  export interface RegisterDeviceUsers {
109
121
  /** Im Modus `pin` bewusst leer — Namen haben am nur-PIN-Geraet nichts verloren. */
110
122
  users: RegisterUserSummary[];
111
123
  /** Kassen-Einstellungen (betriebsweit + Geraet), gemischt mit den Standardwerten. */
112
- settings: KasseSettings;
113
- /** Belegkopf-Daten des Betriebs (Name, Anschrift, UID, Fusszeilen) -- ohne Geheimnisse. */
114
- betriebsdaten: ReceiptCompany | null;
124
+ settings: PosSettings;
125
+ /** Belegkopf-Daten des Betriebs (Name, Anschrift, UID, Fusszeilen), ohne Geheimnisse. */
126
+ receiptHeader: ReceiptCompany | null;
115
127
  /**
116
128
  * `null`, wenn das Backend (noch) keine Regel nennt — dann zeigt die Kasse
117
129
  * das Freifeld, statt Kaestchen mit einer erratenen Stellenzahl.
@@ -119,17 +131,19 @@ export interface RegisterDeviceUsers {
119
131
  policy: RegisterPinPolicy | null;
120
132
  loginMode: RegisterLoginMode;
121
133
  /** Der Betrieb verlangt die Ortung beim Login (Standortsperre an). */
122
- standortsperre: boolean;
134
+ locationLock: boolean;
123
135
  /**
124
- * Darf die gebundene Kasse ueberhaupt Belege erstellen? `bereit: false`
125
- * nennt den Grund (ausser Betrieb, Schlussbeleg erstellt) — die Kasse
126
- * sperrt das Kassieren VOR dem ersten Beleg statt an createReceipt zu
127
- * scheitern. Fehlt das Feld (aelteres Backend), gilt bereit.
136
+ * Darf die gebundene Kasse ueberhaupt Belege erstellen? `ready: false`
137
+ * nennt den Grund als Menschentext (ausser Betrieb, keine Signaturkarte,
138
+ * Startbeleg fehlt): die Kasse sperrt das Kassieren VOR dem ersten Beleg
139
+ * statt an createReceipt zu scheitern. Fehlt das Feld, gilt bereit.
128
140
  */
129
- kasse?: {
130
- bereit: boolean;
131
- grund?: string | null;
132
- } | null;
141
+ cashregister?: {
142
+ ready: boolean;
143
+ reason?: string | null;
144
+ };
145
+ /** Das Geraet haengt an der Test-Umgebung des Betriebs. */
146
+ testEnvironment: boolean;
133
147
  }
134
148
  /**
135
149
  * Rechte eines Kassen-Benutzers (Backend: `perms`, Vorlagen `PERMS_KASSIER`
@@ -169,7 +183,7 @@ export interface RegisterUserPerms {
169
183
  }
170
184
  /**
171
185
  * Alle Rechte-Schluessel, die dieses Paket kennt — die Zwillinge pruefen
172
- * dagegen, und ueber `fixtures/oberflaeche.json` steht die Liste im Vertrag.
186
+ * dagegen, und ueber `fixtures/surface.json` steht die Liste im Vertrag.
173
187
  *
174
188
  * `satisfies` schliesst die eine Richtung: ein Name, den [RegisterUserPerms]
175
189
  * nicht fuehrt (Tippfehler, umbenanntes Recht), kommt hier nicht durch.
@@ -205,7 +219,7 @@ export interface RegisterUserSession {
205
219
  }
206
220
  export interface ListRegisterUsersForDeviceOptions extends RegisterDeviceConnection, RegisterDeviceCredentials {
207
221
  }
208
- export interface RegisterUserLoginOptions extends RegisterDeviceConnection, RegisterDeviceCredentials, RegisterGeraeteAngaben {
222
+ export interface RegisterUserLoginOptions extends RegisterDeviceConnection, RegisterDeviceCredentials, RegisterDeviceInfo {
209
223
  /** Kassen-Benutzer aus [listRegisterUsersForDevice]. */
210
224
  userId: string;
211
225
  /**
@@ -219,7 +233,8 @@ export interface RegisterUserLoginOptions extends RegisterDeviceConnection, Regi
219
233
  /**
220
234
  * Eine belegte Kasse uebernehmen. Nur mit dem Recht `takeover` (Kassen-Chef);
221
235
  * die aelteste laufende Sitzung wird dabei verdraengt. Ohne das Recht bleibt
222
- * es bei der Abweisung "Kasse wird gerade auf … verwendet".
236
+ * es bei der Abweisung `cashregister_in_use` (Daten `deviceLabel`,
237
+ * `takeoverAllowed: false`, siehe [registerErrorDetails]).
223
238
  */
224
239
  takeover?: boolean;
225
240
  /**
@@ -232,7 +247,7 @@ export interface RegisterUserLoginOptions extends RegisterDeviceConnection, Regi
232
247
  */
233
248
  takeoverSessionId?: string;
234
249
  }
235
- export interface RegisterPinLoginOptions extends RegisterDeviceConnection, RegisterDeviceCredentials, RegisterGeraeteAngaben {
250
+ export interface RegisterPinLoginOptions extends RegisterDeviceConnection, RegisterDeviceCredentials, RegisterDeviceInfo {
236
251
  /**
237
252
  * Die PIN allein — sie identifiziert UND authentifiziert (Geraete-Modus
238
253
  * `pin`; das Backend haelt PINs je Betrieb eindeutig). Das Format prueft
@@ -275,12 +290,16 @@ export declare function unpairRegisterDevice(options: ListRegisterUsersForDevice
275
290
  export interface RegisterSession {
276
291
  id: string;
277
292
  deviceId: string | null;
278
- /** Name des Geraets; „Kasse", wenn keiner gesetzt wurde. */
279
- deviceLabel: string;
293
+ /**
294
+ * Name des Geraets; `null`, wenn es keinen hat (unter `/v3` sendet das
295
+ * Backend dann `null` statt des frueheren Ersatzes „Kasse"). Die Oberflaeche
296
+ * waehlt ihren eigenen Ersatztext.
297
+ */
298
+ deviceLabel: string | null;
280
299
  startedAt: number | null;
281
300
  expiresAt: number | null;
282
301
  /** Laeuft diese Sitzung auf DIESEM Geraet? */
283
- selbst: boolean;
302
+ own: boolean;
284
303
  /**
285
304
  * Wer angemeldet ist. Fehlt an einem nur-PIN-Geraet: Dort zeigt schon die
286
305
  * Benutzerliste keine Namen, und was dort nicht steht, darf hier nicht
@@ -290,7 +309,7 @@ export interface RegisterSession {
290
309
  userName?: string;
291
310
  }
292
311
  /** Was eine Kasse gerade haelt -- Lizenzzahl und laufende Sitzungen. */
293
- export interface RegisterSessionsStand {
312
+ export interface RegisterSessionOverview {
294
313
  /** Wie viele Sitzungen gleichzeitig laufen duerfen. */
295
314
  licenses: number;
296
315
  /** Aelteste zuerst: oben steht, was das Backend ohne Wahl verdraengen wuerde. */
@@ -310,7 +329,7 @@ export interface ListRegisterSessionsForDeviceOptions extends RegisterDeviceConn
310
329
  * [listRegisterUsersForDevice]: An diesem Punkt gibt es weder Sitzung noch
311
330
  * Token. Die Kasse bestimmt das Backend aus dem Geraet, nicht aus dem Aufruf.
312
331
  */
313
- export declare function listRegisterSessionsForDevice(options: ListRegisterSessionsForDeviceOptions): Promise<RegisterSessionsStand>;
332
+ export declare function listRegisterSessionsForDevice(options: ListRegisterSessionsForDeviceOptions): Promise<RegisterSessionOverview>;
314
333
  export declare function listRegisterUsersForDevice(options: ListRegisterUsersForDeviceOptions): Promise<RegisterDeviceUsers>;
315
334
  /**
316
335
  * Kassen-Benutzer per PIN anmelden. **Ohne Anmeldung** — dieser Aufruf
@@ -12,7 +12,7 @@ exports.registerPinLogin = registerPinLogin;
12
12
  const errors_js_1 = require("../client/errors.js");
13
13
  const transport_js_1 = require("../client/transport.js");
14
14
  const receipt_company_js_1 = require("../models/receipt-company.js");
15
- const settings_js_1 = require("../kasse/settings.js");
15
+ const client_js_1 = require("../pos/client.js");
16
16
  /**
17
17
  * Die drei Aufrufe, die **ohne jede Identitaet** laufen: Kopplung eines
18
18
  * Geraets, Benutzerliste dieses Geraets, PIN-Anmeldung. Sie sind der Weg, auf
@@ -51,7 +51,7 @@ const settings_js_1 = require("../kasse/settings.js");
51
51
  const ohneAnmeldung = () => ({ headers: {}, params: {} });
52
52
  /**
53
53
  * Alle Rechte-Schluessel, die dieses Paket kennt — die Zwillinge pruefen
54
- * dagegen, und ueber `fixtures/oberflaeche.json` steht die Liste im Vertrag.
54
+ * dagegen, und ueber `fixtures/surface.json` steht die Liste im Vertrag.
55
55
  *
56
56
  * `satisfies` schliesst die eine Richtung: ein Name, den [RegisterUserPerms]
57
57
  * nicht fuehrt (Tippfehler, umbenanntes Recht), kommt hier nicht durch.
@@ -94,8 +94,9 @@ async function pairRegisterDevice(options) {
94
94
  deviceSecret: pflichtfeld('pairRegisterDevice', daten, 'deviceSecret'),
95
95
  ownerUid: pflichtfeld('pairRegisterDevice', daten, 'ownerUid'),
96
96
  cashregisterId: pflichtfeld('pairRegisterDevice', daten, 'cashregisterId'),
97
- companyName: text(daten?.['betrieb']),
98
- cashregisterLabel: text(daten?.['kasse']),
97
+ companyName: text(daten?.['companyName']),
98
+ cashregisterLabel: text(daten?.['cashregisterLabel']),
99
+ testEnvironment: daten?.['testEnvironment'] === true,
99
100
  };
100
101
  }
101
102
  /**
@@ -150,10 +151,10 @@ async function listRegisterSessionsForDevice(options) {
150
151
  // nichts tun kann, ist schlimmer als keine.
151
152
  id: pflichtfeld(name, roh, 'id'),
152
153
  deviceId: typeof roh['deviceId'] === 'string' && roh['deviceId'] ? roh['deviceId'] : null,
153
- deviceLabel: text(roh['deviceLabel']) || 'Kasse',
154
+ deviceLabel: text(roh['deviceLabel']) || null,
154
155
  startedAt: typeof roh['startedAt'] === 'number' ? roh['startedAt'] : null,
155
156
  expiresAt: typeof roh['expiresAt'] === 'number' ? roh['expiresAt'] : null,
156
- selbst: roh['selbst'] === true,
157
+ own: roh['own'] === true,
157
158
  // Nur uebernehmen, wenn wirklich einer kam: ein leerer String stuende
158
159
  // in der Oberflaeche als namenlose Zeile, statt die Spalte wegzulassen.
159
160
  ...(typeof roh['userName'] === 'string' && roh['userName'] ? { userName: roh['userName'] } : {}),
@@ -181,49 +182,48 @@ async function listRegisterUsersForDevice(options) {
181
182
  id: pflichtfeld(name, roh, 'id'),
182
183
  name: text(roh['name']),
183
184
  kind: typeof roh['kind'] === 'string' && roh['kind'] ? roh['kind'] : 'person',
184
- altbestand: roh['altbestand'] === true,
185
+ pinPolicyOutdated: roh['pinPolicyOutdated'] === true,
185
186
  };
186
187
  });
187
- const settingsRoh = (daten?.settings ?? {});
188
- const settings = {
189
- betrieb: (0, settings_js_1.mergeKasseSettings)(settings_js_1.KASSE_BETRIEB_STANDARD, (settingsRoh.betrieb ?? null)),
190
- geraet: (0, settings_js_1.mergeKasseSettings)(settings_js_1.KASSE_GERAET_STANDARD, (settingsRoh.geraet ?? null)),
191
- };
192
- const bd = daten?.betriebsdaten;
193
- const betriebsdaten = bd && typeof bd === 'object' ? (0, receipt_company_js_1.fromReceiptCompanyPayload)(bd) : null;
188
+ const settingsRoh = daten?.settings;
189
+ const settings = (0, client_js_1.posSettingsFromWire)(settingsRoh !== null && typeof settingsRoh === 'object' ? settingsRoh : null);
190
+ const kopf = daten?.receiptHeader;
191
+ const receiptHeader = kopf && typeof kopf === 'object' ? (0, receipt_company_js_1.fromReceiptCompanyPayload)(kopf) : null;
194
192
  return {
195
193
  users,
196
194
  policy: regel(daten?.policy),
197
- loginMode: daten?.loginMode === 'pin' ? 'pin' : 'auswahl',
195
+ // Nur `pin` heisst nur-PIN; alles andere (auch ein kuenftiger Wert) zeigt
196
+ // die Auswahl: die Namen stehen dann in `users`, und das Backend weist
197
+ // eine Anmeldung ohne Auswahl ohnehin mit `login_mode_select_user` ab.
198
+ loginMode: daten?.loginMode === 'pin' ? 'pin' : 'select_user',
198
199
  settings,
199
- betriebsdaten,
200
- standortsperre: daten?.standortsperre === true,
201
- // 0.6.27 ergaenzte nur den TYP — hier fiel das Feld beim Zusammenbau
202
- // stumm weg, und die Kasse sah nie eine Sperre. Fehlt es (aelteres
203
- // Backend), bleibt es undefined: dann gilt bereit.
204
- kasse: kasseBereit(daten?.kasse),
200
+ receiptHeader,
201
+ locationLock: daten?.locationLock === true,
202
+ // Fehlt das Feld, bleibt es undefined: dann gilt bereit.
203
+ ...(kasseBereit(daten?.cashregister) ? { cashregister: kasseBereit(daten?.cashregister) } : {}),
204
+ testEnvironment: daten?.testEnvironment === true,
205
205
  };
206
206
  }
207
207
  function kasseBereit(wert) {
208
208
  if (typeof wert !== 'object' || wert === null || Array.isArray(wert))
209
209
  return undefined;
210
210
  const roh = wert;
211
- if (typeof roh['bereit'] !== 'boolean')
211
+ if (typeof roh['ready'] !== 'boolean')
212
212
  return undefined;
213
- return { bereit: roh['bereit'], grund: typeof roh['grund'] === 'string' ? roh['grund'] : null };
213
+ return { ready: roh['ready'], reason: typeof roh['reason'] === 'string' ? roh['reason'] : null };
214
214
  }
215
215
  /** Die Regel aus der Antwort — oder `null`, wenn keine brauchbare kommt. */
216
216
  function regel(wert) {
217
217
  if (typeof wert !== 'object' || wert === null || Array.isArray(wert))
218
218
  return null;
219
219
  const roh = wert;
220
- const stellen = roh['stellen'];
221
- const zeichen = roh['zeichen'];
222
- if (typeof stellen !== 'number' || !Number.isInteger(stellen) || stellen < 1)
220
+ const length = roh['length'];
221
+ const charset = roh['charset'];
222
+ if (typeof length !== 'number' || !Number.isInteger(length) || length < 1)
223
223
  return null;
224
- if (typeof zeichen !== 'string' || zeichen === '')
224
+ if (typeof charset !== 'string' || charset === '')
225
225
  return null;
226
- return { stellen, zeichen: zeichen };
226
+ return { length, charset: charset };
227
227
  }
228
228
  /**
229
229
  * Kassen-Benutzer per PIN anmelden. **Ohne Anmeldung** — dieser Aufruf
@@ -311,7 +311,11 @@ function sitzungAusAntwort(name, daten) {
311
311
  },
312
312
  };
313
313
  }
314
- /** Transport ohne Anmeldung; `auth` steht zuletzt und ist damit nicht zu ueberschreiben. */
314
+ /**
315
+ * Transport ohne Anmeldung; `auth` steht zuletzt und ist damit nicht zu
316
+ * ueberschreiben. Ohne eigene Basis gehen diese Aufrufe an den Kassenweg: sie
317
+ * sind reine Kassenaufrufe, der Transport leitet sie dorthin.
318
+ */
315
319
  function transportFuer(verbindung) {
316
320
  return (0, transport_js_1.createTransport)({ ...verbindung, auth: ohneAnmeldung });
317
321
  }
@@ -19,11 +19,11 @@ import type { InternerTransport } from '../client/aufrufe.js';
19
19
  * seit 1970).
20
20
  *
21
21
  * Die Sitzung lebt 90 Sekunden; die Browser-Kasse erneuert alle 30. Ist sie
22
- * bereits beendet oder uebernommen, antwortet das Backend fachlich ("Sitzung
23
- * beendet — bitte neu anmelden.") — dann hilft nur eine neue Anmeldung ueber
24
- * `registerUserLogin`.
22
+ * bereits beendet oder uebernommen, antwortet das Backend mit dem Code
23
+ * `session_expired` bzw. `session_ended` (siehe [isRegisterError]); dann hilft
24
+ * nur eine neue Anmeldung ueber `registerUserLogin` oder `registerPinLogin`.
25
25
  */
26
- export declare function renewRegisterSession(rufen: InternerTransport): Promise<number>;
26
+ export declare function renewRegisterSession(transport: InternerTransport): Promise<number>;
27
27
  /**
28
28
  * Sitzung beenden und den Lizenzplatz sofort freigeben — der regulaere Weg des
29
29
  * Abmeldens.
@@ -34,4 +34,4 @@ export declare function renewRegisterSession(rufen: InternerTransport): Promise<
34
34
  * einer harmlosen Vertragsaenderung — ausgerechnet beim Abmelden, dem Aufruf,
35
35
  * der auch dann durchgehen soll, wenn sonst nichts mehr geht.
36
36
  */
37
- export declare function endRegisterSession(rufen: InternerTransport): Promise<void>;
37
+ export declare function endRegisterSession(transport: InternerTransport): Promise<void>;
@@ -23,12 +23,12 @@ const errors_js_1 = require("../client/errors.js");
23
23
  * seit 1970).
24
24
  *
25
25
  * Die Sitzung lebt 90 Sekunden; die Browser-Kasse erneuert alle 30. Ist sie
26
- * bereits beendet oder uebernommen, antwortet das Backend fachlich ("Sitzung
27
- * beendet — bitte neu anmelden.") — dann hilft nur eine neue Anmeldung ueber
28
- * `registerUserLogin`.
26
+ * bereits beendet oder uebernommen, antwortet das Backend mit dem Code
27
+ * `session_expired` bzw. `session_ended` (siehe [isRegisterError]); dann hilft
28
+ * nur eine neue Anmeldung ueber `registerUserLogin` oder `registerPinLogin`.
29
29
  */
30
- async function renewRegisterSession(rufen) {
31
- const daten = await rufen('renewRegisterSession');
30
+ async function renewRegisterSession(transport) {
31
+ const daten = await transport('renewRegisterSession');
32
32
  const expiresAt = daten?.expiresAt;
33
33
  if (typeof expiresAt !== 'number' || !Number.isFinite(expiresAt)) {
34
34
  // Ohne brauchbaren Ablaufzeitpunkt weiss die Kasse nicht, wann sie das
@@ -47,6 +47,6 @@ async function renewRegisterSession(rufen) {
47
47
  * einer harmlosen Vertragsaenderung — ausgerechnet beim Abmelden, dem Aufruf,
48
48
  * der auch dann durchgehen soll, wenn sonst nichts mehr geht.
49
49
  */
50
- async function endRegisterSession(rufen) {
51
- await rufen('endRegisterSession');
50
+ async function endRegisterSession(transport) {
51
+ await transport('endRegisterSession');
52
52
  }
@@ -0,0 +1,45 @@
1
+ import { type SchemaEintrag, type SchemaObjekt } from './vokabular.js';
2
+ export type Objekt = Record<string, unknown>;
3
+ export declare const hat: (o: object, k: string) => boolean;
4
+ export declare const istObjekt: (w: unknown) => w is Objekt;
5
+ /** Schema-Eintrag zerlegt: innerer Name, Unterschema (ohne `__`) und ob es eine Liste ist. */
6
+ export declare function regel(eintrag: SchemaEintrag): {
7
+ innen: string;
8
+ unter: SchemaObjekt | null;
9
+ liste: boolean;
10
+ };
11
+ /** Innere Namen einer Schema-Ebene (was der Server innen an dieser Stelle kennt). */
12
+ export declare function innereNamen(schema: SchemaObjekt): Map<string, string>;
13
+ /**
14
+ * Ein Belegdokument, wie Handler und Rand es vor der Uebersetzung sehen:
15
+ * ohne Storno-Marke (storno-core.ohneInterneStornoFelder, Rand
16
+ * ohneStornoMarke). Alles andere bleibt woertlich, auch `pruefangaben` im
17
+ * Beleg selbst (der Server reicht sie so durch). Wirft, wenn es kein
18
+ * Belegdokument ist.
19
+ */
20
+ export declare function _storedReceiptInner(doc: unknown, functionName: string): Objekt;
21
+ /**
22
+ * Registrierdaten der Huelle aus den beim Ausstellen festgehaltenen
23
+ * `pruefangaben` (Zwilling von `pruefangabenFuerBeleg`, erster Zweig): genau
24
+ * die zwei Felder, je ueber [alsIso].
25
+ */
26
+ export declare function pruefangabenDerHuelle(p: Objekt): Objekt;
27
+ /**
28
+ * Eine Beleg-Huelle der inneren Form (`receipt`, Betriebsfelder, `kopfId`,
29
+ * `pruefangaben`, `testKasse` ...) in die Drahtform von `getReceipt` unter
30
+ * `/api/v3` (Kanal `app`: Anbieterdaten bleiben).
31
+ */
32
+ export declare function _receiptEnvelopeToWire(huelle: Objekt): Objekt;
33
+ /**
34
+ * Ein Belegdokument (`users/{uid}/cashregisters/{id}/receipts/{id}`) in der
35
+ * Form von `data.receipt` einer `/api/v3`-Antwort (Kanal `app`: Anbieterdaten
36
+ * bleiben). Wirft, wenn es kein Belegdokument ist.
37
+ */
38
+ export declare function _storedReceiptToWire(doc: unknown, functionName?: string): Objekt;
39
+ /**
40
+ * Ein Artikeldokument (`users/{uid}/articles/{id}`) in der Form eines
41
+ * Eintrags von `listMyArticles` unter `/api/v3`. Vor dem Rand ergaenzt der
42
+ * Handler `groupId`/`revenueGroupId` (fehlt -> `null`) und die Kachel
43
+ * (article-endpoints.js listMyArticles); das steht nicht im Vertrag.
44
+ */
45
+ export declare function _storedArticleToWire(id: string, doc: unknown, functionName?: string): Objekt;
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.istObjekt = exports.hat = void 0;
4
+ exports.regel = regel;
5
+ exports.innereNamen = innereNamen;
6
+ exports._storedReceiptInner = _storedReceiptInner;
7
+ exports.pruefangabenDerHuelle = pruefangabenDerHuelle;
8
+ exports._receiptEnvelopeToWire = _receiptEnvelopeToWire;
9
+ exports._storedReceiptToWire = _storedReceiptToWire;
10
+ exports._storedArticleToWire = _storedArticleToWire;
11
+ const errors_js_1 = require("../client/errors.js");
12
+ const vokabular_js_1 = require("./vokabular.js");
13
+ const hat = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
14
+ exports.hat = hat;
15
+ const istObjekt = (w) => w !== null && typeof w === 'object' && !Array.isArray(w);
16
+ exports.istObjekt = istObjekt;
17
+ /** Schema-Eintrag zerlegt: innerer Name, Unterschema (ohne `__`) und ob es eine Liste ist. */
18
+ function regel(eintrag) {
19
+ const liste = Array.isArray(eintrag);
20
+ const kern = (liste ? eintrag[0] : eintrag);
21
+ if (typeof kern === 'string')
22
+ return { innen: kern, unter: null, liste };
23
+ const { __: innen, ...unter } = kern;
24
+ return { innen: innen, unter: unter, liste };
25
+ }
26
+ /**
27
+ * Schluessel innen -> aussen (Zwilling von `schluessel(obj, schema, 'aus')`).
28
+ * Kopiert, veraendert die Eingabe nie; ein Treffer wandert wie am Server ans
29
+ * Ende des Objekts.
30
+ */
31
+ function schluesselNachAussen(obj, schema) {
32
+ if (!(0, exports.istObjekt)(obj))
33
+ return obj;
34
+ const raus = { ...obj };
35
+ for (const [aussen, eintrag] of Object.entries(schema)) {
36
+ if (aussen === '__')
37
+ continue;
38
+ const { innen, unter, liste } = regel(eintrag);
39
+ if (!(0, exports.hat)(raus, innen))
40
+ continue;
41
+ let wert = raus[innen];
42
+ if (unter) {
43
+ wert = liste ? (Array.isArray(wert) ? wert.map((e) => schluesselNachAussen(e, unter)) : wert) : schluesselNachAussen(wert, unter);
44
+ }
45
+ delete raus[innen];
46
+ raus[aussen] = wert;
47
+ }
48
+ return raus;
49
+ }
50
+ /** Innere Namen einer Schema-Ebene (was der Server innen an dieser Stelle kennt). */
51
+ function innereNamen(schema) {
52
+ const raus = new Map();
53
+ for (const [aussen, eintrag] of Object.entries(schema))
54
+ if (aussen !== '__')
55
+ raus.set(regel(eintrag).innen, aussen);
56
+ return raus;
57
+ }
58
+ /** Wert an einem aeusseren Pfad (`a.b`, `a[].b`) abbilden (Zwilling von `anPfad`). */
59
+ function anPfad(obj, teile, fn) {
60
+ if (obj == null || teile.length === 0 || typeof obj !== 'object')
61
+ return obj;
62
+ const [kopf, ...rest] = teile;
63
+ const liste = kopf.endsWith('[]');
64
+ const name = liste ? kopf.slice(0, -2) : kopf;
65
+ if (!(0, exports.hat)(obj, name))
66
+ return obj;
67
+ const wert = obj[name];
68
+ let neu;
69
+ if (liste)
70
+ neu = Array.isArray(wert) ? wert.map((e) => (rest.length ? anPfad(e, rest, fn) : fn(e))) : wert;
71
+ else
72
+ neu = rest.length ? anPfad(wert, rest, fn) : fn(wert);
73
+ return { ...obj, [name]: neu };
74
+ }
75
+ /**
76
+ * Werte ueber die Kataloge des Vertrags abbilden (Zwilling von
77
+ * `werteAbbilden`). Ein Wert, den der Katalog nicht kennt, bleibt woertlich
78
+ * stehen, wie am Server.
79
+ */
80
+ function werteNachAussen(obj, werte) {
81
+ let raus = obj;
82
+ for (const [pfad, { $catalog }] of Object.entries(werte)) {
83
+ const katalog = vokabular_js_1.KATALOGE[$catalog];
84
+ if (!katalog)
85
+ throw new Error(`stored: Katalog ${$catalog} fehlt im Vokabular`);
86
+ raus = anPfad(raus, pfad.split('.'), (v) => (typeof v === 'string' && (0, exports.hat)(katalog, v) ? katalog[v] : v));
87
+ }
88
+ return raus;
89
+ }
90
+ /** Englische Werte eines Katalogs (was an dieser Stelle hinaus darf). */
91
+ const aeussereWerte = (name) => new Set(Object.values(vokabular_js_1.KATALOGE[name] ?? {}));
92
+ // ---- Belege -----------------------------------------------------------------
93
+ /**
94
+ * Interne Marke der Storno-Reservierung: `stornoMarke` am Storno-Beleg,
95
+ * `marke` im Bezug und in `cancellations[]`. Handler
96
+ * (storno-core.ohneInterneStornoFelder) und Rand (ohneStornoMarke) nehmen sie
97
+ * heraus; der Vertrag nennt die Namen nicht (nur `$function: belegJeKanal`).
98
+ */
99
+ const STORNO_MARKE = 'stornoMarke';
100
+ const MARKE = 'marke';
101
+ const ohneMarke = (o) => {
102
+ if (!(0, exports.istObjekt)(o) || !(0, exports.hat)(o, MARKE))
103
+ return o;
104
+ const { [MARKE]: _m, ...rest } = o;
105
+ return rest;
106
+ };
107
+ /**
108
+ * Zwilling von `beleg-pruefangaben.alsIso`: leer (auch 0, '') -> null;
109
+ * Firestore-Zeitstempel, Zahl oder Zeichenkette -> ISO-Zeitpunkt in UTC;
110
+ * nicht lesbar -> null.
111
+ */
112
+ function alsIso(ts) {
113
+ if (!ts)
114
+ return null;
115
+ let d = ts;
116
+ if (typeof d.toDate === 'function')
117
+ d = d.toDate();
118
+ if (typeof d === 'number' || typeof d === 'string')
119
+ d = new Date(d);
120
+ return d instanceof Date && !Number.isNaN(d.getTime()) ? d.toISOString() : null;
121
+ }
122
+ /**
123
+ * Ein Belegdokument, wie Handler und Rand es vor der Uebersetzung sehen:
124
+ * ohne Storno-Marke (storno-core.ohneInterneStornoFelder, Rand
125
+ * ohneStornoMarke). Alles andere bleibt woertlich, auch `pruefangaben` im
126
+ * Beleg selbst (der Server reicht sie so durch). Wirft, wenn es kein
127
+ * Belegdokument ist.
128
+ */
129
+ function _storedReceiptInner(doc, functionName) {
130
+ if (!(0, exports.istObjekt)(doc) || typeof doc.receiptId !== 'string') {
131
+ throw new errors_js_1.KasseneckValidationError(functionName, 'Kein Belegdokument (receiptId fehlt)', 'response');
132
+ }
133
+ const { [STORNO_MARKE]: _s, ...beleg } = doc;
134
+ if ((0, exports.hat)(beleg, 'cancellationOf'))
135
+ beleg.cancellationOf = ohneMarke(beleg.cancellationOf);
136
+ if (Array.isArray(beleg.cancellations))
137
+ beleg.cancellations = beleg.cancellations.map(ohneMarke);
138
+ return beleg;
139
+ }
140
+ /**
141
+ * Registrierdaten der Huelle aus den beim Ausstellen festgehaltenen
142
+ * `pruefangaben` (Zwilling von `pruefangabenFuerBeleg`, erster Zweig): genau
143
+ * die zwei Felder, je ueber [alsIso].
144
+ */
145
+ function pruefangabenDerHuelle(p) {
146
+ return { karteRegistriertAm: alsIso(p.karteRegistriertAm), kasseRegistriertAm: alsIso(p.kasseRegistriertAm) };
147
+ }
148
+ /**
149
+ * Eine Beleg-Huelle der inneren Form (`receipt`, Betriebsfelder, `kopfId`,
150
+ * `pruefangaben`, `testKasse` ...) in die Drahtform von `getReceipt` unter
151
+ * `/api/v3` (Kanal `app`: Anbieterdaten bleiben).
152
+ */
153
+ function _receiptEnvelopeToWire(huelle) {
154
+ const schema = vokabular_js_1.SCHEMAS.getReceipt;
155
+ return werteNachAussen(schluesselNachAussen(huelle, schema.data), schema.werte);
156
+ }
157
+ /**
158
+ * Ein Belegdokument (`users/{uid}/cashregisters/{id}/receipts/{id}`) in der
159
+ * Form von `data.receipt` einer `/api/v3`-Antwort (Kanal `app`: Anbieterdaten
160
+ * bleiben). Wirft, wenn es kein Belegdokument ist.
161
+ */
162
+ function _storedReceiptToWire(doc, functionName = 'fromStoredReceipt') {
163
+ return _receiptEnvelopeToWire({ receipt: _storedReceiptInner(doc, functionName) }).receipt;
164
+ }
165
+ // ---- Artikel ------------------------------------------------------------------
166
+ /**
167
+ * Zwilling von `kachelAttribute` (article-groups-core): sichtbar, wenn nicht
168
+ * ausdruecklich aus; Reihenfolge ganzzahlig ab 0, sonst 0.
169
+ */
170
+ function kachelAttribute(e) {
171
+ const k = (0, exports.istObjekt)(e) ? e : {};
172
+ return {
173
+ sichtbar: typeof k.sichtbar === 'boolean' ? k.sichtbar : true,
174
+ sort: Number.isInteger(k.sort) && k.sort >= 0 ? k.sort : 0,
175
+ };
176
+ }
177
+ /**
178
+ * Nur bekannte Felder hinaus (Zwilling von `nurBekannte`): ein Feld, das
179
+ * kein Schreibweg kennt, und ein Katalogwert, den der Katalog nicht kennt,
180
+ * fallen weg; `undefined` ebenso.
181
+ */
182
+ function nurBekannte(obj, erlaubt, werte = {}) {
183
+ const raus = {};
184
+ for (const [k, w] of Object.entries(obj)) {
185
+ if (w === undefined || !erlaubt.has(k))
186
+ continue;
187
+ if ((0, exports.hat)(werte, k) && w !== null && !werte[k].has(w))
188
+ continue;
189
+ raus[k] = w;
190
+ }
191
+ return raus;
192
+ }
193
+ /**
194
+ * Ein Artikeldokument (`users/{uid}/articles/{id}`) in der Form eines
195
+ * Eintrags von `listMyArticles` unter `/api/v3`. Vor dem Rand ergaenzt der
196
+ * Handler `groupId`/`revenueGroupId` (fehlt -> `null`) und die Kachel
197
+ * (article-endpoints.js listMyArticles); das steht nicht im Vertrag.
198
+ */
199
+ function _storedArticleToWire(id, doc, functionName = 'fromStoredArticle') {
200
+ if (typeof id !== 'string' || id === '' || !(0, exports.istObjekt)(doc)) {
201
+ throw new errors_js_1.KasseneckValidationError(functionName, 'Kein Artikeldokument (id oder Daten fehlen)', 'response');
202
+ }
203
+ const a = doc;
204
+ const handler = {
205
+ id, ...a, groupId: a.groupId || null, revenueGroupId: a.revenueGroupId || null, kasse: kachelAttribute(a.kasse),
206
+ create_time: undefined, update_time: undefined,
207
+ };
208
+ const schema = vokabular_js_1.SCHEMAS.listMyArticles;
209
+ const huelle = werteNachAussen(schluesselNachAussen({ articles: [handler] }, schema.data), schema.werte);
210
+ const artikel = huelle.articles[0];
211
+ const katalog = (pfad) => aeussereWerte(schema.werte[pfad].$catalog);
212
+ const raus = nurBekannte(artikel, new Set(vokabular_js_1.ARTIKEL_FELDER), {
213
+ quantityRule: katalog('articles[].quantityRule'), e1aGroup: katalog('articles[].e1aGroup'),
214
+ });
215
+ if ((0, exports.istObjekt)(raus.tile)) {
216
+ const kachel = regel(regel(schema.data.articles).unter.tile).unter;
217
+ raus.tile = nurBekannte(raus.tile, new Set(Object.keys(kachel)));
218
+ }
219
+ return raus;
220
+ }