@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
@@ -1,7 +1,7 @@
1
1
  import { KasseneckValidationError } from '../client/errors.js';
2
2
  import { createTransport } from '../client/transport.js';
3
3
  import { fromReceiptCompanyPayload } from '../models/receipt-company.js';
4
- import { KASSE_BETRIEB_STANDARD, KASSE_GERAET_STANDARD, mergeKasseSettings, } from '../kasse/settings.js';
4
+ import { posSettingsFromWire } from '../pos/client.js';
5
5
  /**
6
6
  * Die drei Aufrufe, die **ohne jede Identitaet** laufen: Kopplung eines
7
7
  * Geraets, Benutzerliste dieses Geraets, PIN-Anmeldung. Sie sind der Weg, auf
@@ -40,7 +40,7 @@ import { KASSE_BETRIEB_STANDARD, KASSE_GERAET_STANDARD, mergeKasseSettings, } fr
40
40
  const ohneAnmeldung = () => ({ headers: {}, params: {} });
41
41
  /**
42
42
  * Alle Rechte-Schluessel, die dieses Paket kennt — die Zwillinge pruefen
43
- * dagegen, und ueber `fixtures/oberflaeche.json` steht die Liste im Vertrag.
43
+ * dagegen, und ueber `fixtures/surface.json` steht die Liste im Vertrag.
44
44
  *
45
45
  * `satisfies` schliesst die eine Richtung: ein Name, den [RegisterUserPerms]
46
46
  * nicht fuehrt (Tippfehler, umbenanntes Recht), kommt hier nicht durch.
@@ -83,8 +83,9 @@ export async function pairRegisterDevice(options) {
83
83
  deviceSecret: pflichtfeld('pairRegisterDevice', daten, 'deviceSecret'),
84
84
  ownerUid: pflichtfeld('pairRegisterDevice', daten, 'ownerUid'),
85
85
  cashregisterId: pflichtfeld('pairRegisterDevice', daten, 'cashregisterId'),
86
- companyName: text(daten?.['betrieb']),
87
- cashregisterLabel: text(daten?.['kasse']),
86
+ companyName: text(daten?.['companyName']),
87
+ cashregisterLabel: text(daten?.['cashregisterLabel']),
88
+ testEnvironment: daten?.['testEnvironment'] === true,
88
89
  };
89
90
  }
90
91
  /**
@@ -139,10 +140,10 @@ export async function listRegisterSessionsForDevice(options) {
139
140
  // nichts tun kann, ist schlimmer als keine.
140
141
  id: pflichtfeld(name, roh, 'id'),
141
142
  deviceId: typeof roh['deviceId'] === 'string' && roh['deviceId'] ? roh['deviceId'] : null,
142
- deviceLabel: text(roh['deviceLabel']) || 'Kasse',
143
+ deviceLabel: text(roh['deviceLabel']) || null,
143
144
  startedAt: typeof roh['startedAt'] === 'number' ? roh['startedAt'] : null,
144
145
  expiresAt: typeof roh['expiresAt'] === 'number' ? roh['expiresAt'] : null,
145
- selbst: roh['selbst'] === true,
146
+ own: roh['own'] === true,
146
147
  // Nur uebernehmen, wenn wirklich einer kam: ein leerer String stuende
147
148
  // in der Oberflaeche als namenlose Zeile, statt die Spalte wegzulassen.
148
149
  ...(typeof roh['userName'] === 'string' && roh['userName'] ? { userName: roh['userName'] } : {}),
@@ -170,49 +171,48 @@ export async function listRegisterUsersForDevice(options) {
170
171
  id: pflichtfeld(name, roh, 'id'),
171
172
  name: text(roh['name']),
172
173
  kind: typeof roh['kind'] === 'string' && roh['kind'] ? roh['kind'] : 'person',
173
- altbestand: roh['altbestand'] === true,
174
+ pinPolicyOutdated: roh['pinPolicyOutdated'] === true,
174
175
  };
175
176
  });
176
- const settingsRoh = (daten?.settings ?? {});
177
- const settings = {
178
- betrieb: mergeKasseSettings(KASSE_BETRIEB_STANDARD, (settingsRoh.betrieb ?? null)),
179
- geraet: mergeKasseSettings(KASSE_GERAET_STANDARD, (settingsRoh.geraet ?? null)),
180
- };
181
- const bd = daten?.betriebsdaten;
182
- const betriebsdaten = bd && typeof bd === 'object' ? fromReceiptCompanyPayload(bd) : null;
177
+ const settingsRoh = daten?.settings;
178
+ const settings = posSettingsFromWire(settingsRoh !== null && typeof settingsRoh === 'object' ? settingsRoh : null);
179
+ const kopf = daten?.receiptHeader;
180
+ const receiptHeader = kopf && typeof kopf === 'object' ? fromReceiptCompanyPayload(kopf) : null;
183
181
  return {
184
182
  users,
185
183
  policy: regel(daten?.policy),
186
- loginMode: daten?.loginMode === 'pin' ? 'pin' : 'auswahl',
184
+ // Nur `pin` heisst nur-PIN; alles andere (auch ein kuenftiger Wert) zeigt
185
+ // die Auswahl: die Namen stehen dann in `users`, und das Backend weist
186
+ // eine Anmeldung ohne Auswahl ohnehin mit `login_mode_select_user` ab.
187
+ loginMode: daten?.loginMode === 'pin' ? 'pin' : 'select_user',
187
188
  settings,
188
- betriebsdaten,
189
- standortsperre: daten?.standortsperre === true,
190
- // 0.6.27 ergaenzte nur den TYP — hier fiel das Feld beim Zusammenbau
191
- // stumm weg, und die Kasse sah nie eine Sperre. Fehlt es (aelteres
192
- // Backend), bleibt es undefined: dann gilt bereit.
193
- kasse: kasseBereit(daten?.kasse),
189
+ receiptHeader,
190
+ locationLock: daten?.locationLock === true,
191
+ // Fehlt das Feld, bleibt es undefined: dann gilt bereit.
192
+ ...(kasseBereit(daten?.cashregister) ? { cashregister: kasseBereit(daten?.cashregister) } : {}),
193
+ testEnvironment: daten?.testEnvironment === true,
194
194
  };
195
195
  }
196
196
  function kasseBereit(wert) {
197
197
  if (typeof wert !== 'object' || wert === null || Array.isArray(wert))
198
198
  return undefined;
199
199
  const roh = wert;
200
- if (typeof roh['bereit'] !== 'boolean')
200
+ if (typeof roh['ready'] !== 'boolean')
201
201
  return undefined;
202
- return { bereit: roh['bereit'], grund: typeof roh['grund'] === 'string' ? roh['grund'] : null };
202
+ return { ready: roh['ready'], reason: typeof roh['reason'] === 'string' ? roh['reason'] : null };
203
203
  }
204
204
  /** Die Regel aus der Antwort — oder `null`, wenn keine brauchbare kommt. */
