@kreiseck/kasseneck-api 1.12.0 → 1.14.0

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 (419) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +1 -0
  3. package/dist/cjs/client/api.d.ts +3 -1
  4. package/dist/cjs/client/api.js +1 -0
  5. package/dist/cjs/client/aufrufe.d.ts +5 -5
  6. package/dist/cjs/client/aufrufe.js +7 -2
  7. package/dist/cjs/client/index.d.ts +1 -1
  8. package/dist/cjs/client/index.js +2 -1
  9. package/dist/cjs/client/receipts.d.ts +85 -2
  10. package/dist/cjs/client/receipts.js +164 -5
  11. package/dist/cjs/enums/voucher-type.d.ts +1 -1
  12. package/dist/cjs/enums/voucher-type.js +1 -1
  13. package/dist/cjs/index.d.ts +2 -2
  14. package/dist/cjs/index.js +15 -3
  15. package/dist/cjs/invoice/typen.d.ts +1 -1
  16. package/dist/cjs/models/index.d.ts +2 -1
  17. package/dist/cjs/models/index.js +12 -1
  18. package/dist/cjs/models/receipt-output.d.ts +79 -0
  19. package/dist/cjs/models/receipt-output.js +143 -0
  20. package/dist/cjs/models/receipt.d.ts +2 -2
  21. package/dist/cjs/models/receipt.js +2 -2
  22. package/dist/cjs/models/voucher.d.ts +24 -2
  23. package/dist/cjs/models/voucher.js +2 -2
  24. package/dist/cjs/partner/typen.d.ts +1 -1
  25. package/dist/cjs/pos/index.d.ts +2 -1
  26. package/dist/cjs/pos/index.js +6 -1
  27. package/dist/cjs/pos/schicht-typen.d.ts +2 -2
  28. package/dist/cjs/pos/schicht-typen.js +2 -2
  29. package/dist/cjs/pos/settings.d.ts +1 -1
  30. package/dist/cjs/pos/settings.js +5 -0
  31. package/dist/cjs/pos/texte.d.ts +187 -0
  32. package/dist/cjs/pos/texte.js +88 -0
  33. package/dist/cjs/receipt/due.d.ts +4 -2
  34. package/dist/cjs/receipt/due.js +22 -5
  35. package/dist/cjs/receipt/duplikat.d.ts +35 -0
  36. package/dist/cjs/receipt/duplikat.js +76 -0
  37. package/dist/cjs/receipt/gutschein-plan.d.ts +2 -0
  38. package/dist/cjs/receipt/gutschein-plan.js +5 -0
  39. package/dist/cjs/receipt/index.d.ts +1 -0
  40. package/dist/cjs/receipt/index.js +4 -2
  41. package/dist/cjs/receipt/layout.js +44 -21
  42. package/dist/cjs/register/pairing.d.ts +6 -2
  43. package/dist/cjs/register/pairing.js +1 -1
  44. package/dist/cjs/stored/bon-layout.js +3 -4
  45. package/dist/cjs/stored/vokabular.d.ts +1 -1
  46. package/dist/cjs/stored/vokabular.js +34 -2
  47. package/dist/cjs/version.d.ts +1 -1
  48. package/dist/cjs/version.js +1 -1
  49. package/dist/esm/client/api.d.ts +3 -1
  50. package/dist/esm/client/api.js +2 -1
  51. package/dist/esm/client/aufrufe.d.ts +5 -5
  52. package/dist/esm/client/aufrufe.js +7 -2
  53. package/dist/esm/client/index.d.ts +1 -1
  54. package/dist/esm/client/index.js +1 -1
  55. package/dist/esm/client/receipts.d.ts +85 -2
  56. package/dist/esm/client/receipts.js +164 -6
  57. package/dist/esm/enums/voucher-type.d.ts +1 -1
  58. package/dist/esm/enums/voucher-type.js +1 -1
  59. package/dist/esm/index.d.ts +2 -2
  60. package/dist/esm/index.js +2 -2
  61. package/dist/esm/invoice/typen.d.ts +1 -1
  62. package/dist/esm/models/index.d.ts +2 -1
  63. package/dist/esm/models/index.js +1 -0
  64. package/dist/esm/models/receipt-output.d.ts +79 -0
  65. package/dist/esm/models/receipt-output.js +135 -0
  66. package/dist/esm/models/receipt.d.ts +2 -2
  67. package/dist/esm/models/receipt.js +2 -2
  68. package/dist/esm/models/voucher.d.ts +24 -2
  69. package/dist/esm/models/voucher.js +2 -2
  70. package/dist/esm/partner/typen.d.ts +1 -1
  71. package/dist/esm/pos/index.d.ts +2 -1
  72. package/dist/esm/pos/index.js +3 -1
  73. package/dist/esm/pos/schicht-typen.d.ts +2 -2
  74. package/dist/esm/pos/schicht-typen.js +2 -2
  75. package/dist/esm/pos/settings.d.ts +1 -1
  76. package/dist/esm/pos/settings.js +5 -0
  77. package/dist/esm/pos/texte.d.ts +187 -0
  78. package/dist/esm/pos/texte.js +87 -0
  79. package/dist/esm/receipt/due.d.ts +4 -2
  80. package/dist/esm/receipt/due.js +23 -6
  81. package/dist/esm/receipt/duplikat.d.ts +35 -0
  82. package/dist/esm/receipt/duplikat.js +73 -0
  83. package/dist/esm/receipt/gutschein-plan.d.ts +2 -0
  84. package/dist/esm/receipt/gutschein-plan.js +4 -0
  85. package/dist/esm/receipt/index.d.ts +1 -0
  86. package/dist/esm/receipt/index.js +1 -0
  87. package/dist/esm/receipt/layout.js +44 -21
  88. package/dist/esm/register/pairing.d.ts +6 -2
  89. package/dist/esm/register/pairing.js +1 -1
  90. package/dist/esm/stored/bon-layout.js +3 -4
  91. package/dist/esm/stored/vokabular.d.ts +1 -1
  92. package/dist/esm/stored/vokabular.js +34 -2
  93. package/dist/esm/version.d.ts +1 -1
  94. package/dist/esm/version.js +1 -1
  95. package/fixtures/code-table-receipts.json +1 -1
  96. package/fixtures/duplicate-cases.json +5616 -0
  97. package/fixtures/expected/cancellation-discount.grid32.txt +1 -1
  98. package/fixtures/expected/cancellation-discount.grid48.txt +1 -1
  99. package/fixtures/expected/cancellation-discount.lines.json +1 -1
  100. package/fixtures/expected/cancellation-discount.sheet32.json +1 -1
  101. package/fixtures/expected/cancellation-discount.sheet48.json +1 -1
  102. package/fixtures/expected/cancellation-full.grid32.txt +1 -1
  103. package/fixtures/expected/cancellation-full.grid48.txt +1 -1
  104. package/fixtures/expected/cancellation-full.lines.json +1 -1
  105. package/fixtures/expected/cancellation-full.sheet32.json +1 -1
  106. package/fixtures/expected/cancellation-full.sheet48.json +1 -1
  107. package/fixtures/expected/cancellation-partial.grid32.txt +1 -1
  108. package/fixtures/expected/cancellation-partial.grid48.txt +1 -1
  109. package/fixtures/expected/cancellation-partial.lines.json +1 -1
  110. package/fixtures/expected/cancellation-partial.sheet32.json +1 -1
  111. package/fixtures/expected/cancellation-partial.sheet48.json +1 -1
  112. package/fixtures/expected/cancellation-split-full.grid32.txt +1 -1
  113. package/fixtures/expected/cancellation-split-full.grid48.txt +1 -1
  114. package/fixtures/expected/cancellation-split-full.lines.json +1 -1
  115. package/fixtures/expected/cancellation-split-full.sheet32.json +1 -1
  116. package/fixtures/expected/cancellation-split-full.sheet48.json +1 -1
  117. package/fixtures/expected/cancellation-split-partial.grid32.txt +1 -1
  118. package/fixtures/expected/cancellation-split-partial.grid48.txt +1 -1
  119. package/fixtures/expected/cancellation-split-partial.lines.json +1 -1
  120. package/fixtures/expected/cancellation-split-partial.sheet32.json +1 -1
  121. package/fixtures/expected/cancellation-split-partial.sheet48.json +1 -1
  122. package/fixtures/expected/card-custom.grid32.txt +1 -1
  123. package/fixtures/expected/card-custom.grid48.txt +1 -1
  124. package/fixtures/expected/card-custom.lines.json +1 -1
  125. package/fixtures/expected/card-custom.sheet32.json +1 -1
  126. package/fixtures/expected/card-custom.sheet48.json +1 -1
  127. package/fixtures/expected/card-gptom-ios.grid32.txt +1 -1
  128. package/fixtures/expected/card-gptom-ios.grid48.txt +1 -1
  129. package/fixtures/expected/card-gptom-ios.lines.json +1 -1
  130. package/fixtures/expected/card-gptom-ios.sheet32.json +1 -1
  131. package/fixtures/expected/card-gptom-ios.sheet48.json +1 -1
  132. package/fixtures/expected/card-gptom.grid32.txt +1 -1
  133. package/fixtures/expected/card-gptom.grid48.txt +1 -1
  134. package/fixtures/expected/card-gptom.lines.json +1 -1
  135. package/fixtures/expected/card-gptom.sheet32.json +1 -1
  136. package/fixtures/expected/card-gptom.sheet48.json +1 -1
  137. package/fixtures/expected/card-hobex-cloud.grid32.txt +1 -1
  138. package/fixtures/expected/card-hobex-cloud.grid48.txt +1 -1
  139. package/fixtures/expected/card-hobex-cloud.lines.json +1 -1
  140. package/fixtures/expected/card-hobex-cloud.sheet32.json +1 -1
  141. package/fixtures/expected/card-hobex-cloud.sheet48.json +1 -1
  142. package/fixtures/expected/card-hobex-hps.grid32.txt +1 -1
  143. package/fixtures/expected/card-hobex-hps.grid48.txt +1 -1
  144. package/fixtures/expected/card-hobex-hps.lines.json +1 -1
  145. package/fixtures/expected/card-hobex-hps.sheet32.json +1 -1
  146. package/fixtures/expected/card-hobex-hps.sheet48.json +1 -1
  147. package/fixtures/expected/card-mypos.grid32.txt +1 -1
  148. package/fixtures/expected/card-mypos.grid48.txt +1 -1
  149. package/fixtures/expected/card-mypos.lines.json +1 -1
  150. package/fixtures/expected/card-mypos.sheet32.json +1 -1
  151. package/fixtures/expected/card-mypos.sheet48.json +1 -1
  152. package/fixtures/expected/card-stripe-eps.grid32.txt +1 -1
  153. package/fixtures/expected/card-stripe-eps.grid48.txt +1 -1
  154. package/fixtures/expected/card-stripe-eps.lines.json +1 -1
  155. package/fixtures/expected/card-stripe-eps.sheet32.json +1 -1
  156. package/fixtures/expected/card-stripe-eps.sheet48.json +1 -1
  157. package/fixtures/expected/card-stripe.grid32.txt +1 -1
  158. package/fixtures/expected/card-stripe.grid48.txt +1 -1
  159. package/fixtures/expected/card-stripe.lines.json +1 -1
  160. package/fixtures/expected/card-stripe.sheet32.json +1 -1
  161. package/fixtures/expected/card-stripe.sheet48.json +1 -1
  162. package/fixtures/expected/card-sumup.grid32.txt +1 -1
  163. package/fixtures/expected/card-sumup.grid48.txt +1 -1
  164. package/fixtures/expected/card-sumup.lines.json +1 -1
  165. package/fixtures/expected/card-sumup.sheet32.json +1 -1
  166. package/fixtures/expected/card-sumup.sheet48.json +1 -1
  167. package/fixtures/expected/code-table-receipt.long-item-name.iso8859_15.hex +1 -1
  168. package/fixtures/expected/code-table-receipt.long-item-name.pc437.hex +1 -1
  169. package/fixtures/expected/code-table-receipt.long-item-name.pc850.hex +1 -1
  170. package/fixtures/expected/code-table-receipt.long-item-name.pc858.hex +1 -1
  171. package/fixtures/expected/code-table-receipt.long-item-name.replacement.hex +1 -1
  172. package/fixtures/expected/code-table-receipt.long-item-name.wpc1252.hex +1 -1
  173. package/fixtures/expected/code-table-receipt.sale-cash.iso8859_15.hex +1 -1
  174. package/fixtures/expected/code-table-receipt.sale-cash.pc437.hex +1 -1
  175. package/fixtures/expected/code-table-receipt.sale-cash.pc850.hex +1 -1
  176. package/fixtures/expected/code-table-receipt.sale-cash.pc858.hex +1 -1
  177. package/fixtures/expected/code-table-receipt.sale-cash.replacement.hex +1 -1
  178. package/fixtures/expected/code-table-receipt.sale-cash.wpc1252.hex +1 -1
  179. package/fixtures/expected/code-table-receipt.special-characters.iso8859_15.hex +1 -1
  180. package/fixtures/expected/code-table-receipt.special-characters.pc437.hex +1 -1
  181. package/fixtures/expected/code-table-receipt.special-characters.pc850.hex +1 -1
  182. package/fixtures/expected/code-table-receipt.special-characters.pc858.hex +1 -1
  183. package/fixtures/expected/code-table-receipt.special-characters.replacement.hex +1 -1
  184. package/fixtures/expected/code-table-receipt.special-characters.wpc1252.hex +1 -1
  185. package/fixtures/expected/code-table-receipt.test-cashregister-sale.iso8859_15.hex +1 -1
  186. package/fixtures/expected/code-table-receipt.test-cashregister-sale.pc437.hex +1 -1
  187. package/fixtures/expected/code-table-receipt.test-cashregister-sale.pc850.hex +1 -1
  188. package/fixtures/expected/code-table-receipt.test-cashregister-sale.pc858.hex +1 -1
  189. package/fixtures/expected/code-table-receipt.test-cashregister-sale.replacement.hex +1 -1
  190. package/fixtures/expected/code-table-receipt.test-cashregister-sale.wpc1252.hex +1 -1
  191. package/fixtures/expected/discount-lines.grid32.txt +1 -1
  192. package/fixtures/expected/discount-lines.grid48.txt +1 -1
  193. package/fixtures/expected/discount-lines.lines.json +1 -1
  194. package/fixtures/expected/discount-lines.sheet32.json +1 -1
  195. package/fixtures/expected/discount-lines.sheet48.json +1 -1
  196. package/fixtures/expected/discount-owner-tip.grid32.txt +1 -1
  197. package/fixtures/expected/discount-owner-tip.grid48.txt +1 -1
  198. package/fixtures/expected/discount-owner-tip.lines.json +1 -1
  199. package/fixtures/expected/discount-owner-tip.sheet32.json +1 -1
  200. package/fixtures/expected/discount-owner-tip.sheet48.json +1 -1
  201. package/fixtures/expected/discount-simple.grid32.txt +1 -1
  202. package/fixtures/expected/discount-simple.grid48.txt +1 -1
  203. package/fixtures/expected/discount-simple.lines.json +1 -1
  204. package/fixtures/expected/discount-simple.sheet32.json +1 -1
  205. package/fixtures/expected/discount-simple.sheet48.json +1 -1
  206. package/fixtures/expected/discount-tip.grid32.txt +1 -1
  207. package/fixtures/expected/discount-tip.grid48.txt +1 -1
  208. package/fixtures/expected/discount-tip.lines.json +1 -1
  209. package/fixtures/expected/discount-tip.sheet32.json +1 -1
  210. package/fixtures/expected/discount-tip.sheet48.json +1 -1
  211. package/fixtures/expected/discount-value-voucher.grid32.txt +1 -1
  212. package/fixtures/expected/discount-value-voucher.grid48.txt +1 -1
  213. package/fixtures/expected/discount-value-voucher.lines.json +1 -1
  214. package/fixtures/expected/discount-value-voucher.sheet32.json +1 -1
  215. package/fixtures/expected/discount-value-voucher.sheet48.json +1 -1
  216. package/fixtures/expected/duplicate.cancellation-full.hex +44 -0
  217. package/fixtures/expected/duplicate.cancellation-partial.hex +33 -0
  218. package/fixtures/expected/duplicate.sale-cash-mm58.hex +28 -0
  219. package/fixtures/expected/duplicate.sale-cash-twice.hex +35 -0
  220. package/fixtures/expected/duplicate.sale-cash.hex +35 -0
  221. package/fixtures/expected/duplicate.shift-close.hex +43 -0
  222. package/fixtures/expected/duplicate.summer-time-last-second.hex +28 -0
  223. package/fixtures/expected/duplicate.summer-time-start.hex +35 -0
  224. package/fixtures/expected/duplicate.test-cashregister-sale-logo.hex +189 -0
  225. package/fixtures/expected/duplicate.voucher-multi-purpose-redeem.hex +37 -0
  226. package/fixtures/expected/duplicate.voucher-service-redeem-logo.hex +119 -0
  227. package/fixtures/expected/duplicate.winter-time-first-second.hex +28 -0
  228. package/fixtures/expected/duplicate.zero-start.hex +40 -0
  229. package/fixtures/expected/long-item-name.grid32.txt +1 -1
  230. package/fixtures/expected/long-item-name.grid48.txt +1 -1
  231. package/fixtures/expected/long-item-name.lines.json +1 -1
  232. package/fixtures/expected/long-item-name.sheet32.json +1 -1
  233. package/fixtures/expected/long-item-name.sheet48.json +1 -1
  234. package/fixtures/expected/sale-card.grid32.txt +1 -1
  235. package/fixtures/expected/sale-card.grid48.txt +1 -1
  236. package/fixtures/expected/sale-card.lines.json +1 -1
  237. package/fixtures/expected/sale-card.sheet32.json +1 -1
  238. package/fixtures/expected/sale-card.sheet48.json +1 -1
  239. package/fixtures/expected/sale-cash.grid32.txt +1 -1
  240. package/fixtures/expected/sale-cash.grid48.txt +1 -1
  241. package/fixtures/expected/sale-cash.lines.json +1 -1
  242. package/fixtures/expected/sale-cash.sheet32.json +1 -1
  243. package/fixtures/expected/sale-cash.sheet48.json +1 -1
  244. package/fixtures/expected/sale-small-business.grid32.txt +1 -1
  245. package/fixtures/expected/sale-small-business.grid48.txt +1 -1
  246. package/fixtures/expected/sale-small-business.lines.json +1 -1
  247. package/fixtures/expected/sale-small-business.sheet32.json +1 -1
  248. package/fixtures/expected/sale-small-business.sheet48.json +1 -1
  249. package/fixtures/expected/signature-outage-sale.grid32.txt +1 -1
  250. package/fixtures/expected/signature-outage-sale.grid48.txt +1 -1
  251. package/fixtures/expected/signature-outage-sale.lines.json +1 -1
  252. package/fixtures/expected/signature-outage-sale.sheet32.json +1 -1
  253. package/fixtures/expected/signature-outage-sale.sheet48.json +1 -1
  254. package/fixtures/expected/split-card-card-cash.grid32.txt +1 -1
  255. package/fixtures/expected/split-card-card-cash.grid48.txt +1 -1
  256. package/fixtures/expected/split-card-card-cash.lines.json +1 -1
  257. package/fixtures/expected/split-card-card-cash.sheet32.json +1 -1
  258. package/fixtures/expected/split-card-card-cash.sheet48.json +1 -1
  259. package/fixtures/expected/split-cash-change.grid32.txt +1 -1
  260. package/fixtures/expected/split-cash-change.grid48.txt +1 -1
  261. package/fixtures/expected/split-cash-change.lines.json +1 -1
  262. package/fixtures/expected/split-cash-change.sheet32.json +1 -1
  263. package/fixtures/expected/split-cash-change.sheet48.json +1 -1
  264. package/fixtures/expected/split-long-amount.grid32.txt +1 -1
  265. package/fixtures/expected/split-long-amount.grid48.txt +1 -1
  266. package/fixtures/expected/split-long-amount.lines.json +1 -1
  267. package/fixtures/expected/split-long-amount.sheet32.json +1 -1
  268. package/fixtures/expected/split-long-amount.sheet48.json +1 -1
  269. package/fixtures/expected/split-one-card-tip.grid32.txt +1 -1
  270. package/fixtures/expected/split-one-card-tip.grid48.txt +1 -1
  271. package/fixtures/expected/split-one-card-tip.lines.json +1 -1
  272. package/fixtures/expected/split-one-card-tip.sheet32.json +1 -1
  273. package/fixtures/expected/split-one-card-tip.sheet48.json +1 -1
  274. package/fixtures/expected/split-table-round-tip.grid32.txt +1 -1
  275. package/fixtures/expected/split-table-round-tip.grid48.txt +1 -1
  276. package/fixtures/expected/split-table-round-tip.lines.json +1 -1
  277. package/fixtures/expected/split-table-round-tip.sheet32.json +1 -1
  278. package/fixtures/expected/split-table-round-tip.sheet48.json +1 -1
  279. package/fixtures/expected/split-tip-card.grid32.txt +1 -1
  280. package/fixtures/expected/split-tip-card.grid48.txt +1 -1
  281. package/fixtures/expected/split-tip-card.lines.json +1 -1
  282. package/fixtures/expected/split-tip-card.sheet32.json +1 -1
  283. package/fixtures/expected/split-tip-card.sheet48.json +1 -1
  284. package/fixtures/expected/split-two-cards-same-provider.grid32.txt +1 -1
  285. package/fixtures/expected/split-two-cards-same-provider.grid48.txt +1 -1
  286. package/fixtures/expected/split-two-cards-same-provider.lines.json +1 -1
  287. package/fixtures/expected/split-two-cards-same-provider.sheet32.json +1 -1
  288. package/fixtures/expected/split-two-cards-same-provider.sheet48.json +1 -1
  289. package/fixtures/expected/test-cashregister-sale.grid32.txt +1 -1
  290. package/fixtures/expected/test-cashregister-sale.grid48.txt +1 -1
  291. package/fixtures/expected/test-cashregister-sale.lines.json +1 -1
  292. package/fixtures/expected/test-cashregister-sale.sheet32.json +1 -1
  293. package/fixtures/expected/test-cashregister-sale.sheet48.json +1 -1
  294. package/fixtures/expected/test-signature-sale.grid32.txt +1 -1
  295. package/fixtures/expected/test-signature-sale.grid48.txt +1 -1
  296. package/fixtures/expected/test-signature-sale.lines.json +1 -1
  297. package/fixtures/expected/test-signature-sale.sheet32.json +1 -1
  298. package/fixtures/expected/test-signature-sale.sheet48.json +1 -1
  299. package/fixtures/expected/training.grid32.txt +1 -1
  300. package/fixtures/expected/training.grid48.txt +1 -1
  301. package/fixtures/expected/training.lines.json +1 -1
  302. package/fixtures/expected/training.sheet32.json +1 -1
  303. package/fixtures/expected/training.sheet48.json +1 -1
  304. package/fixtures/expected/voucher-multi-purpose-sale.grid32.txt +1 -2
  305. package/fixtures/expected/voucher-multi-purpose-sale.grid48.txt +1 -1
  306. package/fixtures/expected/voucher-multi-purpose-sale.lines.json +1 -1
  307. package/fixtures/expected/voucher-multi-purpose-sale.sheet32.json +1 -7
  308. package/fixtures/expected/voucher-multi-purpose-sale.sheet48.json +1 -1
  309. package/fixtures/expected/voucher-single-purpose-redeem-exempt.grid32.txt +1 -1
  310. package/fixtures/expected/voucher-single-purpose-redeem-exempt.grid48.txt +1 -1
  311. package/fixtures/expected/voucher-single-purpose-redeem-exempt.lines.json +1 -1
  312. package/fixtures/expected/voucher-single-purpose-redeem-exempt.sheet32.json +1 -1
  313. package/fixtures/expected/voucher-single-purpose-redeem-exempt.sheet48.json +1 -1
  314. package/fixtures/expected/voucher-single-purpose-redeem.grid32.txt +1 -1
  315. package/fixtures/expected/voucher-single-purpose-redeem.grid48.txt +1 -1
  316. package/fixtures/expected/voucher-single-purpose-redeem.lines.json +1 -1
  317. package/fixtures/expected/voucher-single-purpose-redeem.sheet32.json +1 -1
  318. package/fixtures/expected/voucher-single-purpose-redeem.sheet48.json +1 -1
  319. package/fixtures/expected/voucher-single-purpose-sale.grid32.txt +2 -3
  320. package/fixtures/expected/voucher-single-purpose-sale.grid48.txt +2 -2
  321. package/fixtures/expected/voucher-single-purpose-sale.lines.json +2 -2
  322. package/fixtures/expected/voucher-single-purpose-sale.sheet32.json +2 -8
  323. package/fixtures/expected/voucher-single-purpose-sale.sheet48.json +2 -2
  324. package/fixtures/expected/zero-annual.grid32.txt +1 -1
  325. package/fixtures/expected/zero-annual.grid48.txt +1 -1
  326. package/fixtures/expected/zero-annual.lines.json +1 -1
  327. package/fixtures/expected/zero-annual.sheet32.json +1 -1
  328. package/fixtures/expected/zero-annual.sheet48.json +1 -1
  329. package/fixtures/expected/zero-final.grid32.txt +1 -1
  330. package/fixtures/expected/zero-final.grid48.txt +1 -1
  331. package/fixtures/expected/zero-final.lines.json +1 -1
  332. package/fixtures/expected/zero-final.sheet32.json +1 -1
  333. package/fixtures/expected/zero-final.sheet48.json +1 -1
  334. package/fixtures/expected/zero-manual.grid32.txt +1 -1
  335. package/fixtures/expected/zero-manual.grid48.txt +1 -1
  336. package/fixtures/expected/zero-manual.lines.json +1 -1
  337. package/fixtures/expected/zero-manual.sheet32.json +1 -1
  338. package/fixtures/expected/zero-manual.sheet48.json +1 -1
  339. package/fixtures/expected/zero-monthly.grid32.txt +1 -1
  340. package/fixtures/expected/zero-monthly.grid48.txt +1 -1
  341. package/fixtures/expected/zero-monthly.lines.json +1 -1
  342. package/fixtures/expected/zero-monthly.sheet32.json +1 -1
  343. package/fixtures/expected/zero-monthly.sheet48.json +1 -1
  344. package/fixtures/expected/zero-outage-end.grid32.txt +1 -1
  345. package/fixtures/expected/zero-outage-end.grid48.txt +1 -1
  346. package/fixtures/expected/zero-outage-end.lines.json +1 -1
  347. package/fixtures/expected/zero-outage-end.sheet32.json +1 -1
  348. package/fixtures/expected/zero-outage-end.sheet48.json +1 -1
  349. package/fixtures/expected/zero-start.grid32.txt +1 -1
  350. package/fixtures/expected/zero-start.grid48.txt +1 -1
  351. package/fixtures/expected/zero-start.lines.json +1 -1
  352. package/fixtures/expected/zero-start.sheet32.json +1 -1
  353. package/fixtures/expected/zero-start.sheet48.json +1 -1
  354. package/fixtures/hobex-hps-codes.json +1 -1
  355. package/fixtures/invoice-api.schema.json +1 -1
  356. package/fixtures/invoice-texts.json +1 -1
  357. package/fixtures/manifest.json +260 -260
  358. package/fixtures/pos-texts.json +205 -1
  359. package/fixtures/receipt-due-voucher-generated.json +1 -1
  360. package/fixtures/receipt-outputs-cases.json +2778 -0
  361. package/fixtures/receipts/cancellation-discount.json +1 -1
  362. package/fixtures/receipts/cancellation-full.json +1 -1
  363. package/fixtures/receipts/cancellation-partial.json +1 -1
  364. package/fixtures/receipts/cancellation-split-full.json +1 -1
  365. package/fixtures/receipts/cancellation-split-partial.json +1 -1
  366. package/fixtures/receipts/card-custom.json +1 -1
  367. package/fixtures/receipts/card-gptom-ios.json +1 -1
  368. package/fixtures/receipts/card-gptom.json +1 -1
  369. package/fixtures/receipts/card-hobex-cloud.json +1 -1
  370. package/fixtures/receipts/card-hobex-hps.json +1 -1
  371. package/fixtures/receipts/card-mypos.json +1 -1
  372. package/fixtures/receipts/card-stripe-eps.json +1 -1
  373. package/fixtures/receipts/card-stripe.json +1 -1
  374. package/fixtures/receipts/card-sumup.json +1 -1
  375. package/fixtures/receipts/discount-lines.json +1 -1
  376. package/fixtures/receipts/discount-owner-tip.json +1 -1
  377. package/fixtures/receipts/discount-simple.json +1 -1
  378. package/fixtures/receipts/discount-tip.json +1 -1
  379. package/fixtures/receipts/discount-value-voucher.json +1 -1
  380. package/fixtures/receipts/long-item-name.json +1 -1
  381. package/fixtures/receipts/sale-card.json +1 -1
  382. package/fixtures/receipts/sale-cash.json +1 -1
  383. package/fixtures/receipts/sale-small-business.json +1 -1
  384. package/fixtures/receipts/signature-outage-sale.json +1 -1
  385. package/fixtures/receipts/split-card-card-cash.json +1 -1
  386. package/fixtures/receipts/split-cash-change.json +1 -1
  387. package/fixtures/receipts/split-long-amount.json +1 -1
  388. package/fixtures/receipts/split-one-card-tip.json +1 -1
  389. package/fixtures/receipts/split-table-round-tip.json +1 -1
  390. package/fixtures/receipts/split-tip-card.json +1 -1
  391. package/fixtures/receipts/split-two-cards-same-provider.json +1 -1
  392. package/fixtures/receipts/test-cashregister-sale.json +1 -1
  393. package/fixtures/receipts/test-signature-sale.json +1 -1
  394. package/fixtures/receipts/training.json +1 -1
  395. package/fixtures/receipts/zero-annual.json +1 -1
  396. package/fixtures/receipts/zero-final.json +1 -1
  397. package/fixtures/receipts/zero-manual.json +1 -1
  398. package/fixtures/receipts/zero-monthly.json +1 -1
  399. package/fixtures/receipts/zero-outage-end.json +1 -1
  400. package/fixtures/receipts/zero-start.json +1 -1
  401. package/fixtures/surface.json +25 -5
  402. package/fixtures/v3/README.md +10 -3
  403. package/fixtures/v3/antworten/belege.json +623 -125
  404. package/fixtures/v3/antworten/belegmail.json +2 -2
  405. package/fixtures/v3/antworten/kasse-belege.json +622 -122
  406. package/fixtures/v3/antworten/kasse.json +407 -31
  407. package/fixtures/v3/antworten/lager.json +1 -1
  408. package/fixtures/v3/antworten/rechnungen.json +4 -4
  409. package/fixtures/v3/antworten/storno.json +211 -3
  410. package/fixtures/v3/stored/belege.json +2 -2
  411. package/fixtures/v3/stored/kasse.json +114 -4
  412. package/fixtures/v3/stored/rechnungen.json +17 -17
  413. package/fixtures/v3/v3-vokabular.json +224 -19
  414. package/fixtures/v3/zahlbetrag-faelle.json +1070 -4
  415. package/package.json +3 -1
  416. package/dist/cjs/stored/gutscheine.d.ts +0 -3
  417. package/dist/cjs/stored/gutscheine.js +0 -60
  418. package/dist/esm/stored/gutscheine.d.ts +0 -3
  419. package/dist/esm/stored/gutscheine.js +0 -56
