@kreiseck/kasseneck-api 0.6.7

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 (294) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +2 -0
  3. package/README.md +206 -0
  4. package/dist/cjs/client/api.d.ts +75 -0
  5. package/dist/cjs/client/api.js +40 -0
  6. package/dist/cjs/client/auth.d.ts +52 -0
  7. package/dist/cjs/client/auth.js +72 -0
  8. package/dist/cjs/client/cashregisters.d.ts +21 -0
  9. package/dist/cjs/client/cashregisters.js +36 -0
  10. package/dist/cjs/client/errors.d.ts +159 -0
  11. package/dist/cjs/client/errors.js +226 -0
  12. package/dist/cjs/client/index.d.ts +8 -0
  13. package/dist/cjs/client/index.js +44 -0
  14. package/dist/cjs/client/receipts.d.ts +245 -0
  15. package/dist/cjs/client/receipts.js +452 -0
  16. package/dist/cjs/client/reports.d.ts +43 -0
  17. package/dist/cjs/client/reports.js +73 -0
  18. package/dist/cjs/client/status.d.ts +43 -0
  19. package/dist/cjs/client/status.js +47 -0
  20. package/dist/cjs/client/transport.d.ts +117 -0
  21. package/dist/cjs/client/transport.js +312 -0
  22. package/dist/cjs/enums/credit-card-provider.d.ts +22 -0
  23. package/dist/cjs/enums/credit-card-provider.js +23 -0
  24. package/dist/cjs/enums/define-enum.d.ts +15 -0
  25. package/dist/cjs/enums/define-enum.js +16 -0
  26. package/dist/cjs/enums/index.d.ts +7 -0
  27. package/dist/cjs/enums/index.js +17 -0
  28. package/dist/cjs/enums/keck-payment-method.d.ts +57 -0
  29. package/dist/cjs/enums/keck-payment-method.js +23 -0
  30. package/dist/cjs/enums/receipt-type.d.ts +41 -0
  31. package/dist/cjs/enums/receipt-type.js +18 -0
  32. package/dist/cjs/enums/stripe-link-mode.d.ts +17 -0
  33. package/dist/cjs/enums/stripe-link-mode.js +18 -0
  34. package/dist/cjs/enums/vat-rate.d.ts +40 -0
  35. package/dist/cjs/enums/vat-rate.js +19 -0
  36. package/dist/cjs/enums/voucher-action.d.ts +10 -0
  37. package/dist/cjs/enums/voucher-action.js +11 -0
  38. package/dist/cjs/enums/voucher-type.d.ts +9 -0
  39. package/dist/cjs/enums/voucher-type.js +10 -0
  40. package/dist/cjs/index.d.ts +5 -0
  41. package/dist/cjs/index.js +97 -0
  42. package/dist/cjs/kasse/artikel.d.ts +83 -0
  43. package/dist/cjs/kasse/artikel.js +79 -0
  44. package/dist/cjs/kasse/client.d.ts +10 -0
  45. package/dist/cjs/kasse/client.js +38 -0
  46. package/dist/cjs/kasse/drucker.d.ts +54 -0
  47. package/dist/cjs/kasse/drucker.js +41 -0
  48. package/dist/cjs/kasse/index.d.ts +11 -0
  49. package/dist/cjs/kasse/index.js +38 -0
  50. package/dist/cjs/kasse/settings.d.ts +115 -0
  51. package/dist/cjs/kasse/settings.js +62 -0
  52. package/dist/cjs/models/cancellation.d.ts +51 -0
  53. package/dist/cjs/models/cancellation.js +45 -0
  54. package/dist/cjs/models/cashregister.d.ts +77 -0
  55. package/dist/cjs/models/cashregister.js +53 -0
  56. package/dist/cjs/models/enum-payload.d.ts +26 -0
  57. package/dist/cjs/models/enum-payload.js +50 -0
  58. package/dist/cjs/models/hobex-receipt.d.ts +63 -0
  59. package/dist/cjs/models/hobex-receipt.js +86 -0
  60. package/dist/cjs/models/index.d.ts +10 -0
  61. package/dist/cjs/models/index.js +46 -0
  62. package/dist/cjs/models/receipt-company.d.ts +71 -0
  63. package/dist/cjs/models/receipt-company.js +52 -0
  64. package/dist/cjs/models/receipt-item.d.ts +100 -0
  65. package/dist/cjs/models/receipt-item.js +108 -0
  66. package/dist/cjs/models/receipt-summary.d.ts +92 -0
  67. package/dist/cjs/models/receipt-summary.js +54 -0
  68. package/dist/cjs/models/receipt.d.ts +108 -0
  69. package/dist/cjs/models/receipt.js +119 -0
  70. package/dist/cjs/models/report-month.d.ts +32 -0
  71. package/dist/cjs/models/report-month.js +65 -0
  72. package/dist/cjs/models/stripe-url-session.d.ts +18 -0
  73. package/dist/cjs/models/stripe-url-session.js +20 -0
  74. package/dist/cjs/models/voucher.d.ts +41 -0
  75. package/dist/cjs/models/voucher.js +56 -0
  76. package/dist/cjs/money.d.ts +23 -0
  77. package/dist/cjs/money.js +35 -0
  78. package/dist/cjs/package.json +1 -0
  79. package/dist/cjs/payments/hobex.d.ts +87 -0
  80. package/dist/cjs/payments/hobex.js +167 -0
  81. package/dist/cjs/payments/index.d.ts +33 -0
  82. package/dist/cjs/payments/index.js +42 -0
  83. package/dist/cjs/payments/stripe.d.ts +61 -0
  84. package/dist/cjs/payments/stripe.js +157 -0
  85. package/dist/cjs/printing/escpos.d.ts +219 -0
  86. package/dist/cjs/printing/escpos.js +636 -0
  87. package/dist/cjs/printing/index.d.ts +3 -0
  88. package/dist/cjs/printing/index.js +33 -0
  89. package/dist/cjs/printing/printable.d.ts +27 -0
  90. package/dist/cjs/printing/printable.js +90 -0
  91. package/dist/cjs/printing/webusb.d.ts +89 -0
  92. package/dist/cjs/printing/webusb.js +110 -0
  93. package/dist/cjs/react/index.d.ts +46 -0
  94. package/dist/cjs/react/index.js +51 -0
  95. package/dist/cjs/receipt/discount.d.ts +12 -0
  96. package/dist/cjs/receipt/discount.js +54 -0
  97. package/dist/cjs/receipt/epos.d.ts +53 -0
  98. package/dist/cjs/receipt/epos.js +95 -0
  99. package/dist/cjs/receipt/grid.d.ts +47 -0
  100. package/dist/cjs/receipt/grid.js +122 -0
  101. package/dist/cjs/receipt/index.d.ts +4 -0
  102. package/dist/cjs/receipt/index.js +29 -0
  103. package/dist/cjs/receipt/layout-escpos.d.ts +35 -0
  104. package/dist/cjs/receipt/layout-escpos.js +67 -0
  105. package/dist/cjs/receipt/layout.d.ts +180 -0
  106. package/dist/cjs/receipt/layout.js +594 -0
  107. package/dist/cjs/register/index.d.ts +51 -0
  108. package/dist/cjs/register/index.js +61 -0
  109. package/dist/cjs/register/pairing.d.ts +248 -0
  110. package/dist/cjs/register/pairing.js +279 -0
  111. package/dist/cjs/register/session.d.ts +37 -0
  112. package/dist/cjs/register/session.js +52 -0
  113. package/dist/cjs/vienna-time.d.ts +23 -0
  114. package/dist/cjs/vienna-time.js +114 -0
  115. package/dist/esm/client/api.d.ts +75 -0
  116. package/dist/esm/client/api.js +37 -0
  117. package/dist/esm/client/auth.d.ts +52 -0
  118. package/dist/esm/client/auth.js +68 -0
  119. package/dist/esm/client/cashregisters.d.ts +21 -0
  120. package/dist/esm/client/cashregisters.js +33 -0
  121. package/dist/esm/client/errors.d.ts +159 -0
  122. package/dist/esm/client/errors.js +212 -0
  123. package/dist/esm/client/index.d.ts +8 -0
  124. package/dist/esm/client/index.js +8 -0
  125. package/dist/esm/client/receipts.d.ts +245 -0
  126. package/dist/esm/client/receipts.js +438 -0
  127. package/dist/esm/client/reports.d.ts +43 -0
  128. package/dist/esm/client/reports.js +69 -0
  129. package/dist/esm/client/status.d.ts +43 -0
  130. package/dist/esm/client/status.js +43 -0
  131. package/dist/esm/client/transport.d.ts +117 -0
  132. package/dist/esm/client/transport.js +307 -0
  133. package/dist/esm/enums/credit-card-provider.d.ts +22 -0
  134. package/dist/esm/enums/credit-card-provider.js +20 -0
  135. package/dist/esm/enums/define-enum.d.ts +15 -0
  136. package/dist/esm/enums/define-enum.js +13 -0
  137. package/dist/esm/enums/index.d.ts +7 -0
  138. package/dist/esm/enums/index.js +7 -0
  139. package/dist/esm/enums/keck-payment-method.d.ts +57 -0
  140. package/dist/esm/enums/keck-payment-method.js +20 -0
  141. package/dist/esm/enums/receipt-type.d.ts +41 -0
  142. package/dist/esm/enums/receipt-type.js +15 -0
  143. package/dist/esm/enums/stripe-link-mode.d.ts +17 -0
  144. package/dist/esm/enums/stripe-link-mode.js +15 -0
  145. package/dist/esm/enums/vat-rate.d.ts +40 -0
  146. package/dist/esm/enums/vat-rate.js +16 -0
  147. package/dist/esm/enums/voucher-action.d.ts +10 -0
  148. package/dist/esm/enums/voucher-action.js +8 -0
  149. package/dist/esm/enums/voucher-type.d.ts +9 -0
  150. package/dist/esm/enums/voucher-type.js +7 -0
  151. package/dist/esm/index.d.ts +5 -0
  152. package/dist/esm/index.js +5 -0
  153. package/dist/esm/kasse/artikel.d.ts +83 -0
  154. package/dist/esm/kasse/artikel.js +70 -0
  155. package/dist/esm/kasse/client.d.ts +10 -0
  156. package/dist/esm/kasse/client.js +33 -0
  157. package/dist/esm/kasse/drucker.d.ts +54 -0
  158. package/dist/esm/kasse/drucker.js +36 -0
  159. package/dist/esm/kasse/index.d.ts +11 -0
  160. package/dist/esm/kasse/index.js +13 -0
  161. package/dist/esm/kasse/settings.d.ts +115 -0
  162. package/dist/esm/kasse/settings.js +58 -0
  163. package/dist/esm/models/cancellation.d.ts +51 -0
  164. package/dist/esm/models/cancellation.js +40 -0
  165. package/dist/esm/models/cashregister.d.ts +77 -0
  166. package/dist/esm/models/cashregister.js +50 -0
  167. package/dist/esm/models/enum-payload.d.ts +26 -0
  168. package/dist/esm/models/enum-payload.js +44 -0
  169. package/dist/esm/models/hobex-receipt.d.ts +63 -0
  170. package/dist/esm/models/hobex-receipt.js +80 -0
  171. package/dist/esm/models/index.d.ts +10 -0
  172. package/dist/esm/models/index.js +10 -0
  173. package/dist/esm/models/receipt-company.d.ts +71 -0
  174. package/dist/esm/models/receipt-company.js +48 -0
  175. package/dist/esm/models/receipt-item.d.ts +100 -0
  176. package/dist/esm/models/receipt-item.js +101 -0
  177. package/dist/esm/models/receipt-summary.d.ts +92 -0
  178. package/dist/esm/models/receipt-summary.js +49 -0
  179. package/dist/esm/models/receipt.d.ts +108 -0
  180. package/dist/esm/models/receipt.js +113 -0
  181. package/dist/esm/models/report-month.d.ts +32 -0
  182. package/dist/esm/models/report-month.js +58 -0
  183. package/dist/esm/models/stripe-url-session.d.ts +18 -0
  184. package/dist/esm/models/stripe-url-session.js +16 -0
  185. package/dist/esm/models/voucher.d.ts +41 -0
  186. package/dist/esm/models/voucher.js +51 -0
  187. package/dist/esm/money.d.ts +23 -0
  188. package/dist/esm/money.js +31 -0
  189. package/dist/esm/payments/hobex.d.ts +87 -0
  190. package/dist/esm/payments/hobex.js +162 -0
  191. package/dist/esm/payments/index.d.ts +33 -0
  192. package/dist/esm/payments/index.js +33 -0
  193. package/dist/esm/payments/stripe.d.ts +61 -0
  194. package/dist/esm/payments/stripe.js +153 -0
  195. package/dist/esm/printing/escpos.d.ts +219 -0
  196. package/dist/esm/printing/escpos.js +616 -0
  197. package/dist/esm/printing/index.d.ts +3 -0
  198. package/dist/esm/printing/index.js +3 -0
  199. package/dist/esm/printing/printable.d.ts +27 -0
  200. package/dist/esm/printing/printable.js +87 -0
  201. package/dist/esm/printing/webusb.d.ts +89 -0
  202. package/dist/esm/printing/webusb.js +101 -0
  203. package/dist/esm/react/index.d.ts +46 -0
  204. package/dist/esm/react/index.js +47 -0
  205. package/dist/esm/receipt/discount.d.ts +12 -0
  206. package/dist/esm/receipt/discount.js +51 -0
  207. package/dist/esm/receipt/epos.d.ts +53 -0
  208. package/dist/esm/receipt/epos.js +86 -0
  209. package/dist/esm/receipt/grid.d.ts +47 -0
  210. package/dist/esm/receipt/grid.js +116 -0
  211. package/dist/esm/receipt/index.d.ts +4 -0
  212. package/dist/esm/receipt/index.js +4 -0
  213. package/dist/esm/receipt/layout-escpos.d.ts +35 -0
  214. package/dist/esm/receipt/layout-escpos.js +64 -0
  215. package/dist/esm/receipt/layout.d.ts +180 -0
  216. package/dist/esm/receipt/layout.js +583 -0
  217. package/dist/esm/register/index.d.ts +51 -0
  218. package/dist/esm/register/index.js +51 -0
  219. package/dist/esm/register/pairing.d.ts +248 -0
  220. package/dist/esm/register/pairing.js +270 -0
  221. package/dist/esm/register/session.d.ts +37 -0
  222. package/dist/esm/register/session.js +48 -0
  223. package/dist/esm/vienna-time.d.ts +23 -0
  224. package/dist/esm/vienna-time.js +110 -0
  225. package/fixtures/belege/langer-artikelname.json +43 -0
  226. package/fixtures/belege/null-ausfall.json +41 -0
  227. package/fixtures/belege/null-jahr.json +41 -0
  228. package/fixtures/belege/null-monat.json +41 -0
  229. package/fixtures/belege/null-pruef.json +41 -0
  230. package/fixtures/belege/null-schluss.json +41 -0
  231. package/fixtures/belege/null-start.json +40 -0
  232. package/fixtures/belege/rabattzeilen.json +61 -0
  233. package/fixtures/belege/signaturausfall-verkauf.json +49 -0
  234. package/fixtures/belege/storno-teil.json +48 -0
  235. package/fixtures/belege/storno-voll.json +54 -0
  236. package/fixtures/belege/testkasse-verkauf.json +50 -0
  237. package/fixtures/belege/testsignatur-verkauf.json +50 -0
  238. package/fixtures/belege/training.json +49 -0
  239. package/fixtures/belege/verkauf-bar.json +49 -0
  240. package/fixtures/belege/verkauf-karte.json +49 -0
  241. package/fixtures/belege/verkauf-kleinunternehmer.json +42 -0
  242. package/fixtures/erwartet/langer-artikelname.grid32.txt +25 -0
  243. package/fixtures/erwartet/langer-artikelname.grid48.txt +24 -0
  244. package/fixtures/erwartet/langer-artikelname.lines.json +216 -0
  245. package/fixtures/erwartet/null-ausfall.grid32.txt +28 -0
  246. package/fixtures/erwartet/null-ausfall.grid48.txt +25 -0
  247. package/fixtures/erwartet/null-ausfall.lines.json +220 -0
  248. package/fixtures/erwartet/null-jahr.grid32.txt +29 -0
  249. package/fixtures/erwartet/null-jahr.grid48.txt +25 -0
  250. package/fixtures/erwartet/null-jahr.lines.json +220 -0
  251. package/fixtures/erwartet/null-monat.grid32.txt +28 -0
  252. package/fixtures/erwartet/null-monat.grid48.txt +25 -0
  253. package/fixtures/erwartet/null-monat.lines.json +220 -0
  254. package/fixtures/erwartet/null-pruef.grid32.txt +28 -0
  255. package/fixtures/erwartet/null-pruef.grid48.txt +25 -0
  256. package/fixtures/erwartet/null-pruef.lines.json +220 -0
  257. package/fixtures/erwartet/null-schluss.grid32.txt +28 -0
  258. package/fixtures/erwartet/null-schluss.grid48.txt +25 -0
  259. package/fixtures/erwartet/null-schluss.lines.json +220 -0
  260. package/fixtures/erwartet/null-start.grid32.txt +28 -0
  261. package/fixtures/erwartet/null-start.grid48.txt +25 -0
  262. package/fixtures/erwartet/null-start.lines.json +220 -0
  263. package/fixtures/erwartet/rabattzeilen.grid32.txt +27 -0
  264. package/fixtures/erwartet/rabattzeilen.grid48.txt +26 -0
  265. package/fixtures/erwartet/rabattzeilen.lines.json +286 -0
  266. package/fixtures/erwartet/signaturausfall-verkauf.grid32.txt +28 -0
  267. package/fixtures/erwartet/signaturausfall-verkauf.grid48.txt +26 -0
  268. package/fixtures/erwartet/signaturausfall-verkauf.lines.json +266 -0
  269. package/fixtures/erwartet/storno-teil.grid32.txt +27 -0
  270. package/fixtures/erwartet/storno-teil.grid48.txt +26 -0
  271. package/fixtures/erwartet/storno-teil.lines.json +237 -0
  272. package/fixtures/erwartet/storno-voll.grid32.txt +29 -0
  273. package/fixtures/erwartet/storno-voll.grid48.txt +28 -0
  274. package/fixtures/erwartet/storno-voll.lines.json +277 -0
  275. package/fixtures/erwartet/testkasse-verkauf.grid32.txt +28 -0
  276. package/fixtures/erwartet/testkasse-verkauf.grid48.txt +27 -0
  277. package/fixtures/erwartet/testkasse-verkauf.lines.json +270 -0
  278. package/fixtures/erwartet/testsignatur-verkauf.grid32.txt +30 -0
  279. package/fixtures/erwartet/testsignatur-verkauf.grid48.txt +27 -0
  280. package/fixtures/erwartet/testsignatur-verkauf.lines.json +270 -0
  281. package/fixtures/erwartet/training.grid32.txt +33 -0
  282. package/fixtures/erwartet/training.grid48.txt +30 -0
  283. package/fixtures/erwartet/training.lines.json +277 -0
  284. package/fixtures/erwartet/verkauf-bar.grid32.txt +25 -0
  285. package/fixtures/erwartet/verkauf-bar.grid48.txt +24 -0
  286. package/fixtures/erwartet/verkauf-bar.lines.json +256 -0
  287. package/fixtures/erwartet/verkauf-karte.grid32.txt +25 -0
  288. package/fixtures/erwartet/verkauf-karte.grid48.txt +24 -0
  289. package/fixtures/erwartet/verkauf-karte.lines.json +256 -0
  290. package/fixtures/erwartet/verkauf-kleinunternehmer.grid32.txt +26 -0
  291. package/fixtures/erwartet/verkauf-kleinunternehmer.grid48.txt +25 -0
  292. package/fixtures/erwartet/verkauf-kleinunternehmer.lines.json +226 -0
  293. package/fixtures/manifest.json +107 -0
  294. package/package.json +135 -0
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPrintJob = exports.createPrintJob = exports.listMyPrinters = exports.receiptsScopeOf = exports.cancelScopeOf = exports.verteileRabatt = exports.setMyRegisterDeviceSettings = exports.setMyKasseSettings = exports.getKasseSettings = exports.mengeErlaubt = exports.mengenVorgabe = exports.mengenregelFuerEinheit = exports.listMyArticles = exports.listMyArticleGroups = exports.fromKasseArtikelPayload = exports.fromArticleGroupPayload = exports.mergeKasseSettings = exports.KASSE_GERAET_STANDARD = exports.KASSE_BETRIEB_STANDARD = exports.KASSE_TASTEN_STANDARD = exports.KASSE_TASTEN_AKTIONEN = exports.KARTENANBIETER = void 0;
4
+ /**
5
+ * Kachel-Kasse: Einstellungen, Artikelgruppen/Artikel fuer Kacheln,
6
+ * Rabattverteilung. Die Aufrufe heissen 1:1 wie die Backend-Functions
7
+ * (die Rewrites-Waechter der Web-App leiten daraus ab).
8
+ */
9
+ var settings_js_1 = require("./settings.js");
10
+ Object.defineProperty(exports, "KARTENANBIETER", { enumerable: true, get: function () { return settings_js_1.KARTENANBIETER; } });
11
+ Object.defineProperty(exports, "KASSE_TASTEN_AKTIONEN", { enumerable: true, get: function () { return settings_js_1.KASSE_TASTEN_AKTIONEN; } });
12
+ Object.defineProperty(exports, "KASSE_TASTEN_STANDARD", { enumerable: true, get: function () { return settings_js_1.KASSE_TASTEN_STANDARD; } });
13
+ Object.defineProperty(exports, "KASSE_BETRIEB_STANDARD", { enumerable: true, get: function () { return settings_js_1.KASSE_BETRIEB_STANDARD; } });
14
+ Object.defineProperty(exports, "KASSE_GERAET_STANDARD", { enumerable: true, get: function () { return settings_js_1.KASSE_GERAET_STANDARD; } });
15
+ Object.defineProperty(exports, "mergeKasseSettings", { enumerable: true, get: function () { return settings_js_1.mergeKasseSettings; } });
16
+ var artikel_js_1 = require("./artikel.js");
17
+ Object.defineProperty(exports, "fromArticleGroupPayload", { enumerable: true, get: function () { return artikel_js_1.fromArticleGroupPayload; } });
18
+ Object.defineProperty(exports, "fromKasseArtikelPayload", { enumerable: true, get: function () { return artikel_js_1.fromKasseArtikelPayload; } });
19
+ Object.defineProperty(exports, "listMyArticleGroups", { enumerable: true, get: function () { return artikel_js_1.listMyArticleGroups; } });
20
+ Object.defineProperty(exports, "listMyArticles", { enumerable: true, get: function () { return artikel_js_1.listMyArticles; } });
21
+ Object.defineProperty(exports, "mengenregelFuerEinheit", { enumerable: true, get: function () { return artikel_js_1.mengenregelFuerEinheit; } });
22
+ Object.defineProperty(exports, "mengenVorgabe", { enumerable: true, get: function () { return artikel_js_1.mengenVorgabe; } });
23
+ Object.defineProperty(exports, "mengeErlaubt", { enumerable: true, get: function () { return artikel_js_1.mengeErlaubt; } });
24
+ var client_js_1 = require("./client.js");
25
+ Object.defineProperty(exports, "getKasseSettings", { enumerable: true, get: function () { return client_js_1.getKasseSettings; } });
26
+ Object.defineProperty(exports, "setMyKasseSettings", { enumerable: true, get: function () { return client_js_1.setMyKasseSettings; } });
27
+ Object.defineProperty(exports, "setMyRegisterDeviceSettings", { enumerable: true, get: function () { return client_js_1.setMyRegisterDeviceSettings; } });
28
+ var discount_js_1 = require("../receipt/discount.js");
29
+ Object.defineProperty(exports, "verteileRabatt", { enumerable: true, get: function () { return discount_js_1.verteileRabatt; } });
30
+ // Reichweiten der Kassen-Rechte (Migration wie im Backend) -- bewusst NICHT im
31
+ // Register-Unterpfad: dessen Exportnamen sind 1:1 Function-Namen (Rewrites).
32
+ var pairing_js_1 = require("../register/pairing.js");
33
+ Object.defineProperty(exports, "cancelScopeOf", { enumerable: true, get: function () { return pairing_js_1.cancelScopeOf; } });
34
+ Object.defineProperty(exports, "receiptsScopeOf", { enumerable: true, get: function () { return pairing_js_1.receiptsScopeOf; } });
35
+ var drucker_js_1 = require("./drucker.js");
36
+ Object.defineProperty(exports, "listMyPrinters", { enumerable: true, get: function () { return drucker_js_1.listMyPrinters; } });
37
+ Object.defineProperty(exports, "createPrintJob", { enumerable: true, get: function () { return drucker_js_1.createPrintJob; } });
38
+ Object.defineProperty(exports, "getPrintJob", { enumerable: true, get: function () { return drucker_js_1.getPrintJob; } });
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Kassen-Einstellungen der Browser-Kasse — Zwilling von
3
+ * `functions/kasse-settings-core.js` (Backend, dort mit Validator).
4
+ *
5
+ * Betriebsweit (`register_settings.kasse` am Konto) und je Geraet
6
+ * (`register_devices/{id}.kasse`). Die Standardwerte stehen hier UND im
7
+ * Backend; ein Test in beiden Repos haelt sie deckungsgleich. Trinkgeld ist
8
+ * bewusst AUS, bis die Buchung geklaert ist (Spec kachel-kasse § 9).
9
+ */
10
+ export type KasseStil = 'klar' | 'warm' | 'nacht' | 'kontrast';
11
+ export type KasseSchrift = 'S' | 'M' | 'L' | 'XL';
12
+ export type KasseWasserzeichen = 'aus' | 'anmeldung' | 'ueberall';
13
+ export type KasseMenge = 'aus' | 'x' | 'kg';
14
+ export type KasseTgModus = 'betrag' | 'gesamt' | 'beides';
15
+ export type KasseKassierenModus = 'seite' | 'panel';
16
+ /** Kartenanbieter: Karte gibt es erst mit eingerichtetem Anbieter; 'extern' = eigenes Terminal ohne Anbindung. */
17
+ export type KasseKartenanbieter = 'keiner' | 'extern' | 'hobex' | 'mypos' | 'stripe';
18
+ export declare const KARTENANBIETER: readonly KasseKartenanbieter[];
19
+ export type KasseBelegAusgabe = 'qr' | 'druck' | 'mail' | 'sms' | 'fragen';
20
+ export type KasseLayout = 'rechts' | 'links' | 'vollbild';
21
+ export type KasseKatpos = 'oben' | 'links';
22
+ export type KasseHoehe = 'S' | 'M' | 'L';
23
+ /** `sdp` = Netzwerk ueber Epson Server Direct Print (der Drucker holt Jobs vom Backend, jeder Browser druckt). */
24
+ export type KasseDruckerArt = 'sdp' | 'netz' | 'bt' | 'usb';
25
+ export type KassePapier = 'mm58' | 'mm80';
26
+ export type KasseZeichensatz = 'CP1252' | 'CP437';
27
+ export type KasseSchnitt = 'partial' | 'full' | 'none';
28
+ export type KasseLadeAuto = 'bar' | 'immer' | 'nie';
29
+ /** Schalter-Landkarte: Steuersaetze / Trinkgeldstufen (Schluessel = Wert als Text). */
30
+ export type Schalterkarte = Record<string, boolean>;
31
+ export interface KasseSettingsBetrieb {
32
+ logoText: string;
33
+ logoAn: boolean;
34
+ logoGroesse: 'S' | 'M' | 'L';
35
+ wasserzeichen: KasseWasserzeichen;
36
+ farbe: string;
37
+ stil: KasseStil;
38
+ schrift: KasseSchrift;
39
+ schriftEinst: 'S' | 'M' | 'L';
40
+ kachelstil: 'streifen' | 'voll';
41
+ uhr: boolean;
42
+ sperrbild: boolean;
43
+ foto: boolean;
44
+ autoAbMin: 0 | 1 | 5 | 15 | 30;
45
+ abNachVerkauf: boolean;
46
+ /** Schnelles Entsperren mit gemerkter PIN (lokal, Server-Login laeuft nach); aus = streng, jeder Login wartet. */
47
+ schnellLogin: boolean;
48
+ preisAnzeigen: boolean;
49
+ ustAnzeigen: boolean;
50
+ emoji: boolean;
51
+ katFarben: boolean;
52
+ freiErlaubt: boolean;
53
+ saetze: Schalterkarte;
54
+ menge: KasseMenge;
55
+ notiz: boolean;
56
+ suche: boolean;
57
+ rabatt: 'aus' | 'an';
58
+ zahlBar: boolean;
59
+ zahlKarte: boolean;
60
+ kartenanbieter: KasseKartenanbieter;
61
+ trinkgeld: boolean;
62
+ tgModus: KasseTgModus;
63
+ tgStufen: Schalterkarte;
64
+ tgSplit: boolean;
65
+ rueckgeld: boolean;
66
+ schnellbar: boolean;
67
+ kassierenModus: KasseKassierenModus;
68
+ /** Trinkgeld-Chips in Prozent (eine Nachkommastelle, max 5, eindeutig, Reihenfolge des Chefs). */
69
+ tgChips: number[];
70
+ belegAusgabe: KasseBelegAusgabe;
71
+ fertigSekunden: 0 | 3 | 5 | 10 | 15 | 30 | 60;
72
+ }
73
+ /** Aktionen der Kasse, die eine Taste bekommen koennen. */
74
+ export type KasseTastenAktion = 'kassieren' | 'abschliessen' | 'abbrechen' | 'frei' | 'bar' | 'karte' | 'passend' | 'belege' | 'letzteZurueck';
75
+ export declare const KASSE_TASTEN_AKTIONEN: readonly KasseTastenAktion[];
76
+ /** Tastenkarte: Aktion -> Tasten (`Mod+F`, `Enter`, `Escape`, `F5` ...; `Mod` = ⌘ auf dem Mac, Strg sonst). */
77
+ export type KasseTastenkarte = Record<KasseTastenAktion, string[]>;
78
+ export declare const KASSE_TASTEN_STANDARD: Readonly<KasseTastenkarte>;
79
+ export interface KasseSettingsGeraet {
80
+ layout: KasseLayout;
81
+ katpos: KasseKatpos;
82
+ spaltenExtra: number;
83
+ hoehe: KasseHoehe;
84
+ touch: boolean;
85
+ /** Tastenbelegung dieses Geraets (Vorgabe KASSE_TASTEN_STANDARD, je Aktion mischbar). */
86
+ tasten: KasseTastenkarte;
87
+ druckerAn: boolean;
88
+ druckerArt: KasseDruckerArt;
89
+ druckerIp: string;
90
+ druckerPort: number;
91
+ druckerBt: string;
92
+ /** Kennung des Netzwerk-Druckers (Server Direct Print) aus `listMyPrinters`; '' = keiner gewaehlt. */
93
+ druckerId: string;
94
+ /** ePOS Device-ID bei `druckerArt 'netz'` (Epson direkt per IP), Vorgabe `local_printer`. */
95
+ druckerDevid: string;
96
+ papier: KassePapier;
97
+ zeichensatz: KasseZeichensatz;
98
+ schnitt: KasseSchnitt;
99
+ ladeAn: boolean;
100
+ ladeAuto: KasseLadeAuto;
101
+ terminalIp: string;
102
+ terminalPort: number;
103
+ }
104
+ export interface KasseSettings {
105
+ betrieb: KasseSettingsBetrieb;
106
+ geraet: KasseSettingsGeraet;
107
+ }
108
+ export declare const KASSE_BETRIEB_STANDARD: Readonly<KasseSettingsBetrieb>;
109
+ export declare const KASSE_GERAET_STANDARD: Readonly<KasseSettingsGeraet>;
110
+ /**
111
+ * Standard + gespeichert. Landkarten (`saetze`, `tgStufen`) werden je Schluessel
112
+ * gemischt, damit neue Saetze beim Altbestand ankommen; unbekannte Schluessel
113
+ * bleiben draussen (die Wahrheit ueber Gueltigkeit hat der Server).
114
+ */
115
+ export declare function mergeKasseSettings<T extends object>(standard: Readonly<T>, gespeichert: Partial<T> | null | undefined): T;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * Kassen-Einstellungen der Browser-Kasse — Zwilling von
4
+ * `functions/kasse-settings-core.js` (Backend, dort mit Validator).
5
+ *
6
+ * Betriebsweit (`register_settings.kasse` am Konto) und je Geraet
7
+ * (`register_devices/{id}.kasse`). Die Standardwerte stehen hier UND im
8
+ * Backend; ein Test in beiden Repos haelt sie deckungsgleich. Trinkgeld ist
9
+ * bewusst AUS, bis die Buchung geklaert ist (Spec kachel-kasse § 9).
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.KASSE_GERAET_STANDARD = exports.KASSE_BETRIEB_STANDARD = exports.KASSE_TASTEN_STANDARD = exports.KASSE_TASTEN_AKTIONEN = exports.KARTENANBIETER = void 0;
13
+ exports.mergeKasseSettings = mergeKasseSettings;
14
+ exports.KARTENANBIETER = ['keiner', 'extern', 'hobex', 'mypos', 'stripe'];
15
+ exports.KASSE_TASTEN_AKTIONEN = ['kassieren', 'abschliessen', 'abbrechen', 'frei', 'bar', 'karte', 'passend', 'belege', 'letzteZurueck'];
16
+ exports.KASSE_TASTEN_STANDARD = Object.freeze({
17
+ kassieren: ['Enter'], abschliessen: ['Enter'], abbrechen: ['Escape'],
18
+ frei: ['Mod+F'], bar: ['Mod+B'], karte: ['Mod+K'], passend: ['Mod+P'],
19
+ belege: ['Mod+E'], letzteZurueck: ['Mod+Backspace'],
20
+ });
21
+ exports.KASSE_BETRIEB_STANDARD = Object.freeze({
22
+ logoText: 'K', logoAn: true, logoGroesse: 'M', wasserzeichen: 'anmeldung', farbe: '#1B46F5',
23
+ stil: 'klar', schrift: 'M', schriftEinst: 'S', kachelstil: 'streifen', uhr: true,
24
+ sperrbild: true, foto: true, autoAbMin: 0, abNachVerkauf: false, schnellLogin: true,
25
+ preisAnzeigen: true, ustAnzeigen: false, emoji: true, katFarben: true, freiErlaubt: true,
26
+ saetze: { 20: true, 13: true, 10: true, 4.9: true, 0: true, 19: false },
27
+ menge: 'x', notiz: false, suche: false, rabatt: 'aus',
28
+ zahlBar: true, zahlKarte: false, kartenanbieter: 'keiner', trinkgeld: false, tgModus: 'beides',
29
+ tgStufen: { 5: true, 10: true, 15: false, 20: false }, tgChips: [5, 10], tgSplit: true, rueckgeld: true,
30
+ schnellbar: false, kassierenModus: 'seite',
31
+ belegAusgabe: 'qr', fertigSekunden: 0,
32
+ });
33
+ exports.KASSE_GERAET_STANDARD = Object.freeze({
34
+ layout: 'rechts', katpos: 'oben', spaltenExtra: 0, hoehe: 'M', touch: false,
35
+ tasten: { ...exports.KASSE_TASTEN_STANDARD },
36
+ druckerAn: false, druckerArt: 'sdp', druckerIp: '', druckerPort: 9100, druckerBt: '', druckerId: '', druckerDevid: 'local_printer',
37
+ papier: 'mm80', zeichensatz: 'CP1252', schnitt: 'partial',
38
+ ladeAn: false, ladeAuto: 'bar',
39
+ terminalIp: '', terminalPort: 20008,
40
+ });
41
+ /**
42
+ * Standard + gespeichert. Landkarten (`saetze`, `tgStufen`) werden je Schluessel
43
+ * gemischt, damit neue Saetze beim Altbestand ankommen; unbekannte Schluessel
44
+ * bleiben draussen (die Wahrheit ueber Gueltigkeit hat der Server).
45
+ */
46
+ function mergeKasseSettings(standard, gespeichert) {
47
+ const out = JSON.parse(JSON.stringify(standard));
48
+ if (gespeichert && typeof gespeichert === 'object') {
49
+ for (const [key, wert] of Object.entries(gespeichert)) {
50
+ if (!(key in out))
51
+ continue;
52
+ const alt = out[key];
53
+ if (alt && typeof alt === 'object' && !Array.isArray(alt) && wert && typeof wert === 'object' && !Array.isArray(wert)) {
54
+ out[key] = { ...alt, ...wert };
55
+ }
56
+ else if (wert !== undefined) {
57
+ out[key] = wert;
58
+ }
59
+ }
60
+ }
61
+ return out;
62
+ }
@@ -0,0 +1,51 @@
1
+ import type { Receipt } from './receipt.js';
2
+ /**
3
+ * Storno-Metadaten — Zwilling von `functions/storno-core.js`.
4
+ *
5
+ * Ein Storno ist ein eigener, signierter Beleg vom Typ `cancellation` mit
6
+ * negativen Betraegen. Was NICHT signiert ist und hier als Metadaten laeuft:
7
+ * der Bezug zum Original (`cancellationOf`, `cancellationReason` am
8
+ * Storno-Beleg) und die Liste der Stornos am Original (`cancellations`), aus
9
+ * der sich die Restmengen ergeben.
10
+ */
11
+ /** Grund-Katalog: Codes wie im Backend, Anzeigetext fuer Bon und Bedienung. */
12
+ export declare const CANCELLATION_REASONS: Readonly<{
13
+ readonly fehleingabe: "Fehleingabe";
14
+ readonly kunde_storniert: "Kunde hat storniert";
15
+ readonly falsche_zahlart: "Falsche Zahlart";
16
+ readonly doppelt_erfasst: "Doppelt erfasst";
17
+ readonly sonstiges: "Sonstiges";
18
+ }>;
19
+ export type CancellationReason = keyof typeof CANCELLATION_REASONS;
20
+ export declare function isCancellationReason(value: unknown): value is CancellationReason;
21
+ /** Bezug eines Storno-Belegs auf sein Original. */
22
+ export interface CancellationOf {
23
+ receiptId: string;
24
+ fullReceiptId: string | null;
25
+ }
26
+ /** Eine stornierte Position: Index im Original und Menge. */
27
+ export interface CancellationItem {
28
+ index: number;
29
+ quantity: number;
30
+ }
31
+ /**
32
+ * Eintrag in `cancellations[]` am Original. `pending` = Reservierung, die
33
+ * das Backend vor der Buchung setzt und danach ersetzt; sie zaehlt fuer die
34
+ * Restmengen nur, solange sie frisch ist (siehe [remainingQuantities]).
35
+ */
36
+ export interface Cancellation {
37
+ receiptId?: string;
38
+ pending?: boolean;
39
+ at: number;
40
+ by: string | null;
41
+ note: string | null;
42
+ items: CancellationItem[];
43
+ }
44
+ /** Ab wann eine liegengebliebene Reservierung nicht mehr zaehlt (wie im Backend). */
45
+ export declare const CANCELLATION_RESERVATION_MS = 120000;
46
+ /**
47
+ * Restmenge je Position eines Belegs — Belegmenge minus alles, was storniert
48
+ * oder frisch reserviert ist; nie unter null. Fuer den Storno-Dialog der Kasse
49
+ * (Reste anzeigen, bevor der Server gefragt wird). Die Wahrheit hat der Server.
50
+ */
51
+ export declare function remainingQuantities(receipt: Receipt, nowMs?: number): number[];
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CANCELLATION_RESERVATION_MS = exports.CANCELLATION_REASONS = void 0;
4
+ exports.isCancellationReason = isCancellationReason;
5
+ exports.remainingQuantities = remainingQuantities;
6
+ /**
7
+ * Storno-Metadaten — Zwilling von `functions/storno-core.js`.
8
+ *
9
+ * Ein Storno ist ein eigener, signierter Beleg vom Typ `cancellation` mit
10
+ * negativen Betraegen. Was NICHT signiert ist und hier als Metadaten laeuft:
11
+ * der Bezug zum Original (`cancellationOf`, `cancellationReason` am
12
+ * Storno-Beleg) und die Liste der Stornos am Original (`cancellations`), aus
13
+ * der sich die Restmengen ergeben.
14
+ */
15
+ /** Grund-Katalog: Codes wie im Backend, Anzeigetext fuer Bon und Bedienung. */
16
+ exports.CANCELLATION_REASONS = Object.freeze({
17
+ fehleingabe: 'Fehleingabe',
18
+ kunde_storniert: 'Kunde hat storniert',
19
+ falsche_zahlart: 'Falsche Zahlart',
20
+ doppelt_erfasst: 'Doppelt erfasst',
21
+ sonstiges: 'Sonstiges',
22
+ });
23
+ function isCancellationReason(value) {
24
+ return typeof value === 'string' && Object.prototype.hasOwnProperty.call(exports.CANCELLATION_REASONS, value);
25
+ }
26
+ /** Ab wann eine liegengebliebene Reservierung nicht mehr zaehlt (wie im Backend). */
27
+ exports.CANCELLATION_RESERVATION_MS = 120_000;
28
+ /**
29
+ * Restmenge je Position eines Belegs — Belegmenge minus alles, was storniert
30
+ * oder frisch reserviert ist; nie unter null. Fuer den Storno-Dialog der Kasse
31
+ * (Reste anzeigen, bevor der Server gefragt wird). Die Wahrheit hat der Server.
32
+ */
33
+ function remainingQuantities(receipt, nowMs = Date.now()) {
34
+ const rest = receipt.items.map((item) => item.quantity);
35
+ for (const eintrag of receipt.cancellations ?? []) {
36
+ if (eintrag.pending === true && eintrag.at < nowMs - exports.CANCELLATION_RESERVATION_MS)
37
+ continue;
38
+ for (const pos of eintrag.items) {
39
+ if (Number.isInteger(pos.index) && pos.index >= 0 && pos.index < rest.length) {
40
+ rest[pos.index] = Math.max(0, (rest[pos.index] ?? 0) - pos.quantity);
41
+ }
42
+ }
43
+ }
44
+ return rest;
45
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Kasse — die Antwortform von `listMyCashregisters` (functions/index.js).
3
+ *
4
+ * Das Dart-Vorbild (`Cashregister` in kasseneck_api/lib/models/cashregister.dart)
5
+ * liest das **Firestore-Dokument** direkt ueber das `cloud_firestore`-SDK und
6
+ * kommt deshalb an `token` und `aes_key`. Dieses Paket spricht das Backend
7
+ * ausschliesslich ueber die HTTPS-Endpunkte, und die geben beides nicht her:
8
+ *
9
+ * - **`aes_key` steht in dieser Antwort ueberhaupt nicht** (nur im
10
+ * Admin-Export). Ein Feld dafuer versprach hier einen `string` und lieferte
11
+ * `undefined` — deshalb gibt es keines mehr.
12
+ * - **`token` ist fuer Kassen-Benutzer bewusst `null`**: im Browser traegt die
13
+ * Sitzung die Identitaet, und ein einmal ausgelieferter Kassen-Token liesse
14
+ * sich ohne Sitzung und ohne PIN weiterverwenden (so steht es im Backend an
15
+ * der Stelle selbst).
16
+ *
17
+ * `create_time` kommt aus `isoTs(...)` und ist **`null`**, wenn das Dokument
18
+ * keinen Zeitstempel traegt. Aus `null` wird hier kein Zeitpunkt: `new Date(null)`
19
+ * ergaebe still den 1.1.1970, und ein erfundenes Datum ist schlechter als ein
20
+ * fehlendes.
21
+ *
22
+ * Aus demselben Grund fehlt `userId`: das Dart-Vorbild traegt es, weil es den
23
+ * Firestore-**Pfad** kennt (`users/{uid}/cashregisters/{id}`). In dieser
24
+ * Antwort steht es nicht, und ein Kassen-Benutzer erfaehrt die Kennung seines
25
+ * Betriebs bewusst nie — sie steckt allein im Token.
26
+ */
27
+ export interface Cashregister {
28
+ id: string;
29
+ /** Anzeigename der Kasse, sofern gepflegt. */
30
+ label?: string;
31
+ /** Freie Beschreibung, sofern gepflegt. */
32
+ description?: string;
33
+ /** Anlagezeitpunkt; fehlt, wenn die Antwort keinen lesbaren traegt. */
34
+ createTime?: Date;
35
+ /** Kassen-Token; fuer Kassen-Benutzer nie enthalten (siehe Klassenkommentar). */
36
+ token?: string;
37
+ /** Zugeordnete Signatureinheit. */
38
+ signatureId?: string;
39
+ onboarding: CashregisterOnboarding;
40
+ }
41
+ /**
42
+ * Stand der Inbetriebnahme (RKSV): Kasse bei FinanzOnline registriert,
43
+ * Startbeleg erzeugt, Startbeleg uebermittelt. Die drei Kennzeichen entscheiden
44
+ * in der Browser-Kasse, ob ueberhaupt schon kassiert werden darf.
45
+ */
46
+ export interface CashregisterOnboarding {
47
+ cashboxRegistered: boolean;
48
+ startbelegCreated: boolean;
49
+ startbelegTransmitted: boolean;
50
+ cashboxRegisteredAt?: Date;
51
+ startbelegCreatedAt?: Date;
52
+ startbelegTransmittedAt?: Date;
53
+ }
54
+ /** Nutzlast-Form, die dieses Paket liest — die Feldnamen von `listMyCashregisters`. */
55
+ export interface CashregisterPayload {
56
+ id?: string | null;
57
+ label?: string | null;
58
+ description?: string | null;
59
+ create_time?: string | null;
60
+ signature_id?: string | null;
61
+ token?: string | null;
62
+ onboarding?: CashregisterOnboardingPayload | null;
63
+ }
64
+ export interface CashregisterOnboardingPayload {
65
+ cashbox_registered?: boolean | null;
66
+ startbeleg_created?: boolean | null;
67
+ startbeleg_transmitted?: boolean | null;
68
+ cashbox_registered_at?: string | null;
69
+ startbeleg_created_at?: string | null;
70
+ startbeleg_transmitted_at?: string | null;
71
+ }
72
+ /**
73
+ * Liest eine Kasse aus der Antwort. `id` gewinnt aus der Nutzlast, faellt aber
74
+ * auf den uebergebenen Wert zurueck — die Liste fuehrt die Dokument-ID mit,
75
+ * ein einzeln gelesenes Dokument nicht.
76
+ */
77
+ export declare function fromCashregisterPayload(payload: CashregisterPayload, id: string): Cashregister;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fromCashregisterPayload = fromCashregisterPayload;
4
+ const vienna_time_js_1 = require("../vienna-time.js");
5
+ /**
6
+ * Liest eine Kasse aus der Antwort. `id` gewinnt aus der Nutzlast, faellt aber
7
+ * auf den uebergebenen Wert zurueck — die Liste fuehrt die Dokument-ID mit,
8
+ * ein einzeln gelesenes Dokument nicht.
9
+ */
10
+ function fromCashregisterPayload(payload, id) {
11
+ const ob = payload.onboarding ?? {};
12
+ return {
13
+ id: payload.id ?? id,
14
+ ...(payload.label ? { label: payload.label } : {}),
15
+ ...(payload.description ? { description: payload.description } : {}),
16
+ ...zeitfeld('createTime', payload.create_time),
17
+ ...(payload.token ? { token: payload.token } : {}),
18
+ ...(payload.signature_id ? { signatureId: payload.signature_id } : {}),
19
+ onboarding: {
20
+ cashboxRegistered: ob.cashbox_registered === true,
21
+ startbelegCreated: ob.startbeleg_created === true,
22
+ startbelegTransmitted: ob.startbeleg_transmitted === true,
23
+ ...zeitfeld('cashboxRegisteredAt', ob.cashbox_registered_at),
24
+ ...zeitfeld('startbelegCreatedAt', ob.startbeleg_created_at),
25
+ ...zeitfeld('startbelegTransmittedAt', ob.startbeleg_transmitted_at),
26
+ },
27
+ };
28
+ }
29
+ /**
30
+ * Ein Zeitfeld, das es nur gibt, wenn die Nutzlast einen lesbaren Zeitstempel
31
+ * traegt. `null` (der Normalfall aus `isoTs`) und unlesbarer Unsinn ergeben
32
+ * **kein** Feld statt eines erfundenen Zeitpunkts — die Kassenliste soll sich
33
+ * auch dann anzeigen lassen, wenn ein einzelner Eintrag ein kaputtes Datum
34
+ * fuehrt (dieselbe tolerante Leserichtung wie beim Enum-Lesen).
35
+ */
36
+ function zeitfeld(name, roh) {
37
+ const wert = zeitpunkt(roh);
38
+ return (wert === undefined ? {} : { [name]: wert });
39
+ }
40
+ function zeitpunkt(roh) {
41
+ if (typeof roh !== 'string' || roh.trim() === '') {
42
+ return undefined;
43
+ }
44
+ try {
45
+ // Ueber parseServerTimeStamp und nie ueber `new Date(text)`: ein
46
+ // offsetloser Zeitstempel waere sonst die lokale Zeit des ausfuehrenden
47
+ // Rechners (siehe ../vienna-time.ts).
48
+ return (0, vienna_time_js_1.parseServerTimeStamp)(roh);
49
+ }
50
+ catch {
51
+ return undefined;
52
+ }
53
+ }
@@ -0,0 +1,26 @@
1
+ import { VatRate } from '../enums/index.js';
2
+ /**
3
+ * Loest einen Enum-Eintrag anhand seines Nutzlast-Schluessels auf (z. B.
4
+ * `receiptType: 'standard'` — bei den mit `defineEnum()` gebauten Enums ist
5
+ * der Objekt-Schluessel selbst die Nutzlast).
6
+ *
7
+ * Nur fuer den **Schreibpfad**: bevor dieses Paket selbst einen Wert nach
8
+ * aussen traegt, muss er bekannt sein — ein unbekannter Schluessel wirft.
9
+ * Fuer den Lesepfad (Daten, die vom Backend hereinkommen) siehe
10
+ * [readEnumKey]: dort darf ein einzelner unbekannter Wert nicht die ganze
11
+ * Belegliste zum Absturz bringen.
12
+ */
13
+ export declare function requireEnumKey<T extends Record<string, unknown>>(enumObj: T, key: string, label: string): T[keyof T];
14
+ /**
15
+ * Lesepfad-Pendant zu [requireEnumKey]: ein unbekannter Schluessel (z. B. ein
16
+ * neuer Belegtyp oder eine neue Zahlungsart, die dieses Paket noch nicht
17
+ * kennt) wirft nicht und wird auch nicht still zu `undefined` — der rohe
18
+ * Nutzlast-Schluessel bleibt als String erhalten. Ein Aufrufer, der eine
19
+ * Belegliste anzeigt, kann so alle Positionen weiterlesen; nur die unbekannte
20
+ * bleibt (erkennbar) unaufgeloest.
21
+ */
22
+ export declare function readEnumKey<T extends Record<string, unknown>>(enumObj: T, key: string): T[keyof T] | string;
23
+ /** Schreibpfad: loest einen Steuersatz anhand seines `rate`-Werts auf, wirft bei unbekanntem Satz. */
24
+ export declare function requireVatRateByRate(rate: number): VatRate;
25
+ /** Lesepfad: unbekannter Satz bleibt als roher `rate`-Wert erhalten statt zu werfen oder `undefined` zu werden. */
26
+ export declare function readVatRateByRate(rate: number): VatRate | number;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requireEnumKey = requireEnumKey;
4
+ exports.readEnumKey = readEnumKey;
5
+ exports.requireVatRateByRate = requireVatRateByRate;
6
+ exports.readVatRateByRate = readVatRateByRate;
7
+ const index_js_1 = require("../enums/index.js");
8
+ /**
9
+ * Loest einen Enum-Eintrag anhand seines Nutzlast-Schluessels auf (z. B.
10
+ * `receiptType: 'standard'` — bei den mit `defineEnum()` gebauten Enums ist
11
+ * der Objekt-Schluessel selbst die Nutzlast).
12
+ *
13
+ * Nur fuer den **Schreibpfad**: bevor dieses Paket selbst einen Wert nach
14
+ * aussen traegt, muss er bekannt sein — ein unbekannter Schluessel wirft.
15
+ * Fuer den Lesepfad (Daten, die vom Backend hereinkommen) siehe
16
+ * [readEnumKey]: dort darf ein einzelner unbekannter Wert nicht die ganze
17
+ * Belegliste zum Absturz bringen.
18
+ */
19
+ function requireEnumKey(enumObj, key, label) {
20
+ if (!Object.prototype.hasOwnProperty.call(enumObj, key)) {
21
+ throw new Error(`${label}: unbekannter Schluessel "${key}" in der Nutzlast`);
22
+ }
23
+ return enumObj[key];
24
+ }
25
+ /**
26
+ * Lesepfad-Pendant zu [requireEnumKey]: ein unbekannter Schluessel (z. B. ein
27
+ * neuer Belegtyp oder eine neue Zahlungsart, die dieses Paket noch nicht
28
+ * kennt) wirft nicht und wird auch nicht still zu `undefined` — der rohe
29
+ * Nutzlast-Schluessel bleibt als String erhalten. Ein Aufrufer, der eine
30
+ * Belegliste anzeigt, kann so alle Positionen weiterlesen; nur die unbekannte
31
+ * bleibt (erkennbar) unaufgeloest.
32
+ */
33
+ function readEnumKey(enumObj, key) {
34
+ return Object.prototype.hasOwnProperty.call(enumObj, key) ? enumObj[key] : key;
35
+ }
36
+ function findVatRate(rate) {
37
+ return Object.values(index_js_1.VatRate).find((v) => v.rate === rate);
38
+ }
39
+ /** Schreibpfad: loest einen Steuersatz anhand seines `rate`-Werts auf, wirft bei unbekanntem Satz. */
40
+ function requireVatRateByRate(rate) {
41
+ const eintrag = findVatRate(rate);
42
+ if (!eintrag) {
43
+ throw new Error(`Steuersatz: unbekannter Satz "${rate}" in der Nutzlast`);
44
+ }
45
+ return eintrag;
46
+ }
47
+ /** Lesepfad: unbekannter Satz bleibt als roher `rate`-Wert erhalten statt zu werfen oder `undefined` zu werden. */
48
+ function readVatRateByRate(rate) {
49
+ return findVatRate(rate) ?? rate;
50
+ }
@@ -0,0 +1,63 @@
1
+ import { CreditCardProvider } from '../enums/index.js';
2
+ /**
3
+ * Hobex-Kartenzahlungsbeleg — Zwilling von `HobexReceipt` in
4
+ * kasseneck_api/lib/models/hobex_receipt.dart.
5
+ *
6
+ * `amount`/`tip` kommen vom Hobex-Terminal als Euro-Gleitkommazahl ueber die
7
+ * Leitung (Terminal-API, nicht das Kasseneck-Backend) — das Nutzlast-Format
8
+ * bleibt deshalb bewusst Euro (siehe [toHobexReceiptPayload]/
9
+ * [fromHobexReceiptPayload]), intern wird ab hier exakt in Cent gefuehrt.
10
+ *
11
+ * Nur der Cloud-API-Pfad (`fromJson` im Dart-Vorbild) ist Teil dieses Pakets;
12
+ * das lokale HPS-Terminal (`fromHps`, TCP-Anbindung an ein physisches Geraet)
13
+ * ist wie SumUp/myPOS eine Android/Desktop-Geraete-Anbindung, die ein
14
+ * Browser-/Node-Paket nicht bedienen kann.
15
+ */
16
+ export interface HobexReceipt {
17
+ transactionId: string;
18
+ tid: string;
19
+ receipt: string;
20
+ approvalCode: string;
21
+ reference?: string;
22
+ /** Normalisiert wie im Dart-Vorbild: `"YYYY-MM-DD HH:mm:ss"` (Bruchteil und `T` entfernt). */
23
+ transactionDate: string;
24
+ cardNumber: string;
25
+ cardExpiry: string;
26
+ brand: string;
27
+ cardIssuer: string;
28
+ responseCode: string;
29
+ transactionType: string;
30
+ currency: string;
31
+ amountCents: number;
32
+ tipCents: number;
33
+ cvm: string;
34
+ creditCardProvider: CreditCardProvider;
35
+ }
36
+ export interface HobexReceiptPayload {
37
+ transactionId: string;
38
+ tid: string;
39
+ receipt: string;
40
+ approvalCode: string;
41
+ reference: string | null | undefined;
42
+ transactionDate: string;
43
+ cardNumber: string;
44
+ cardExpiry: string;
45
+ brand: string;
46
+ cardIssuer: string;
47
+ responseCode: string;
48
+ transactionType: string;
49
+ currency: string;
50
+ amount: number;
51
+ tip: number;
52
+ cvm: string | number;
53
+ }
54
+ export declare function toHobexReceiptPayload(beleg: HobexReceipt): HobexReceiptPayload;
55
+ export declare function fromHobexReceiptPayload(payload: HobexReceiptPayload): HobexReceipt;
56
+ /**
57
+ * Wandelt den Beleg in die `cardPaymentData`-Map, die auf dem Kasseneck-Beleg
58
+ * landet (siehe [Receipt.cardPaymentData]). Bei HPS-Zahlungen kommen weitere
59
+ * Felder dazu, die nur das lokale Terminal liefert.
60
+ */
61
+ export declare function hobexReceiptToCardPaymentData(beleg: HobexReceipt): Record<string, string>;
62
+ /** Kartenzahlung erfordert eine Unterschrift (CVM-Code `"1"`). */
63
+ export declare function hobexReceiptNeedsSignature(beleg: HobexReceipt): boolean;