205
205
  function regel(wert) {
206
206
  if (typeof wert !== 'object' || wert === null || Array.isArray(wert))
207
207
  return null;
208
208
  const roh = wert;
209
- const stellen = roh['stellen'];
210
- const zeichen = roh['zeichen'];
211
- if (typeof stellen !== 'number' || !Number.isInteger(stellen) || stellen < 1)
209
+ const length = roh['length'];
210
+ const charset = roh['charset'];
211
+ if (typeof length !== 'number' || !Number.isInteger(length) || length < 1)
212
212
  return null;
213
- if (typeof zeichen !== 'string' || zeichen === '')
213
+ if (typeof charset !== 'string' || charset === '')
214
214
  return null;
215
- return { stellen, zeichen: zeichen };
215
+ return { length, charset: charset };
216
216
  }
217
217
  /**
218
218
  * Kassen-Benutzer per PIN anmelden. **Ohne Anmeldung** — dieser Aufruf
@@ -300,7 +300,11 @@ function sitzungAusAntwort(name, daten) {
300
300
  },
301
301
  };
302
302
  }
303
- /** Transport ohne Anmeldung; `auth` steht zuletzt und ist damit nicht zu ueberschreiben. */
303
+ /**
304
+ * Transport ohne Anmeldung; `auth` steht zuletzt und ist damit nicht zu
305
+ * ueberschreiben. Ohne eigene Basis gehen diese Aufrufe an den Kassenweg: sie
306
+ * sind reine Kassenaufrufe, der Transport leitet sie dorthin.
307
+ */
304
308
  function transportFuer(verbindung) {
305
309
  return createTransport({ ...verbindung, auth: ohneAnmeldung });
306
310
  }