@@ -1,8 +1,10 @@
1
1
  import { ReceiptType, KeckPaymentMethod, CreditCardProvider, VoucherAction, VoucherType, } from '../enums/index.js';
2
2
  import { fromReceiptCompanyPayload, fromReceiptPayload, toReceiptItemPayload, toVoucherPayload, receiptItemIsValid, voucherIsValid, isNewFormVoucher, voucherServerFields, fromReceiptSummaryPayload, isCancellationReason, isReturnDisposition, RETURN_DISPOSITIONS, isTipRefundSource, TIP_REFUND_SOURCES, RECEIPT_EMAIL_VIAS, readRegistrationInfo, } from '../models/index.js';
3
+ import { RECEIPT_OUTPUT_ENTRIES_MAX, RECEIPT_OUTPUT_KINDS, RECEIPT_OUTPUT_RESULTS, receiptOutputsFromWire, } from '../models/receipt-output.js';
4
+ import { VoucherCode } from '@kreiseck/validator';
3
5
  import { parseServerTimeStamp, toViennaWallClock } from '../vienna-time.js';
4
6
  import { euroToCents } from '../money.js';
5
- import { KasseneckValidationError, isKasseneckApiError, signiertGelesen } from './errors.js';
7
+ import { KasseneckApiError, KasseneckValidationError, isKasseneckApiError, signiertGelesen } from './errors.js';
6
8
  import { buildReceiptLayout } from '../receipt/layout.js';
7
9
  /**
8
10
  * Das Zeilenmodell zum Drucken und Anzeigen eines Belegs aus einer Antwort.
@@ -38,14 +40,44 @@ export function receiptLayoutFromResult(result, options = {}) {
38
40
  * die Hand des Aufrufers, sondern zu einem der benannten Aufrufe darunter.
39
41
  */
40
42
  export async function createReceipt(rufen, options) {
41
- const daten = await rufen('createReceipt', createReceiptParams(options));
43
+ const daten = await createReceiptRufen(rufen, options);
42
44
  return signiertGelesen('createReceipt', () => belegAusHuelle(daten, 'createReceipt'));
43
45
  }
44
46
  /** Wie [createReceipt], liest aus derselben Antwort zusaetzlich die Firmendaten. */
45
47
  async function createReceiptWithCompany(rufen, options) {
46
- const daten = await rufen('createReceipt', createReceiptParams(options));
48
+ const daten = await createReceiptRufen(rufen, options);
47
49
  return signiertGelesen('createReceipt', () => belegMitFirmaAusHuelle(daten, 'createReceipt'));
48
50
  }
51
+ /**
52
+ * Sendet `createReceipt`; die Gutschein-Codes der Nutzlast gelten als Geheimnis
53
+ * (normiert und formatiert): der Transport siebt Ursachen und Details, ein
54
+ * Servertext, der den Code wiederholt, wird hier geschwaerzt.
55
+ */
56
+ async function createReceiptRufen(rufen, options) {
57
+ // Der Code geht so hinaus, wie er getippt wurde: die getippte Schreibweise (auch ungueltig,
58
+ // etwa mit falscher Pruefziffer) zaehlt ebenso als Geheimnis wie normiert und formatiert.
59
+ // Kurze Reste (Endung mit vier Zeichen) werden nie eingetragen.
60
+ const geheim = [...new Set((options.vouchers ?? []).flatMap((v) => {
61
+ if (typeof v.code !== 'string')
62
+ return [];
63
+ const roh = v.code.trim();
64
+ const geprueft = VoucherCode.validate(v.code);
65
+ const liste = geprueft.ok ? [geprueft.normalized, VoucherCode.format(geprueft.normalized)] : [];
66
+ if (roh.length >= 8)
67
+ liste.push(roh);
68
+ return liste;
69
+ }))].sort((a, b) => b.length - a.length);
70
+ try {
71
+ return await rufen('createReceipt', createReceiptParams(options), undefined, geheim);
72
+ }
73
+ catch (fehler) {
74
+ if (fehler instanceof KasseneckApiError && geheim.some((g) => fehler.serverMessage.includes(g))) {
75
+ const text = geheim.reduce((t, g) => t.split(g).join('****'), fehler.serverMessage);
76
+ throw new KasseneckApiError('createReceipt', text, fehler.details, fehler.code);
77
+ }
78
+ throw fehler;
79
+ }
80
+ }
49
81
  /**
50
82
  * Baut die Nutzlast von `createReceipt` und prueft die Eingabe. Wirft, bevor
51
83
  * irgendetwas rausgeht — ein Beleg ist nicht folgenlos wiederholbar.
@@ -171,6 +203,24 @@ function pruefeRueckgabeWahl(wert, pfad) {
171
203
  throw new KasseneckValidationError('cancelReceipt', `${pfad}: erlaubt sind ${RETURN_DISPOSITIONS.join(', ')}`, 'request');
172
204
  }
173
205
  }
206
+ /**
207
+ * Storno einer Gutschein-Auszahlung: genau eine positive Barzahlung ohne `refundOf`
208
+ * (das Geld kommt in die Lade zurueck). Alles andere bleibt Rueckzahlung mit negativem Betrag;
209
+ * ob der Beleg eine Auszahlung war, entscheidet der Server.
210
+ */
211
+ function istStornoAuszahlung(payments, original) {
212
+ if (!Array.isArray(payments) || payments.length !== 1)
213
+ return false;
214
+ // Kennt der Aufrufer das Original und es hat keine Auszahlung, bleibt es bei negativen Rueckzahlungen.
215
+ if (original != null && !(original.vouchers ?? []).some((v) => v.action === VoucherAction.payout))
216
+ return false;
217
+ const z = payments[0];
218
+ if (z == null || typeof z !== 'object')
219
+ return false;
220
+ const m = z['method'];
221
+ const art = typeof m === 'object' && m !== null ? m.value : m;
222
+ return art === 'cash' && typeof z['amountCents'] === 'number' && z['amountCents'] > 0 && z['refundOf'] === undefined;
223
+ }
174
224
  /**
175
225
  * Storno-Beleg zu einem bestehenden Beleg — voll oder in Teilen. Prueft die
176
226
  * Eingabe, bevor etwas hinausgeht; der Server haelt die Restmengen und die
@@ -218,7 +268,7 @@ export async function cancelReceipt(transport, options) {
218
268
  throw new KasseneckValidationError('cancelReceipt', `${altfeld} gibt es unter /v3 nicht mehr: Rueckzahlungen gehen als payments hinaus.`, 'request');
219
269
  }
220
270
  // `payments: null` gilt wie im Backend als nicht angegeben.
221
- const zahlungen = options.payments != null ? gepruefteZahlungen(options.payments, true, 'cancelReceipt') : undefined;
271
+ const zahlungen = options.payments != null ? gepruefteZahlungen(options.payments, true, 'cancelReceipt', false, istStornoAuszahlung(options.payments, options.receipt)) : undefined;
222
272
  if (zahlungen !== undefined)
223
273
  pruefeKartenRueckbuchung(zahlungen, options.receipt);
224
274
  const params = { cashregisterId, originalReceiptId, reason: options.reason };
@@ -450,6 +500,111 @@ export async function sendReceiptEmail(transport, options) {
450
500
  via,
451
501
  };
452
502
  }
503
+ const AUSGABEN_FELDER = ['entries'];
504
+ const AUSGABE_FELDER = ['key', 'receiptId', 'kind', 'at', 'result'];
505
+ /** Idempotenzschluessel eines Eintrags, wie der Server ihn annimmt. */
506
+ const AUSGABE_SCHLUESSEL = /^[A-Za-z0-9_-]{8,64}$/;
507
+ /** Zeitpunkt als Text: RFC 3339 mit Zone, bis zu sechs Nachkommastellen (wie der Server). */
508
+ const AUSGABE_ZEIT = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6})?(Z|[+-]\d{2}:\d{2})$/;
509
+ /**
510
+ * Meldet Drucke und das Teilen eines Belegs an das Protokoll „Ausgaben“
511
+ * (Endpunkt `logReceiptOutputs`, nur ueber den Kassenweg `/api/v3`; mit
512
+ * `registerUserAuth` und mit `apiKeyAuth`). Registrierkassen-Erlass
513
+ * BMF-AV Nr. 2/2026, Abschnitt 4.2: die Belegerteilung ist zu dokumentieren.
514
+ * Der Beleg selbst bleibt unberuehrt; das Protokoll steht nie im DEP.
515
+ *
516
+ * **Ein Eintrag scheitert nie die anderen.** Der Server nimmt jeden Eintrag
517
+ * einzeln an oder lehnt ihn mit Code ab (`rejected`, Codes
518
+ * [RECEIPT_OUTPUT_ENTRY_ERROR_CODES]); nach einer Erfolgsantwort ist jeder
519
+ * gesendete Eintrag erledigt. Die Kasse puffert die Eintraege (offline,
520
+ * Neustart) und sendet sie spaeter; der Puffer blockiert nie Druck oder Teilen.
521
+ *
522
+ * **Wiederholen ist gefahrlos:** jeder Eintrag traegt seinen Schluessel. Bei
523
+ * unklarem Ausgang (`outcome: 'unknown'`) dieselben Eintraege mit denselben
524
+ * Schluesseln noch einmal senden.
525
+ *
526
+ * **Vor dem Senden abgewiesen** wird nur, was die ganze Anfrage scheitern
527
+ * liesse oder ohne Netz sicher falsch ist: keine oder mehr als 50 Eintraege,
528
+ * ein unbekanntes Feld (oben oder im Eintrag), ein fehlender Beleg, ein
529
+ * Schluessel ausserhalb der Regel des Servers, eine Art oder ein Ergebnis
530
+ * ausserhalb des Katalogs, eine Zeit, die weder ganze Millisekunden noch
531
+ * ISO 8601 mit Zone ist. `email` und `opened` gehen hinaus und kommen als
532
+ * `invalid_output_kind` zurueck: so verwirft der Puffer genau diesen Eintrag.
533
+ * Fehler der ganzen Anfrage: [RECEIPT_OUTPUT_ERROR_CODES].
534
+ */
535
+ export async function logReceiptOutputs(transport, options) {
536
+ const name = 'logReceiptOutputs';
537
+ const anfrage = (grund) => new KasseneckValidationError(name, grund, 'request');
538
+ if (options === null || typeof options !== 'object' || Array.isArray(options))
539
+ throw anfrage('Anfrage muss ein Objekt sein');
540
+ // Ein unbekanntes Feld (etwa eine zweite cashregisterId) ginge sonst still verloren.
541
+ const fremd = Object.keys(options).find((k) => !AUSGABEN_FELDER.includes(k));
542
+ if (fremd != null)
543
+ throw anfrage(`unbekanntes Feld "${fremd}"`);
544
+ const roh = options.entries;
545
+ if (!Array.isArray(roh) || roh.length === 0 || roh.length > RECEIPT_OUTPUT_ENTRIES_MAX) {
546
+ throw anfrage(`entries muss 1–${RECEIPT_OUTPUT_ENTRIES_MAX} Eintraege haben`);
547
+ }
548
+ const entries = roh.map((e, i) => {
549
+ const wo = `entries[${i}]`;
550
+ if (e === null || typeof e !== 'object' || Array.isArray(e))
551
+ throw anfrage(`${wo} muss ein Objekt sein`);
552
+ const eintrag = {};
553
+ for (const [feld, w] of Object.entries(e)) {
554
+ if (!AUSGABE_FELDER.includes(feld))
555
+ throw anfrage(`${wo}: unbekanntes Feld "${feld}"`);
556
+ if (w !== undefined)
557
+ eintrag[feld] = w;
558
+ }
559
+ // Schluessel und Beleg nie getrimmt: ein veraenderter Schluessel waere ein anderer.
560
+ for (const feld of ['key', 'receiptId']) {
561
+ const w = eintrag[feld];
562
+ if (typeof w !== 'string' || w.trim() === '')
563
+ throw anfrage(`${wo}.${feld} fehlt`);
564
+ }
565
+ // Dieselbe Regel wie der Server: so traegt jede Antwort (`rejected[].key`)
566
+ // genau den Schluessel, unter dem die Kasse den Eintrag puffert.
567
+ if (!AUSGABE_SCHLUESSEL.test(eintrag.key))
568
+ throw anfrage(`${wo}.key muss 8–64 Zeichen [A-Za-z0-9_-] haben`);
569
+ // Ein Wert ausserhalb des Katalogs liesse den Rand die ganze Anfrage abweisen.
570
+ if (!RECEIPT_OUTPUT_KINDS.includes(eintrag.kind)) {
571
+ throw anfrage(`${wo}.kind muss ${RECEIPT_OUTPUT_KINDS.join(', ')} sein`);
572
+ }
573
+ if (eintrag.result !== undefined && !RECEIPT_OUTPUT_RESULTS.includes(eintrag.result)) {
574
+ throw anfrage(`${wo}.result muss ${RECEIPT_OUTPUT_RESULTS.join(', ')} sein`);
575
+ }
576
+ const at = eintrag.at;
577
+ // Text nur als ISO 8601 mit Zone (Regel des Servers): ohne Zone waere die
578
+ // Zeit je nach Geraet eine andere; das ist ein Fehler der Kasse, kein Fall
579
+ // fuer den Puffer.
580
+ const zeitOk = (typeof at === 'number' && Number.isSafeInteger(at) && at >= 0) || (typeof at === 'string' && AUSGABE_ZEIT.test(at));
581
+ if (!zeitOk)
582
+ throw anfrage(`${wo}.at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein`);
583
+ return eintrag;
584
+ });
585
+ return ausgabenGemeldet(name, await transport(name, { entries }));
586
+ }
587
+ /** Antwort von `logReceiptOutputs`, streng: `accepted` ganze Zahl ab 0, `rejected` Liste aus Schluessel und Code. */
588
+ function ausgabenGemeldet(name, daten) {
589
+ if (daten === null || typeof daten !== 'object' || Array.isArray(daten))
590
+ throw antwortfehler(name, 'Antwort ist kein Objekt');
591
+ const { accepted, rejected } = daten;
592
+ if (typeof accepted !== 'number' || !Number.isSafeInteger(accepted) || accepted < 0) {
593
+ throw antwortfehler(name, 'Antwort enthaelt keine Zahl accepted');
594
+ }
595
+ if (!Array.isArray(rejected))
596
+ throw antwortfehler(name, 'Antwort enthaelt keine Liste rejected');
597
+ return {
598
+ accepted,
599
+ rejected: rejected.map((r, i) => {
600
+ const { key, code } = (r ?? {});
601
+ if (typeof key !== 'string' || typeof code !== 'string' || code === '') {
602
+ throw antwortfehler(name, `rejected[${i}] ohne Schluessel oder Code`);
603
+ }
604
+ return { key, code };
605
+ }),
606
+ };
607
+ }
453
608
  /**
454
609
  * Prueft die Gutschein-Kombination eines Belegs und liefert den ersten
455
610
  * Regelverstoss als Text (oder `null`) — Zwilling von
@@ -643,14 +798,15 @@ const MAX_ZAHLUNGEN = 20;
643
798
  * (Summe, Anbieter-Pflicht und Trinkgeld prueft der Server). Wirft, bevor
644
799
  * etwas hinausgeht.
645
800
  */