@@ -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>;
@@ -19,12 +19,12 @@ import { KasseneckValidationError } from '../client/errors.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 async function renewRegisterSession(rufen) {
27
- const daten = await rufen('renewRegisterSession');
26
+ export async function renewRegisterSession(transport) {
27
+ const daten = await transport('renewRegisterSession');
28
28
  const expiresAt = daten?.expiresAt;
29
29
  if (typeof expiresAt !== 'number' || !Number.isFinite(expiresAt)) {
30
30
  // Ohne brauchbaren Ablaufzeitpunkt weiss die Kasse nicht, wann sie das
@@ -43,6 +43,6 @@ export async function renewRegisterSession(rufen) {
43
43
  * einer harmlosen Vertragsaenderung — ausgerechnet beim Abmelden, dem Aufruf,
44
44
  * der auch dann durchgehen soll, wenn sonst nichts mehr geht.
45
45
  */
46
- export async function endRegisterSession(rufen) {
47
- await rufen('endRegisterSession');
46
+ export async function endRegisterSession(transport) {
47
+ await transport('endRegisterSession');
48
48
  }
@@ -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,208 @@
1
+ import { KasseneckValidationError } from '../client/errors.js';
2
+ import { ARTIKEL_FELDER, KATALOGE, SCHEMAS } from './vokabular.js';
3
+ export const hat = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
4
+ export const istObjekt = (w) => w !== null && typeof w === 'object' && !Array.isArray(w);
5
+ /** Schema-Eintrag zerlegt: innerer Name, Unterschema (ohne `__`) und ob es eine Liste ist. */
6
+ export function regel(eintrag) {
7
+ const liste = Array.isArray(eintrag);
8
+ const kern = (liste ? eintrag[0] : eintrag);
9
+ if (typeof kern === 'string')
10
+ return { innen: kern, unter: null, liste };
11
+ const { __: innen, ...unter } = kern;
12
+ return { innen: innen, unter: unter, liste };
13
+ }
14
+ /**
15
+ * Schluessel innen -> aussen (Zwilling von `schluessel(obj, schema, 'aus')`).
16
+ * Kopiert, veraendert die Eingabe nie; ein Treffer wandert wie am Server ans
17
+ * Ende des Objekts.
18
+ */
19
+ function schluesselNachAussen(obj, schema) {
20
+ if (!istObjekt(obj))
21
+ return obj;
22
+ const raus = { ...obj };
23
+ for (const [aussen, eintrag] of Object.entries(schema)) {
24
+ if (aussen === '__')
25
+ continue;
26
+ const { innen, unter, liste } = regel(eintrag);
27
+ if (!hat(raus, innen))
28
+ continue;
29
+ let wert = raus[innen];
30
+ if (unter) {
31
+ wert = liste ? (Array.isArray(wert) ? wert.map((e) => schluesselNachAussen(e, unter)) : wert) : schluesselNachAussen(wert, unter);
32
+ }
33
+ delete raus[innen];
34
+ raus[aussen] = wert;
35
+ }
36
+ return raus;
37
+ }
38
+ /** Innere Namen einer Schema-Ebene (was der Server innen an dieser Stelle kennt). */
39
+ export function innereNamen(schema) {
40
+ const raus = new Map();
41
+ for (const [aussen, eintrag] of Object.entries(schema))
42
+ if (aussen !== '__')
43
+ raus.set(regel(eintrag).innen, aussen);
44
+ return raus;
45
+ }
46
+ /** Wert an einem aeusseren Pfad (`a.b`, `a[].b`) abbilden (Zwilling von `anPfad`). */
47
+ function anPfad(obj, teile, fn) {
48
+ if (obj == null || teile.length === 0 || typeof obj !== 'object')
49
+ return obj;
50
+ const [kopf, ...rest] = teile;
51
+ const liste = kopf.endsWith('[]');
52
+ const name = liste ? kopf.slice(0, -2) : kopf;
53
+ if (!hat(obj, name))
54
+ return obj;
55
+ const wert = obj[name];
56
+ let neu;
57
+ if (liste)
58
+ neu = Array.isArray(wert) ? wert.map((e) => (rest.length ? anPfad(e, rest, fn) : fn(e))) : wert;
59
+ else
60
+ neu = rest.length ? anPfad(wert, rest, fn) : fn(wert);
61
+ return { ...obj, [name]: neu };
62
+ }
63
+ /**
64
+ * Werte ueber die Kataloge des Vertrags abbilden (Zwilling von
65
+ * `werteAbbilden`). Ein Wert, den der Katalog nicht kennt, bleibt woertlich
66
+ * stehen, wie am Server.
67
+ */
68
+ function werteNachAussen(obj, werte) {
69
+ let raus = obj;
70
+ for (const [pfad, { $catalog }] of Object.entries(werte)) {
71
+ const katalog = KATALOGE[$catalog];
72
+ if (!katalog)
73
+ throw new Error(`stored: Katalog ${$catalog} fehlt im Vokabular`);
74
+ raus = anPfad(raus, pfad.split('.'), (v) => (typeof v === 'string' && hat(katalog, v) ? katalog[v] : v));
75
+ }
76
+ return raus;
77
+ }
78
+ /** Englische Werte eines Katalogs (was an dieser Stelle hinaus darf). */
79
+ const aeussereWerte = (name) => new Set(Object.values(KATALOGE[name] ?? {}));
80
+ // ---- Belege -----------------------------------------------------------------
81
+ /**
82
+ * Interne Marke der Storno-Reservierung: `stornoMarke` am Storno-Beleg,
83
+ * `marke` im Bezug und in `cancellations[]`. Handler
84
+ * (storno-core.ohneInterneStornoFelder) und Rand (ohneStornoMarke) nehmen sie
85
+ * heraus; der Vertrag nennt die Namen nicht (nur `$function: belegJeKanal`).
86
+ */
87
+ const STORNO_MARKE = 'stornoMarke';
88
+ const MARKE = 'marke';
89
+ const ohneMarke = (o) => {
90
+ if (!istObjekt(o) || !hat(o, MARKE))
91
+ return o;
92
+ const { [MARKE]: _m, ...rest } = o;
93
+ return rest;
94
+ };
95
+ /**
96
+ * Zwilling von `beleg-pruefangaben.alsIso`: leer (auch 0, '') -> null;
97
+ * Firestore-Zeitstempel, Zahl oder Zeichenkette -> ISO-Zeitpunkt in UTC;
98
+ * nicht lesbar -> null.
99
+ */
100
+ function alsIso(ts) {
101
+ if (!ts)
102
+ return null;
103
+ let d = ts;
104
+ if (typeof d.toDate === 'function')
105
+ d = d.toDate();
106
+ if (typeof d === 'number' || typeof d === 'string')
107
+ d = new Date(d);
108
+ return d instanceof Date && !Number.isNaN(d.getTime()) ? d.toISOString() : null;
109
+ }
110
+ /**
111
+ * Ein Belegdokument, wie Handler und Rand es vor der Uebersetzung sehen:
112
+ * ohne Storno-Marke (storno-core.ohneInterneStornoFelder, Rand
113
+ * ohneStornoMarke). Alles andere bleibt woertlich, auch `pruefangaben` im
114
+ * Beleg selbst (der Server reicht sie so durch). Wirft, wenn es kein
115
+ * Belegdokument ist.
116
+ */
117
+ export function _storedReceiptInner(doc, functionName) {
118
+ if (!istObjekt(doc) || typeof doc.receiptId !== 'string') {
119
+ throw new KasseneckValidationError(functionName, 'Kein Belegdokument (receiptId fehlt)', 'response');
120
+ }
121
+ const { [STORNO_MARKE]: _s, ...beleg } = doc;
122
+ if (hat(beleg, 'cancellationOf'))
123
+ beleg.cancellationOf = ohneMarke(beleg.cancellationOf);
124
+ if (Array.isArray(beleg.cancellations))
125
+ beleg.cancellations = beleg.cancellations.map(ohneMarke);
126
+ return beleg;
127
+ }
128
+ /**
129
+ * Registrierdaten der Huelle aus den beim Ausstellen festgehaltenen
130
+ * `pruefangaben` (Zwilling von `pruefangabenFuerBeleg`, erster Zweig): genau
131
+ * die zwei Felder, je ueber [alsIso].
132
+ */
133
+ export function pruefangabenDerHuelle(p) {
134
+ return { karteRegistriertAm: alsIso(p.karteRegistriertAm), kasseRegistriertAm: alsIso(p.kasseRegistriertAm) };
135
+ }
136
+ /**
137
+ * Eine Beleg-Huelle der inneren Form (`receipt`, Betriebsfelder, `kopfId`,
138
+ * `pruefangaben`, `testKasse` ...) in die Drahtform von `getReceipt` unter
139
+ * `/api/v3` (Kanal `app`: Anbieterdaten bleiben).
140
+ */
141
+ export function _receiptEnvelopeToWire(huelle) {
142
+ const schema = SCHEMAS.getReceipt;
143
+ return werteNachAussen(schluesselNachAussen(huelle, schema.data), schema.werte);
144
+ }
145
+ /**
146
+ * Ein Belegdokument (`users/{uid}/cashregisters/{id}/receipts/{id}`) in der
147
+ * Form von `data.receipt` einer `/api/v3`-Antwort (Kanal `app`: Anbieterdaten
148
+ * bleiben). Wirft, wenn es kein Belegdokument ist.
149
+ */
150
+ export function _storedReceiptToWire(doc, functionName = 'fromStoredReceipt') {
151
+ return _receiptEnvelopeToWire({ receipt: _storedReceiptInner(doc, functionName) }).receipt;
152
+ }
153
+ // ---- Artikel ------------------------------------------------------------------
154
+ /**
155
+ * Zwilling von `kachelAttribute` (article-groups-core): sichtbar, wenn nicht
156
+ * ausdruecklich aus; Reihenfolge ganzzahlig ab 0, sonst 0.
157
+ */
158
+ function kachelAttribute(e) {
159
+ const k = istObjekt(e) ? e : {};
160
+ return {
161
+ sichtbar: typeof k.sichtbar === 'boolean' ? k.sichtbar : true,
162
+ sort: Number.isInteger(k.sort) && k.sort >= 0 ? k.sort : 0,
163
+ };
164
+ }
165
+ /**
166
+ * Nur bekannte Felder hinaus (Zwilling von `nurBekannte`): ein Feld, das
167
+ * kein Schreibweg kennt, und ein Katalogwert, den der Katalog nicht kennt,
168
+ * fallen weg; `undefined` ebenso.
169
+ */
170
+ function nurBekannte(obj, erlaubt, werte = {}) {
171
+ const raus = {};
172
+ for (const [k, w] of Object.entries(obj)) {
173
+ if (w === undefined || !erlaubt.has(k))
174
+ continue;
175
+ if (hat(werte, k) && w !== null && !werte[k].has(w))
176
+ continue;
177
+ raus[k] = w;
178
+ }
179
+ return raus;
180
+ }
181
+ /**
182
+ * Ein Artikeldokument (`users/{uid}/articles/{id}`) in der Form eines
183
+ * Eintrags von `listMyArticles` unter `/api/v3`. Vor dem Rand ergaenzt der
184
+ * Handler `groupId`/`revenueGroupId` (fehlt -> `null`) und die Kachel
185
+ * (article-endpoints.js listMyArticles); das steht nicht im Vertrag.
186
+ */
187
+ export function _storedArticleToWire(id, doc, functionName = 'fromStoredArticle') {
188
+ if (typeof id !== 'string' || id === '' || !istObjekt(doc)) {
189
+ throw new KasseneckValidationError(functionName, 'Kein Artikeldokument (id oder Daten fehlen)', 'response');
190
+ }
191
+ const a = doc;
192
+ const handler = {
193
+ id, ...a, groupId: a.groupId || null, revenueGroupId: a.revenueGroupId || null, kasse: kachelAttribute(a.kasse),
194
+ create_time: undefined, update_time: undefined,
195
+ };
196
+ const schema = SCHEMAS.listMyArticles;
197
+ const huelle = werteNachAussen(schluesselNachAussen({ articles: [handler] }, schema.data), schema.werte);
198
+ const artikel = huelle.articles[0];
199
+ const katalog = (pfad) => aeussereWerte(schema.werte[pfad].$catalog);
200
+ const raus = nurBekannte(artikel, new Set(ARTIKEL_FELDER), {
201
+ quantityRule: katalog('articles[].quantityRule'), e1aGroup: katalog('articles[].e1aGroup'),
202
+ });
203
+ if (istObjekt(raus.tile)) {
204
+ const kachel = regel(regel(schema.data.articles).unter.tile).unter;
205
+ raus.tile = nurBekannte(raus.tile, new Set(Object.keys(kachel)));
206
+ }
207
+ return raus;
208
+ }
@@ -0,0 +1,23 @@
1
+ import { type Objekt } from './draht.js';
2
+ /**
3
+ * Gespeicherte Einstellungen `{ betrieb, geraet }` in der Drahtform, nur die
4
+ * gespeicherten und gueltigen Felder (die Vorgaben mischt der Leser dazu),
5
+ * und die weggelassenen aeusseren Pfade.
6
+ */
7
+ export declare function _storedPosSettingsToWire(stored: {
8
+ betrieb?: unknown;
9
+ geraet?: unknown;
10
+ } | null | undefined): {
11
+ business: Objekt;
12
+ device: Objekt;
13
+ weggelassen: string[];
14
+ };
15
+ /** Nur fuer den Test: die Feldliste der Pruefer (muss mit der Vorgabe deckungsgleich sein). */
16
+ export declare const _PRUEFER_FELDER: Readonly<{
17
+ business: string[];
18
+ device: string[];
19
+ standard: {
20
+ business: string[];
21
+ device: string[];
22
+ };
23
+ }>;