646
- function gepruefteZahlungen(roh, storno, functionName, auszahlung = false) {
801
+ function gepruefteZahlungen(roh, storno, functionName, auszahlung = false, stornoAuszahlung = false) {
647
802
  const fehler = (grund) => new KasseneckValidationError(functionName, grund, 'request');
648
803
  if (!Array.isArray(roh))
649
804
  throw fehler('payments muss eine Liste sein.');
650
805
  if (roh.length > MAX_ZAHLUNGEN)
651
806
  throw fehler(`payments: es sind hoechstens ${MAX_ZAHLUNGEN} Eintraege erlaubt.`);
652
807
  // Auszahlung eines Gutscheins: der Betrag geht bar hinaus, ohne gegeben und ohne Trinkgeld (Server pruefeZahlungen).
653
- const negativ = storno || auszahlung;
808
+ // Storno einer Auszahlung: der Kunde gibt das Geld zurueck, die eine Barzahlung ist positiv (zahlungen-core stornoAuszahlung).
809
+ const negativ = (storno && !stornoAuszahlung) || auszahlung;
654
810
  if (auszahlung) {
655
811
  const e = roh[0];
656
812
  if (roh.length !== 1)
@@ -823,6 +979,7 @@ export function belegAusHuelle(daten, functionName) {
823
979
  export function belegMitFirmaAusHuelle(daten, functionName) {
824
980
  const receipt = belegAusHuelle(daten, functionName);
825
981
  const d = (daten ?? {});
982
+ const outputs = receiptOutputsFromWire(d.outputs);
826
983
  const layout = d.layout && typeof d.layout === 'object' && Array.isArray(d.layout.lines) ? d.layout : null;
827
984
  const angaben = d.registrationInfo && typeof d.registrationInfo === 'object' ? readRegistrationInfo(d.registrationInfo) : null;
828
985
  return {
@@ -834,6 +991,7 @@ export function belegMitFirmaAusHuelle(daten, functionName) {
834
991
  layout,
835
992
  registrationInfo: angaben,
836
993
  logoScale: d.logo_scale === 'S' || d.logo_scale === 'M' || d.logo_scale === 'L' || d.logo_scale === 'XL' ? d.logo_scale : 'M',
994
+ ...(outputs !== undefined ? { outputs } : {}),
837
995
  };
838
996
  }
839
997
  /**
@@ -4,7 +4,7 @@
4
4
  export declare const VoucherType: {
5
5
  /** Altform: Wertgutschein (Wert im Cent, Code frei). */
6
6
  readonly value: "value";
7
- /** Altform: Rabatt-/Promotionsgutschein. */
7
+ /** Altform: Rabatt-/Aktionsgutschein. */
8
8
  readonly promo: "promo";
9
9
  /** Neue Form: Mehrzweckgutschein (Zahlungsmittel, Steuer erst bei der Einloesung). */
10
10
  readonly multi_purpose: "multi_purpose";
@@ -4,7 +4,7 @@
4
4
  export const VoucherType = {
5
5
  /** Altform: Wertgutschein (Wert im Cent, Code frei). */
6
6
  value: 'value',
7
- /** Altform: Rabatt-/Promotionsgutschein. */
7
+ /** Altform: Rabatt-/Aktionsgutschein. */
8
8
  promo: 'promo',
9
9
  /** Neue Form: Mehrzweckgutschein (Zahlungsmittel, Steuer erst bei der Einloesung). */
10
10
  multi_purpose: 'multi_purpose',
@@ -1,6 +1,6 @@
1
1
  export { ReceiptType, type ReceiptTypeKey, VatRate, type VatRateKey, KeckPaymentMethod, type KeckPaymentMethodKey, CreditCardProvider, type CreditCardProviderKey, VoucherType, type VoucherTypeKey, VoucherAction, type VoucherActionKey, StripeLinkMode, type StripeLinkModeKey, } from './enums/index.js';
2
- export { type ReceiptItem, type ReceiptItemPayload, type ReceiptItemPayloadRead, toReceiptItemPayload, fromReceiptItemPayload, receiptItemTotalCents, receiptItemIsValid, negateReceiptItem, type TipRecipient, isTipItem, isVoucherItem, isVoucherFloatItem, type Voucher, type VoucherArticle, type VoucherPayload, toVoucherPayload, fromVoucherPayload, voucherIsValid, type Receipt, type RegistrationInfo, type ReceiptPayload, type ReceiptPayloadRead, toReceiptPayload, fromReceiptPayload, receiptSubSumCents, receiptSumCents, receiptValueVoucherSign, type CancellationOf, type CancellationItem, type Cancellation, type CancellationReason, type CancellationErrorCode, type CancellationStatus, type ReturnDisposition, RETURN_DISPOSITIONS, CANCELLATION_REASONS, CANCELLATION_STATUSES, CANCELLATION_ERROR_CODES, CANCELLATION_RESERVATION_MS, isCancellationReason, isReturnDisposition, isCancellationErrorCode, cancellationErrorCode, isCancellationError, cancellationFieldErrors, type CancellationFieldError, type ReceiptPayment, type ReceiptPaymentPayload, type ReceiptPaymentInput, fromReceiptPaymentPayload, toReceiptPaymentPayload, type PaymentErrorCode, PAYMENT_ERROR_CODES, isPaymentErrorCode, paymentErrorCode, isPaymentError, paymentFieldErrors, type PaymentFieldError, type ReceiptEmailErrorCode, type ReceiptEmailVia, RECEIPT_EMAIL_ERROR_CODES, RECEIPT_EMAIL_SEND_ERROR_CODES, type ReceiptEmailSendErrorCode, RECEIPT_EMAIL_VIAS, isReceiptEmailErrorCode, receiptEmailErrorCode, isReceiptEmailError, receiptEmailFieldErrors, type ReceiptEmailFieldError, type ReceiptErrorCode, type ReceiptFieldError, RECEIPT_ERROR_CODES, isReceiptErrorCode, receiptErrorCode, isReceiptError, receiptFieldErrors, remainingQuantities, TIP_REFUND_SOURCES, type TipRefundSource, isTipRefundSource, openStaffTipCents, cancellationItemsForTip, cancellationCashRefundCents, asksTipRefundSource, asksRefundTip, type ReceiptCompany, type ReceiptCompanyPayload, fromReceiptCompanyPayload, receiptCompanyTaxInfo, type Cashregister, type CashregisterOnboarding, type CashregisterPayload, type CashregisterOnboardingPayload, type CashregisterAutoLogout, type CashregisterAutoLogoutPayload, fromCashregisterPayload, type ReceiptSummary, type ReceiptSummaryPayload, fromReceiptSummaryPayload, type ZeroKind, ZERO_KINDS, isZeroKind, type ReportMonth, reportMonthFromDate, previousReportMonth, nextReportMonth, reportMonthKey, reportMonthReadable, type StripeUrlSession, type StripeUrlSessionPayload, toStripeUrlSessionPayload, fromStripeUrlSessionPayload, type HobexReceipt, type HobexReceiptPayload, toHobexReceiptPayload, fromHobexReceiptPayload, hobexReceiptToCardPaymentData, hobexReceiptNeedsSignature, } from './models/index.js';
3
- export { type AuthCredentials, type KasseneckAuth, type ApiKeyAuthOptions, type RegisterUserAuthOptions, apiKeyAuth, registerUserAuth, DEFAULT_BASE_URL, POS_BASE_URL, DEFAULT_TIMEOUT_MS, type HttpResponseLike, type HttpRequestInit, type FetchLike, type TransportOptions, type TransportBodyFields, type TransportCallOptions, type KasseneckTransport, type KasseneckBinaryTransport, type KasseneckPdfOrDataTransport, type PdfOrData, ALL_CALLS, type ApiCall, PUBLIC_CALLS, POS_CALLS, UNKNOWN_OUTCOME_CALLS, type PublicCall, type PosCall, createTransport, createBinaryTransport, createPdfOrDataTransport, KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNetworkError, KasseneckValidationError, type ValidationScope, type KasseneckError, type HttpFailureReason, type CauseDigest, type ErrorOutcome, CLIENT_ERROR_CODES, type ClientErrorCode, isKasseneckApiError, isKasseneckAuthError, isKasseneckHttpError, isKasseneckNetworkError, isKasseneckValidationError, isOutcomeUnknown, type ReceiptCommonOptions, type SellReceiptOptions, type TipOptions, type TipRecipientShare, type CancelReceiptOptions, type CancelReceiptResult, type ReceiptWithCompany, sellReceipt, sellReceiptWithCompany, paymentsExpectedCents, cardRefundReference, receiptLayoutFromResult, cancelReceipt, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, type ListMyReceiptsOptions, type ReceiptList, type ReceiptListStats, listMyCashregisters, checkVoucherCombinationError, type SendReceiptEmailOptions, type SendReceiptEmailResult, sendReceiptEmail, downloadDailyReport, downloadMonthlyReport, getCashregisterReport, type CashregisterReportPeriod, getReportV2, type ReportV2, type ReportV2Metadata, type ReportV2Options, type CashboxStatus, type SignatureStatus, getCashboxStatus, getSignatureStatus, type KasseneckApi, createKasseneckApi, } from './client/index.js';
2
+ export { type ReceiptItem, type ReceiptItemPayload, type ReceiptItemPayloadRead, toReceiptItemPayload, fromReceiptItemPayload, receiptItemTotalCents, receiptItemIsValid, negateReceiptItem, type TipRecipient, isTipItem, isVoucherItem, isVoucherFloatItem, type Voucher, type VoucherArticle, type IssuedVoucher, type VoucherPayload, toVoucherPayload, fromVoucherPayload, voucherIsValid, type Receipt, type RegistrationInfo, type ReceiptPayload, type ReceiptPayloadRead, toReceiptPayload, fromReceiptPayload, receiptSubSumCents, receiptSumCents, receiptValueVoucherSign, type CancellationOf, type CancellationItem, type Cancellation, type CancellationReason, type CancellationErrorCode, type CancellationStatus, type ReturnDisposition, RETURN_DISPOSITIONS, CANCELLATION_REASONS, CANCELLATION_STATUSES, CANCELLATION_ERROR_CODES, CANCELLATION_RESERVATION_MS, isCancellationReason, isReturnDisposition, isCancellationErrorCode, cancellationErrorCode, isCancellationError, cancellationFieldErrors, type CancellationFieldError, type ReceiptPayment, type ReceiptPaymentPayload, type ReceiptPaymentInput, fromReceiptPaymentPayload, toReceiptPaymentPayload, type PaymentErrorCode, PAYMENT_ERROR_CODES, isPaymentErrorCode, paymentErrorCode, isPaymentError, paymentFieldErrors, type PaymentFieldError, type ReceiptEmailErrorCode, type ReceiptEmailVia, RECEIPT_EMAIL_ERROR_CODES, RECEIPT_EMAIL_SEND_ERROR_CODES, type ReceiptEmailSendErrorCode, RECEIPT_EMAIL_VIAS, isReceiptEmailErrorCode, receiptEmailErrorCode, isReceiptEmailError, receiptEmailFieldErrors, type ReceiptEmailFieldError, RECEIPT_OUTPUT_KINDS, type ReceiptOutputKind, RECEIPT_OUTPUT_LOG_KINDS, type ReceiptOutputLogKind, RECEIPT_OUTPUT_RESULTS, type ReceiptOutputResult, RECEIPT_OUTPUT_ENTRIES_MAX, type ReceiptOutput, type ReceiptOutputActor, RECEIPT_OUTPUT_ENTRY_ERROR_CODES, type ReceiptOutputEntryErrorCode, RECEIPT_OUTPUT_ERROR_CODES, type ReceiptOutputErrorCode, isReceiptOutputErrorCode, receiptOutputErrorCode, isReceiptOutputError, receiptOutputFieldErrors, type ReceiptOutputFieldError, type ReceiptErrorCode, type ReceiptFieldError, RECEIPT_ERROR_CODES, isReceiptErrorCode, receiptErrorCode, isReceiptError, receiptFieldErrors, remainingQuantities, TIP_REFUND_SOURCES, type TipRefundSource, isTipRefundSource, openStaffTipCents, cancellationItemsForTip, cancellationCashRefundCents, asksTipRefundSource, asksRefundTip, type ReceiptCompany, type ReceiptCompanyPayload, fromReceiptCompanyPayload, receiptCompanyTaxInfo, type Cashregister, type CashregisterOnboarding, type CashregisterPayload, type CashregisterOnboardingPayload, type CashregisterAutoLogout, type CashregisterAutoLogoutPayload, fromCashregisterPayload, type ReceiptSummary, type ReceiptSummaryPayload, fromReceiptSummaryPayload, type ZeroKind, ZERO_KINDS, isZeroKind, type ReportMonth, reportMonthFromDate, previousReportMonth, nextReportMonth, reportMonthKey, reportMonthReadable, type StripeUrlSession, type StripeUrlSessionPayload, toStripeUrlSessionPayload, fromStripeUrlSessionPayload, type HobexReceipt, type HobexReceiptPayload, toHobexReceiptPayload, fromHobexReceiptPayload, hobexReceiptToCardPaymentData, hobexReceiptNeedsSignature, } from './models/index.js';
3
+ export { type AuthCredentials, type KasseneckAuth, type ApiKeyAuthOptions, type RegisterUserAuthOptions, apiKeyAuth, registerUserAuth, DEFAULT_BASE_URL, POS_BASE_URL, DEFAULT_TIMEOUT_MS, type HttpResponseLike, type HttpRequestInit, type FetchLike, type TransportOptions, type TransportBodyFields, type TransportCallOptions, type KasseneckTransport, type KasseneckBinaryTransport, type KasseneckPdfOrDataTransport, type PdfOrData, ALL_CALLS, type ApiCall, PUBLIC_CALLS, POS_CALLS, UNKNOWN_OUTCOME_CALLS, type PublicCall, type PosCall, createTransport, createBinaryTransport, createPdfOrDataTransport, KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNetworkError, KasseneckValidationError, type ValidationScope, type KasseneckError, type HttpFailureReason, type CauseDigest, type ErrorOutcome, CLIENT_ERROR_CODES, type ClientErrorCode, isKasseneckApiError, isKasseneckAuthError, isKasseneckHttpError, isKasseneckNetworkError, isKasseneckValidationError, isOutcomeUnknown, type ReceiptCommonOptions, type SellReceiptOptions, type TipOptions, type TipRecipientShare, type CancelReceiptOptions, type CancelReceiptResult, type ReceiptWithCompany, sellReceipt, sellReceiptWithCompany, paymentsExpectedCents, cardRefundReference, receiptLayoutFromResult, cancelReceipt, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, type ListMyReceiptsOptions, type ReceiptList, type ReceiptListStats, listMyCashregisters, checkVoucherCombinationError, type SendReceiptEmailOptions, type SendReceiptEmailResult, sendReceiptEmail, type ReceiptOutputEntry, type LogReceiptOutputsOptions, type LogReceiptOutputsResult, type RejectedReceiptOutput, logReceiptOutputs, downloadDailyReport, downloadMonthlyReport, getCashregisterReport, type CashregisterReportPeriod, getReportV2, type ReportV2, type ReportV2Metadata, type ReportV2Options, type CashboxStatus, type SignatureStatus, getCashboxStatus, getSignatureStatus, type KasseneckApi, createKasseneckApi, } from './client/index.js';
4
4
  export { type ReceiptDueTip, type ReceiptDueTipRecipient, type ReceiptDueOptions, type ReceiptDueBuckets, type ReceiptDueBreakdown, type ReceiptDueErrorReason, receiptDueCents, receiptDueBreakdown, ReceiptDueError, RECEIPT_DUE_ERROR_REASONS, isReceiptDueError, type VoucherDueInfo, type VoucherDueArticle, type VoucherRedeemContext, voucherRedeemMaxCents, VOUCHER_ZERO_RATE_BUCKET_FROM, } from './receipt/due.js';
5
5
  export { parseServerTimeStamp, toViennaWallClock, type ViennaWallClock } from './vienna-time.js';
6
6
  export { type PosBusinessSettings, type PosDeviceSettings, type PosSettings, type ArticleGroup, type PosArticle, POS_BUSINESS_DEFAULTS, POS_DEVICE_DEFAULTS, mergePosSettings, fromArticleGroupPayload, fromPosArticlePayload, listMyArticleGroups, listMyArticles, getPosSettings, setMyPosSettings, setMyRegisterDeviceSettings, distributeDiscount, cancelScopeOf, receiptsScopeOf, stockViewOf, voucherPermsOf, } from './pos/index.js';
package/dist/esm/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export { ReceiptType, VatRate, KeckPaymentMethod, CreditCardProvider, VoucherType, VoucherAction, StripeLinkMode, } from './enums/index.js';
2
- export { toReceiptItemPayload, fromReceiptItemPayload, receiptItemTotalCents, receiptItemIsValid, negateReceiptItem, isTipItem, isVoucherItem, isVoucherFloatItem, toVoucherPayload, fromVoucherPayload, voucherIsValid, toReceiptPayload, fromReceiptPayload, receiptSubSumCents, receiptSumCents, receiptValueVoucherSign, RETURN_DISPOSITIONS, CANCELLATION_REASONS, CANCELLATION_STATUSES, CANCELLATION_ERROR_CODES, CANCELLATION_RESERVATION_MS, isCancellationReason, isReturnDisposition, isCancellationErrorCode, cancellationErrorCode, isCancellationError, cancellationFieldErrors, fromReceiptPaymentPayload, toReceiptPaymentPayload, PAYMENT_ERROR_CODES, isPaymentErrorCode, paymentErrorCode, isPaymentError, paymentFieldErrors, RECEIPT_EMAIL_ERROR_CODES, RECEIPT_EMAIL_SEND_ERROR_CODES, RECEIPT_EMAIL_VIAS, isReceiptEmailErrorCode, receiptEmailErrorCode, isReceiptEmailError, receiptEmailFieldErrors, RECEIPT_ERROR_CODES, isReceiptErrorCode, receiptErrorCode, isReceiptError, receiptFieldErrors, remainingQuantities, TIP_REFUND_SOURCES, isTipRefundSource, openStaffTipCents, cancellationItemsForTip, cancellationCashRefundCents, asksTipRefundSource, asksRefundTip, fromReceiptCompanyPayload, receiptCompanyTaxInfo, fromCashregisterPayload, fromReceiptSummaryPayload, ZERO_KINDS, isZeroKind, reportMonthFromDate, previousReportMonth, nextReportMonth, reportMonthKey, reportMonthReadable, toStripeUrlSessionPayload, fromStripeUrlSessionPayload, toHobexReceiptPayload, fromHobexReceiptPayload, hobexReceiptToCardPaymentData, hobexReceiptNeedsSignature, } from './models/index.js';
3
- export { apiKeyAuth, registerUserAuth, DEFAULT_BASE_URL, POS_BASE_URL, DEFAULT_TIMEOUT_MS, ALL_CALLS, PUBLIC_CALLS, POS_CALLS, UNKNOWN_OUTCOME_CALLS, createTransport, createBinaryTransport, createPdfOrDataTransport, KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNetworkError, KasseneckValidationError, CLIENT_ERROR_CODES, isKasseneckApiError, isKasseneckAuthError, isKasseneckHttpError, isKasseneckNetworkError, isKasseneckValidationError, isOutcomeUnknown, sellReceipt, sellReceiptWithCompany, paymentsExpectedCents, cardRefundReference, receiptLayoutFromResult, cancelReceipt, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, listMyCashregisters, checkVoucherCombinationError, sendReceiptEmail, downloadDailyReport, downloadMonthlyReport, getCashregisterReport, getReportV2, getCashboxStatus, getSignatureStatus, createKasseneckApi, } from './client/index.js';
2
+ export { toReceiptItemPayload, fromReceiptItemPayload, receiptItemTotalCents, receiptItemIsValid, negateReceiptItem, isTipItem, isVoucherItem, isVoucherFloatItem, toVoucherPayload, fromVoucherPayload, voucherIsValid, toReceiptPayload, fromReceiptPayload, receiptSubSumCents, receiptSumCents, receiptValueVoucherSign, RETURN_DISPOSITIONS, CANCELLATION_REASONS, CANCELLATION_STATUSES, CANCELLATION_ERROR_CODES, CANCELLATION_RESERVATION_MS, isCancellationReason, isReturnDisposition, isCancellationErrorCode, cancellationErrorCode, isCancellationError, cancellationFieldErrors, fromReceiptPaymentPayload, toReceiptPaymentPayload, PAYMENT_ERROR_CODES, isPaymentErrorCode, paymentErrorCode, isPaymentError, paymentFieldErrors, RECEIPT_EMAIL_ERROR_CODES, RECEIPT_EMAIL_SEND_ERROR_CODES, RECEIPT_EMAIL_VIAS, isReceiptEmailErrorCode, receiptEmailErrorCode, isReceiptEmailError, receiptEmailFieldErrors, RECEIPT_OUTPUT_KINDS, RECEIPT_OUTPUT_LOG_KINDS, RECEIPT_OUTPUT_RESULTS, RECEIPT_OUTPUT_ENTRIES_MAX, RECEIPT_OUTPUT_ENTRY_ERROR_CODES, RECEIPT_OUTPUT_ERROR_CODES, isReceiptOutputErrorCode, receiptOutputErrorCode, isReceiptOutputError, receiptOutputFieldErrors, RECEIPT_ERROR_CODES, isReceiptErrorCode, receiptErrorCode, isReceiptError, receiptFieldErrors, remainingQuantities, TIP_REFUND_SOURCES, isTipRefundSource, openStaffTipCents, cancellationItemsForTip, cancellationCashRefundCents, asksTipRefundSource, asksRefundTip, fromReceiptCompanyPayload, receiptCompanyTaxInfo, fromCashregisterPayload, fromReceiptSummaryPayload, ZERO_KINDS, isZeroKind, reportMonthFromDate, previousReportMonth, nextReportMonth, reportMonthKey, reportMonthReadable, toStripeUrlSessionPayload, fromStripeUrlSessionPayload, toHobexReceiptPayload, fromHobexReceiptPayload, hobexReceiptToCardPaymentData, hobexReceiptNeedsSignature, } from './models/index.js';
3
+ export { apiKeyAuth, registerUserAuth, DEFAULT_BASE_URL, POS_BASE_URL, DEFAULT_TIMEOUT_MS, ALL_CALLS, PUBLIC_CALLS, POS_CALLS, UNKNOWN_OUTCOME_CALLS, createTransport, createBinaryTransport, createPdfOrDataTransport, KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNetworkError, KasseneckValidationError, CLIENT_ERROR_CODES, isKasseneckApiError, isKasseneckAuthError, isKasseneckHttpError, isKasseneckNetworkError, isKasseneckValidationError, isOutcomeUnknown, sellReceipt, sellReceiptWithCompany, paymentsExpectedCents, cardRefundReference, receiptLayoutFromResult, cancelReceipt, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, listMyCashregisters, checkVoucherCombinationError, sendReceiptEmail, logReceiptOutputs, downloadDailyReport, downloadMonthlyReport, getCashregisterReport, getReportV2, getCashboxStatus, getSignatureStatus, createKasseneckApi, } from './client/index.js';
4
4
  export { receiptDueCents, receiptDueBreakdown, ReceiptDueError, RECEIPT_DUE_ERROR_REASONS, isReceiptDueError, voucherRedeemMaxCents, VOUCHER_ZERO_RATE_BUCKET_FROM, } from './receipt/due.js';
5
5
  export { parseServerTimeStamp, toViennaWallClock } from './vienna-time.js';
6
6
  export { POS_BUSINESS_DEFAULTS, POS_DEVICE_DEFAULTS, mergePosSettings, fromArticleGroupPayload, fromPosArticlePayload, listMyArticleGroups, listMyArticles, getPosSettings, setMyPosSettings, setMyRegisterDeviceSettings, distributeDiscount, cancelScopeOf, receiptsScopeOf, stockViewOf, voucherPermsOf, } from './pos/index.js';
@@ -18,7 +18,7 @@ export interface CustomerInput {
18
18
  city?: string;
19
19
  /** ISO-3166-Alpha-2, z. B. `AT`. */
20
20
  country: string;
21
- /** UID-Nummer, z. B. `ATU12345678`. */
21
+ /** UID-Nummer, z. B. `ATU12345675`. */
22
22
  vatId?: string;
23
23
  /** Kuerzel fuer die Rechnungsnummer; einmal gesetzt unveraenderlich. */
24
24
  shortCode?: string;
@@ -1,11 +1,12 @@
1
1
  export { type ReceiptItem, type ReceiptItemPayload, type ReceiptItemPayloadRead, toReceiptItemPayload, fromReceiptItemPayload, receiptItemTotalCents, receiptItemIsValid, negateReceiptItem, type TipRecipient, isTipItem, isDiscountItem, isVoucherItem, isVoucherFloatItem, } from './receipt-item.js';
2
- export { type Voucher, type VoucherArticle, type VoucherPayload, toVoucherPayload, fromVoucherPayload, voucherIsValid, isNewFormVoucher, voucherServerFields } from './voucher.js';
2
+ export { type Voucher, type VoucherArticle, type IssuedVoucher, type VoucherPayload, toVoucherPayload, fromVoucherPayload, voucherIsValid, isNewFormVoucher, voucherServerFields } from './voucher.js';
3
3
  export { type Receipt, type RegistrationInfo, type ReceiptPayload, type ReceiptPayloadRead, toReceiptPayload, fromReceiptPayload, readRegistrationInfo, receiptSubSumCents, receiptSumCents, receiptValueVoucherSign, } from './receipt.js';
4
4
  export { type CancellationOf, type CancellationItem, type Cancellation, type CancellationReason, type CancellationErrorCode, type CancellationStatus, type ReturnDisposition, RETURN_DISPOSITIONS, CANCELLATION_REASONS, CANCELLATION_STATUSES, CANCELLATION_ERROR_CODES, CANCELLATION_RESERVATION_MS, isCancellationReason, isReturnDisposition, isCancellationErrorCode, cancellationErrorCode, isCancellationError, cancellationFieldErrors, type CancellationFieldError, remainingQuantities, TIP_REFUND_SOURCES, type TipRefundSource, isTipRefundSource, openStaffTipCents, cancellationItemsForTip, cancellationCashRefundCents, asksTipRefundSource, asksRefundTip, } from './cancellation.js';
5
5
  export { type ReceiptPayment, type ReceiptPaymentPayload, type ReceiptPaymentInput, fromReceiptPaymentPayload, toReceiptPaymentPayload, } from './receipt-payment.js';
6
6
  export { type PaymentErrorCode, PAYMENT_ERROR_CODES, isPaymentErrorCode, paymentErrorCode, isPaymentError, paymentFieldErrors, type PaymentFieldError } from './payment-errors.js';
7
7
  export { type ReceiptEmailErrorCode, type ReceiptEmailVia, RECEIPT_EMAIL_ERROR_CODES, RECEIPT_EMAIL_SEND_ERROR_CODES, type ReceiptEmailSendErrorCode, RECEIPT_EMAIL_VIAS, isReceiptEmailErrorCode, receiptEmailErrorCode, isReceiptEmailError, receiptEmailFieldErrors, type ReceiptEmailFieldError, } from './receipt-email.js';
8
8
  export { type ReceiptErrorCode, type ReceiptFieldError, RECEIPT_ERROR_CODES, isReceiptErrorCode, receiptErrorCode, isReceiptError, receiptFieldErrors, } from './receipt-errors.js';
9
+ export { RECEIPT_OUTPUT_KINDS, type ReceiptOutputKind, RECEIPT_OUTPUT_LOG_KINDS, type ReceiptOutputLogKind, RECEIPT_OUTPUT_RESULTS, type ReceiptOutputResult, RECEIPT_OUTPUT_ENTRIES_MAX, type ReceiptOutput, type ReceiptOutputActor, RECEIPT_OUTPUT_ENTRY_ERROR_CODES, type ReceiptOutputEntryErrorCode, RECEIPT_OUTPUT_ERROR_CODES, type ReceiptOutputErrorCode, isReceiptOutputErrorCode, receiptOutputErrorCode, isReceiptOutputError, receiptOutputFieldErrors, type ReceiptOutputFieldError, } from './receipt-output.js';
9
10
  export { type ReceiptCompany, type ReceiptCompanyPayload, fromReceiptCompanyPayload, receiptCompanyTaxInfo, } from './receipt-company.js';
10
11
  export { type Cashregister, type CashregisterOnboarding, type CashregisterPayload, type CashregisterOnboardingPayload, type CashregisterAutoLogout, type CashregisterAutoLogoutPayload, fromCashregisterPayload, } from './cashregister.js';
11
12
  export { type ReceiptSummary, type ReceiptSummaryPayload, fromReceiptSummaryPayload, type ZeroKind, ZERO_KINDS, isZeroKind } from './receipt-summary.js';
@@ -6,6 +6,7 @@ export { fromReceiptPaymentPayload, toReceiptPaymentPayload, } from './receipt-p
6
6
  export { PAYMENT_ERROR_CODES, isPaymentErrorCode, paymentErrorCode, isPaymentError, paymentFieldErrors } from './payment-errors.js';
7
7
  export { RECEIPT_EMAIL_ERROR_CODES, RECEIPT_EMAIL_SEND_ERROR_CODES, RECEIPT_EMAIL_VIAS, isReceiptEmailErrorCode, receiptEmailErrorCode, isReceiptEmailError, receiptEmailFieldErrors, } from './receipt-email.js';
8
8
  export { RECEIPT_ERROR_CODES, isReceiptErrorCode, receiptErrorCode, isReceiptError, receiptFieldErrors, } from './receipt-errors.js';
9
+ export { RECEIPT_OUTPUT_KINDS, RECEIPT_OUTPUT_LOG_KINDS, RECEIPT_OUTPUT_RESULTS, RECEIPT_OUTPUT_ENTRIES_MAX, RECEIPT_OUTPUT_ENTRY_ERROR_CODES, RECEIPT_OUTPUT_ERROR_CODES, isReceiptOutputErrorCode, receiptOutputErrorCode, isReceiptOutputError, receiptOutputFieldErrors, } from './receipt-output.js';
9
10
  export { fromReceiptCompanyPayload, receiptCompanyTaxInfo, } from './receipt-company.js';
10
11
  export { fromCashregisterPayload, } from './cashregister.js';
11
12
  export { fromReceiptSummaryPayload, ZERO_KINDS, isZeroKind } from './receipt-summary.js';
@@ -0,0 +1,79 @@
1
+ import { KasseneckApiError } from '../client/errors.js';
2
+ /**
3
+ * Die Arten einer Ausgabe (Katalog `AUSGABE_ART`): `print` Erstdruck,
4
+ * `reprint` Duplikat, `email` Belegmail, `link_shared` Link geteilt,
5
+ * `pdf_shared` PDF geteilt, `opened` vom Kunden geoeffnet (Abrufe je Stunde).
6
+ */
7
+ export declare const RECEIPT_OUTPUT_KINDS: readonly ["print", "reprint", "email", "link_shared", "pdf_shared", "opened"];
8
+ export type ReceiptOutputKind = (typeof RECEIPT_OUTPUT_KINDS)[number];
9
+ /**
10
+ * Die Arten, die eine Kasse selbst meldet. `email` und `opened` schreibt das
11
+ * Backend selbst (beim Versand bzw. beim Abruf des Links); meldet eine Kasse
12
+ * sie, lehnt der Server genau diesen Eintrag ab (`invalid_output_kind`).
13
+ */
14
+ export declare const RECEIPT_OUTPUT_LOG_KINDS: readonly ["print", "reprint", "link_shared", "pdf_shared"];
15
+ export type ReceiptOutputLogKind = (typeof RECEIPT_OUTPUT_LOG_KINDS)[number];
16
+ /** Ergebnis einer Ausgabe (Katalog `AUSGABE_ERGEBNIS`); Mail und Abruf sind immer `ok`. */
17
+ export declare const RECEIPT_OUTPUT_RESULTS: readonly ["ok", "failed", "unclear"];
18
+ export type ReceiptOutputResult = (typeof RECEIPT_OUTPUT_RESULTS)[number];
19
+ /** Hoechstens so viele Eintraege je Aufruf von `logReceiptOutputs`. */
20
+ export declare const RECEIPT_OUTPUT_ENTRIES_MAX = 50;
21
+ /** Wer die Ausgabe ausloeste: Kassen-Benutzer, bzw. beim Geraet mit api_key das Konto (`name: null`). */
22
+ export interface ReceiptOutputActor {
23
+ id: string;
24
+ name: string | null;
25
+ }
26
+ /**
27
+ * Ein Eintrag aus `outputs` einer `getReceipt`-Antwort (`/v3`). Eine Art oder
28
+ * ein Ergebnis, das dieses Paket noch nicht kennt (neuerer Server), bleibt
29
+ * lesbar stehen; die Kasse zeigt es ohne Beschriftung.
30
+ */
31
+ export interface ReceiptOutput {
32
+ kind: ReceiptOutputKind | (string & {});
33
+ /** Zeitpunkt, ISO 8601 mit Wiener Zonenoffset; bei Kassenmeldungen der Zeitpunkt am Geraet, beim Abruf der erste der Stunde. */
34
+ at: string;
35
+ result: ReceiptOutputResult | (string & {});
36
+ /** `null` beim Abruf durch den Kunden. */
37
+ by: ReceiptOutputActor | null;
38
+ /** Nur bei `opened`: Zahl der Abrufe in dieser Stunde. */
39
+ count?: number;
40
+ }
41
+ /**
42
+ * Liest `data.outputs` nachsichtig: das Protokoll ist eine Auskunft neben dem
43
+ * Beleg und darf das Lesen, Anzeigen und Nachdrucken des Belegs nie scheitern
44
+ * lassen. Keine Liste: `undefined` (Antwort ohne Protokoll, etwa `/api` oder
45
+ * `createReceipt`). Ein Eintrag ohne lesbare Art, Zeit oder Ergebnis faellt
46
+ * weg; ein Handelnder ohne Kennung gilt als `null`, eine Anzahl, die keine
47
+ * ganze Zahl ab 0 ist, fehlt. Paketintern.
48
+ */
49
+ export declare function receiptOutputsFromWire(roh: unknown): ReceiptOutput[] | undefined;
50
+ /**
51
+ * Codes je Eintrag in `rejected[].code` einer Antwort von
52
+ * `logReceiptOutputs`: der Eintrag ist dauerhaft abgelehnt (aus dem Puffer
53
+ * nehmen, nicht noch einmal senden). `validation` heisst hier: ein Druck ohne
54
+ * oder mit unbekanntem Ergebnis.
55
+ */
56
+ export declare const RECEIPT_OUTPUT_ENTRY_ERROR_CODES: readonly ["receipt_not_found", "invalid_output_kind", "output_time_out_of_range", "idempotency_key_required", "validation"];
57
+ export type ReceiptOutputEntryErrorCode = (typeof RECEIPT_OUTPUT_ENTRY_ERROR_CODES)[number];
58
+ /**
59
+ * Fehlercodes von `logReceiptOutputs`, wenn die ganze Anfrage scheitert
60
+ * (Vokabular `errorCodes.registerHandlersByEndpoint.logReceiptOutputs`),
61
+ * dahinter die Codes, die Anmeldung und Rand auf diesem Endpunkt erzeugen
62
+ * koennen (`errorCodes.auth` ohne die sieben des Partner-Zugangs,
63
+ * `errorCodes.edge`), zuletzt `route_missing` (Code des Pakets). Ein Code
64
+ * ausserhalb bleibt ueber `KasseneckApiError.code` lesbar.
65
+ */
66
+ export declare const RECEIPT_OUTPUT_ERROR_CODES: readonly ["idempotency_key_required", "invalid_output_kind", "output_time_out_of_range", "receipt_not_found", "server_error", "validation", "account_not_found", "action_confirmation_required", "admin_required", "api_not_approved", "app_check_invalid", "app_check_missing", "cashregister_not_assigned", "cashregister_not_found", "cashregister_token_invalid", "cashregister_token_missing", "dialect_mismatch", "internal_translation_error", "live_not_enabled", "method_not_allowed", "mfa_required", "not_found", "password_change_required", "register_user_no_business", "register_user_not_allowed", "register_user_not_found", "response_translation_failed", "second_factor_required", "session_expired", "session_other_cashregister", "unauthorized", "user_disabled", "user_verification_failed", "route_missing"];
67
+ export type ReceiptOutputErrorCode = (typeof RECEIPT_OUTPUT_ERROR_CODES)[number];
68
+ export declare function isReceiptOutputErrorCode(value: unknown): value is ReceiptOutputErrorCode;
69
+ /** Der Code eines geworfenen Fehlers, wenn er in [RECEIPT_OUTPUT_ERROR_CODES] steht; sonst `undefined`. */
70
+ export declare function receiptOutputErrorCode(error: unknown): ReceiptOutputErrorCode | undefined;
71
+ /** Ohne `code`: traegt der Fehler ueberhaupt einen Code aus [RECEIPT_OUTPUT_ERROR_CODES]? */
72
+ export declare function isReceiptOutputError(error: unknown, code?: ReceiptOutputErrorCode): error is KasseneckApiError;
73
+ /** Ein Feldfehler aus `data.errors[]` einer `validation`-Antwort von `logReceiptOutputs`. */
74
+ export interface ReceiptOutputFieldError {
75
+ field: string;
76
+ message: string;
77
+ }
78
+ /** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
79
+ export declare function receiptOutputFieldErrors(error: unknown): ReceiptOutputFieldError[];
@@ -0,0 +1,135 @@
1
+ import { bekannterCode, feldfehlerVon } from '../client/fehlercodes.js';
2
+ /*
3
+ * Ausgaben eines Belegs: auf welchem Weg ein Beleg den Betrieb verlassen hat
4
+ * (Erstdruck, Duplikat, E-Mail, Link oder PDF geteilt, vom Kunden geoeffnet).
5
+ * Registrierkassen-Erlass BMF-AV Nr. 2/2026, Abschnitt 4.2: die Art der
6
+ * Belegerteilung ist zu dokumentieren. Das Protokoll fuehrt das Backend neben
7
+ * dem Beleg (nie am Beleg, nie im DEP); die Kasse meldet ihre Drucke und das
8
+ * Teilen mit `logReceiptOutputs`, `getReceipt` liefert unter `/v3` die
9
+ * neuesten 20 Eintraege als `outputs`.
10
+ */
11
+ /**
12
+ * Die Arten einer Ausgabe (Katalog `AUSGABE_ART`): `print` Erstdruck,
13
+ * `reprint` Duplikat, `email` Belegmail, `link_shared` Link geteilt,
14
+ * `pdf_shared` PDF geteilt, `opened` vom Kunden geoeffnet (Abrufe je Stunde).
15
+ */
16
+ export const RECEIPT_OUTPUT_KINDS = Object.freeze(['print', 'reprint', 'email', 'link_shared', 'pdf_shared', 'opened']);
17
+ /**
18
+ * Die Arten, die eine Kasse selbst meldet. `email` und `opened` schreibt das
19
+ * Backend selbst (beim Versand bzw. beim Abruf des Links); meldet eine Kasse
20
+ * sie, lehnt der Server genau diesen Eintrag ab (`invalid_output_kind`).
21
+ */
22
+ export const RECEIPT_OUTPUT_LOG_KINDS = Object.freeze(['print', 'reprint', 'link_shared', 'pdf_shared']);
23
+ /** Ergebnis einer Ausgabe (Katalog `AUSGABE_ERGEBNIS`); Mail und Abruf sind immer `ok`. */
24
+ export const RECEIPT_OUTPUT_RESULTS = Object.freeze(['ok', 'failed', 'unclear']);
25
+ /** Hoechstens so viele Eintraege je Aufruf von `logReceiptOutputs`. */
26
+ export const RECEIPT_OUTPUT_ENTRIES_MAX = 50;
27
+ /**
28
+ * Liest `data.outputs` nachsichtig: das Protokoll ist eine Auskunft neben dem
29
+ * Beleg und darf das Lesen, Anzeigen und Nachdrucken des Belegs nie scheitern
30
+ * lassen. Keine Liste: `undefined` (Antwort ohne Protokoll, etwa `/api` oder
31
+ * `createReceipt`). Ein Eintrag ohne lesbare Art, Zeit oder Ergebnis faellt
32
+ * weg; ein Handelnder ohne Kennung gilt als `null`, eine Anzahl, die keine
33
+ * ganze Zahl ab 0 ist, fehlt. Paketintern.
34
+ */
35
+ export function receiptOutputsFromWire(roh) {
36
+ if (!Array.isArray(roh))
37
+ return undefined;
38
+ const raus = [];
39
+ for (const e of roh) {
40
+ if (e === null || typeof e !== 'object' || Array.isArray(e))
41
+ continue;
42
+ const { kind, at, result, by, count } = e;
43
+ if (typeof kind !== 'string' || kind === '' || typeof at !== 'string' || at === '' || typeof result !== 'string' || result === '')
44
+ continue;
45
+ const eintrag = { kind, at, result, by: handelnder(by) };
46
+ if (typeof count === 'number' && Number.isSafeInteger(count) && count >= 0)
47
+ eintrag.count = count;
48
+ raus.push(eintrag);
49
+ }
50
+ return raus;
51
+ }
52
+ function handelnder(w) {
53
+ if (w === null || typeof w !== 'object' || Array.isArray(w))
54
+ return null;
55
+ const { id, name } = w;
56
+ if (typeof id !== 'string' || id === '')
57
+ return null;
58
+ return { id, name: typeof name === 'string' ? name : null };
59
+ }
60
+ /**
61
+ * Codes je Eintrag in `rejected[].code` einer Antwort von
62
+ * `logReceiptOutputs`: der Eintrag ist dauerhaft abgelehnt (aus dem Puffer
63
+ * nehmen, nicht noch einmal senden). `validation` heisst hier: ein Druck ohne
64
+ * oder mit unbekanntem Ergebnis.
65
+ */
66
+ export const RECEIPT_OUTPUT_ENTRY_ERROR_CODES = Object.freeze([
67
+ 'receipt_not_found', // Beleg gibt es nicht ODER er liegt in einer anderen Kasse
68
+ 'invalid_output_kind', // Art, die die Kasse nicht meldet (email, opened)
69
+ 'output_time_out_of_range', // unlesbare Zeit oder ohne Zone (eine falsch gehende Uhr klemmt der Server)
70
+ 'idempotency_key_required', // Schluessel fehlt oder hat nicht 8-64 Zeichen [A-Za-z0-9_-]
71
+ 'validation', // Druck ohne bzw. mit unbekanntem Ergebnis
72
+ ]);
73
+ /**
74
+ * Fehlercodes von `logReceiptOutputs`, wenn die ganze Anfrage scheitert
75
+ * (Vokabular `errorCodes.registerHandlersByEndpoint.logReceiptOutputs`),
76
+ * dahinter die Codes, die Anmeldung und Rand auf diesem Endpunkt erzeugen
77
+ * koennen (`errorCodes.auth` ohne die sieben des Partner-Zugangs,
78
+ * `errorCodes.edge`), zuletzt `route_missing` (Code des Pakets). Ein Code
79
+ * ausserhalb bleibt ueber `KasseneckApiError.code` lesbar.
80
+ */
81
+ export const RECEIPT_OUTPUT_ERROR_CODES = Object.freeze([
82
+ 'idempotency_key_required',
83
+ 'invalid_output_kind',
84
+ 'output_time_out_of_range',
85
+ 'receipt_not_found',
86
+ 'server_error',
87
+ 'validation',
88
+ // Anmeldung und Rand (errorCodes.auth ohne Partner-Zugang, errorCodes.edge)
89
+ 'account_not_found',
90
+ 'action_confirmation_required',
91
+ 'admin_required',
92
+ 'api_not_approved',
93
+ 'app_check_invalid',
94
+ 'app_check_missing',
95
+ 'cashregister_not_assigned',
96
+ 'cashregister_not_found',
97
+ 'cashregister_token_invalid',
98
+ 'cashregister_token_missing',
99
+ 'dialect_mismatch',
100
+ 'internal_translation_error',
101
+ 'live_not_enabled',
102
+ 'method_not_allowed',
103
+ 'mfa_required',
104
+ 'not_found',
105
+ 'password_change_required',
106
+ 'register_user_no_business',
107
+ 'register_user_not_allowed',
108
+ 'register_user_not_found',
109
+ 'response_translation_failed',
110
+ 'second_factor_required',
111
+ 'session_expired',
112
+ 'session_other_cashregister',
113
+ 'unauthorized',
114
+ 'user_disabled',
115
+ 'user_verification_failed',
116
+ // Code des Pakets (CLIENT_ERROR_CODES)
117
+ 'route_missing',
118
+ ]);
119
+ export function isReceiptOutputErrorCode(value) {
120
+ return typeof value === 'string' && RECEIPT_OUTPUT_ERROR_CODES.includes(value);
121
+ }
122
+ const BEKANNT = new Set(RECEIPT_OUTPUT_ERROR_CODES);
123
+ /** Der Code eines geworfenen Fehlers, wenn er in [RECEIPT_OUTPUT_ERROR_CODES] steht; sonst `undefined`. */
124
+ export function receiptOutputErrorCode(error) {
125
+ return bekannterCode(error, BEKANNT);
126
+ }
127
+ /** Ohne `code`: traegt der Fehler ueberhaupt einen Code aus [RECEIPT_OUTPUT_ERROR_CODES]? */
128
+ export function isReceiptOutputError(error, code) {
129
+ const gefunden = receiptOutputErrorCode(error);
130
+ return gefunden !== undefined && (code === undefined || gefunden === code);
131
+ }
132
+ /** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
133
+ export function receiptOutputFieldErrors(error) {
134
+ return feldfehlerVon(error);
135
+ }
@@ -155,10 +155,10 @@ export declare function readRegistrationInfo(roh: {
155
155
  export declare function receiptValueVoucherSign(receipt: Receipt): 1 | -1;
156
156
  /**
157
157
  * Zwischensumme in **Cent** — Positionen plus verkaufte Wertgutscheine minus
158
- * eingeloeste Promotionsgutscheine. Wertgutschein-Einloesungen wirken erst auf
158
+ * eingeloeste Aktionsgutscheine. Wertgutschein-Einloesungen wirken erst auf
159
159
  * [receiptSumCents], nicht hier (siehe Dart-Vorbild `subSumCents`/`sumCents`).
160
160
  * Am Storno-Beleg zaehlen Wertgutscheine mit umgekehrtem Vorzeichen
161
- * ([receiptValueVoucherSign]), und ein gespiegelter Promotionsgutschein
161
+ * ([receiptValueVoucherSign]), und ein gespiegelter Aktionsgutschein
162
162
  * mindert nichts: den Rabatt nimmt der Server dort ueber Ausgleichspositionen
163
163
  * (`kind: 'discount'`) zurueck, und belegToepfe verteilt einen Promo-Eintrag
164
164
  * nur auf eine positive Topfsumme, die ein Storno nie hat.
@@ -142,10 +142,10 @@ export function receiptValueVoucherSign(receipt) {
142
142
  }
143
143
  /**
144
144
  * Zwischensumme in **Cent** — Positionen plus verkaufte Wertgutscheine minus
145
- * eingeloeste Promotionsgutscheine. Wertgutschein-Einloesungen wirken erst auf
145
+ * eingeloeste Aktionsgutscheine. Wertgutschein-Einloesungen wirken erst auf
146
146
  * [receiptSumCents], nicht hier (siehe Dart-Vorbild `subSumCents`/`sumCents`).
147
147
  * Am Storno-Beleg zaehlen Wertgutscheine mit umgekehrtem Vorzeichen
148
- * ([receiptValueVoucherSign]), und ein gespiegelter Promotionsgutschein
148
+ * ([receiptValueVoucherSign]), und ein gespiegelter Aktionsgutschein
149
149
  * mindert nichts: den Rabatt nimmt der Server dort ueber Ausgleichspositionen
150
150
  * (`kind: 'discount'`) zurueck, und belegToepfe verteilt einen Promo-Eintrag
151
151
  * nur auf eine positive Topfsumme, die ein Storno nie hat.
@@ -38,6 +38,28 @@ export interface Voucher {
38
38
  exempt?: boolean;
39
39
  zeroRateBucket?: boolean;
40
40
  }
41
+ /**
42
+ * Ein ausgestellter Gutschein in der Antwort von `createReceipt` unter `/v3`
43
+ * (`data.issuedVouchers[]`): der Klartext-Code erscheint hier einmalig fuer das Etikett.
44
+ */
45
+ export interface IssuedVoucher {
46
+ id: string;
47
+ /** Klartext-Code; nie in Logs oder Fehlertexte schreiben. */
48
+ code: string;
49
+ type: string;
50
+ index: number;
51
+ codeSuffix: string;
52
+ faceValueCents?: number;
53
+ quantity?: number;
54
+ /** Nur bei Leistungsgutscheinen: Name des verkauften Artikels; sonst fehlt das Feld. */
55
+ articleName?: string;
56
+ validity?: {
57
+ pattern: string;
58
+ redeemableUntil: string | null;
59
+ refundableUntil: string | null;
60
+ validUntil: string | null;
61
+ };
62
+ }
41
63
  /** Artikel eines Leistungsgutscheins, wie der Server ihn am Beleg festhaelt. */
42
64
  export interface VoucherArticle {
43
65
  id: string;
@@ -87,8 +109,8 @@ export declare function voucherServerFields(voucher: Voucher): string[];
87
109
  export declare function toVoucherPayload(voucher: Voucher): VoucherPayload;
88
110
  /**
89
111
  * Ist der Gutschein an das Backend sendbar? Zwilling von `KeckVoucher.isValid`
90
- * im Flutter-Vorbild: Wert- und Promotionsgutscheine brauchen einen Wert,
91
- * Promotionsgutscheine duerfen nur eingeloest (nicht verkauft) werden, und ein
112
+ * im Flutter-Vorbild: Wert- und Aktionsgutscheine brauchen einen Wert,
113
+ * Aktionsgutscheine duerfen nur eingeloest (nicht verkauft) werden, und ein
92
114
  * gesetzter Wert muss positiv sein.
93
115
  */
94
116
  export declare function voucherIsValid(voucher: Voucher): boolean;