@kreiseck/kasseneck-api 1.13.0 → 1.15.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 (431) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +71 -2
  3. package/dist/cjs/client/api.d.ts +8 -1
  4. package/dist/cjs/client/api.js +4 -0
  5. package/dist/cjs/client/aufrufe.d.ts +6 -6
  6. package/dist/cjs/client/aufrufe.js +11 -2
  7. package/dist/cjs/client/index.d.ts +2 -1
  8. package/dist/cjs/client/index.js +13 -1
  9. package/dist/cjs/client/list-receipts.d.ts +211 -0
  10. package/dist/cjs/client/list-receipts.js +290 -0
  11. package/dist/cjs/client/receipts.d.ts +85 -2
  12. package/dist/cjs/client/receipts.js +164 -5
  13. package/dist/cjs/enums/voucher-type.d.ts +1 -1
  14. package/dist/cjs/enums/voucher-type.js +1 -1
  15. package/dist/cjs/index.d.ts +2 -2
  16. package/dist/cjs/index.js +24 -3
  17. package/dist/cjs/invoice/typen.d.ts +1 -1
  18. package/dist/cjs/invoice/vertrag.d.ts +1 -1
  19. package/dist/cjs/invoice/vertrag.js +2 -0
  20. package/dist/cjs/models/index.d.ts +2 -1
  21. package/dist/cjs/models/index.js +12 -1
  22. package/dist/cjs/models/receipt-errors.d.ts +1 -1
  23. package/dist/cjs/models/receipt-errors.js +3 -0
  24. package/dist/cjs/models/receipt-output.d.ts +79 -0
  25. package/dist/cjs/models/receipt-output.js +143 -0
  26. package/dist/cjs/models/receipt.d.ts +2 -2
  27. package/dist/cjs/models/receipt.js +2 -2
  28. package/dist/cjs/models/voucher.d.ts +24 -2
  29. package/dist/cjs/models/voucher.js +2 -2
  30. package/dist/cjs/partner/typen.d.ts +1 -1
  31. package/dist/cjs/pos/index.d.ts +2 -1
  32. package/dist/cjs/pos/index.js +6 -1
  33. package/dist/cjs/pos/schicht-typen.d.ts +2 -2
  34. package/dist/cjs/pos/schicht-typen.js +2 -2
  35. package/dist/cjs/pos/settings.d.ts +1 -1
  36. package/dist/cjs/pos/settings.js +5 -0
  37. package/dist/cjs/pos/texte.d.ts +114 -0
  38. package/dist/cjs/pos/texte.js +64 -0
  39. package/dist/cjs/receipt/due.d.ts +4 -2
  40. package/dist/cjs/receipt/due.js +22 -5
  41. package/dist/cjs/receipt/duplikat.d.ts +35 -0
  42. package/dist/cjs/receipt/duplikat.js +76 -0
  43. package/dist/cjs/receipt/gutschein-plan.d.ts +2 -0
  44. package/dist/cjs/receipt/gutschein-plan.js +5 -0
  45. package/dist/cjs/receipt/index.d.ts +1 -0
  46. package/dist/cjs/receipt/index.js +4 -2
  47. package/dist/cjs/receipt/layout.js +44 -21
  48. package/dist/cjs/register/pairing.d.ts +6 -2
  49. package/dist/cjs/register/pairing.js +1 -1
  50. package/dist/cjs/stored/bon-layout.js +3 -4
  51. package/dist/cjs/stored/vokabular.d.ts +1 -1
  52. package/dist/cjs/stored/vokabular.js +47 -3
  53. package/dist/cjs/version.d.ts +1 -1
  54. package/dist/cjs/version.js +1 -1
  55. package/dist/esm/client/api.d.ts +8 -1
  56. package/dist/esm/client/api.js +5 -1
  57. package/dist/esm/client/aufrufe.d.ts +6 -6
  58. package/dist/esm/client/aufrufe.js +11 -2
  59. package/dist/esm/client/index.d.ts +2 -1
  60. package/dist/esm/client/index.js +2 -1
  61. package/dist/esm/client/list-receipts.d.ts +211 -0
  62. package/dist/esm/client/list-receipts.js +284 -0
  63. package/dist/esm/client/receipts.d.ts +85 -2
  64. package/dist/esm/client/receipts.js +164 -6
  65. package/dist/esm/enums/voucher-type.d.ts +1 -1
  66. package/dist/esm/enums/voucher-type.js +1 -1
  67. package/dist/esm/index.d.ts +2 -2
  68. package/dist/esm/index.js +2 -2
  69. package/dist/esm/invoice/typen.d.ts +1 -1
  70. package/dist/esm/invoice/vertrag.d.ts +1 -1
  71. package/dist/esm/invoice/vertrag.js +2 -0
  72. package/dist/esm/models/index.d.ts +2 -1
  73. package/dist/esm/models/index.js +1 -0
  74. package/dist/esm/models/receipt-errors.d.ts +1 -1
  75. package/dist/esm/models/receipt-errors.js +3 -0
  76. package/dist/esm/models/receipt-output.d.ts +79 -0
  77. package/dist/esm/models/receipt-output.js +135 -0
  78. package/dist/esm/models/receipt.d.ts +2 -2
  79. package/dist/esm/models/receipt.js +2 -2
  80. package/dist/esm/models/voucher.d.ts +24 -2
  81. package/dist/esm/models/voucher.js +2 -2
  82. package/dist/esm/partner/typen.d.ts +1 -1
  83. package/dist/esm/pos/index.d.ts +2 -1
  84. package/dist/esm/pos/index.js +3 -1
  85. package/dist/esm/pos/schicht-typen.d.ts +2 -2
  86. package/dist/esm/pos/schicht-typen.js +2 -2
  87. package/dist/esm/pos/settings.d.ts +1 -1
  88. package/dist/esm/pos/settings.js +5 -0
  89. package/dist/esm/pos/texte.d.ts +114 -0
  90. package/dist/esm/pos/texte.js +63 -0
  91. package/dist/esm/receipt/due.d.ts +4 -2
  92. package/dist/esm/receipt/due.js +23 -6
  93. package/dist/esm/receipt/duplikat.d.ts +35 -0
  94. package/dist/esm/receipt/duplikat.js +73 -0
  95. package/dist/esm/receipt/gutschein-plan.d.ts +2 -0
  96. package/dist/esm/receipt/gutschein-plan.js +4 -0
  97. package/dist/esm/receipt/index.d.ts +1 -0
  98. package/dist/esm/receipt/index.js +1 -0
  99. package/dist/esm/receipt/layout.js +44 -21
  100. package/dist/esm/register/pairing.d.ts +6 -2
  101. package/dist/esm/register/pairing.js +1 -1
  102. package/dist/esm/stored/bon-layout.js +3 -4
  103. package/dist/esm/stored/vokabular.d.ts +1 -1
  104. package/dist/esm/stored/vokabular.js +47 -3
  105. package/dist/esm/version.d.ts +1 -1
  106. package/dist/esm/version.js +1 -1
  107. package/fixtures/code-table-receipts.json +1 -1
  108. package/fixtures/duplicate-cases.json +5616 -0
  109. package/fixtures/expected/cancellation-discount.grid32.txt +1 -1
  110. package/fixtures/expected/cancellation-discount.grid48.txt +1 -1
  111. package/fixtures/expected/cancellation-discount.lines.json +1 -1
  112. package/fixtures/expected/cancellation-discount.sheet32.json +1 -1
  113. package/fixtures/expected/cancellation-discount.sheet48.json +1 -1
  114. package/fixtures/expected/cancellation-full.grid32.txt +1 -1
  115. package/fixtures/expected/cancellation-full.grid48.txt +1 -1
  116. package/fixtures/expected/cancellation-full.lines.json +1 -1
  117. package/fixtures/expected/cancellation-full.sheet32.json +1 -1
  118. package/fixtures/expected/cancellation-full.sheet48.json +1 -1
  119. package/fixtures/expected/cancellation-partial.grid32.txt +1 -1
  120. package/fixtures/expected/cancellation-partial.grid48.txt +1 -1
  121. package/fixtures/expected/cancellation-partial.lines.json +1 -1
  122. package/fixtures/expected/cancellation-partial.sheet32.json +1 -1
  123. package/fixtures/expected/cancellation-partial.sheet48.json +1 -1
  124. package/fixtures/expected/cancellation-split-full.grid32.txt +1 -1
  125. package/fixtures/expected/cancellation-split-full.grid48.txt +1 -1
  126. package/fixtures/expected/cancellation-split-full.lines.json +1 -1
  127. package/fixtures/expected/cancellation-split-full.sheet32.json +1 -1
  128. package/fixtures/expected/cancellation-split-full.sheet48.json +1 -1
  129. package/fixtures/expected/cancellation-split-partial.grid32.txt +1 -1
  130. package/fixtures/expected/cancellation-split-partial.grid48.txt +1 -1
  131. package/fixtures/expected/cancellation-split-partial.lines.json +1 -1
  132. package/fixtures/expected/cancellation-split-partial.sheet32.json +1 -1
  133. package/fixtures/expected/cancellation-split-partial.sheet48.json +1 -1
  134. package/fixtures/expected/card-custom.grid32.txt +1 -1
  135. package/fixtures/expected/card-custom.grid48.txt +1 -1
  136. package/fixtures/expected/card-custom.lines.json +1 -1
  137. package/fixtures/expected/card-custom.sheet32.json +1 -1
  138. package/fixtures/expected/card-custom.sheet48.json +1 -1
  139. package/fixtures/expected/card-gptom-ios.grid32.txt +1 -1
  140. package/fixtures/expected/card-gptom-ios.grid48.txt +1 -1
  141. package/fixtures/expected/card-gptom-ios.lines.json +1 -1
  142. package/fixtures/expected/card-gptom-ios.sheet32.json +1 -1
  143. package/fixtures/expected/card-gptom-ios.sheet48.json +1 -1
  144. package/fixtures/expected/card-gptom.grid32.txt +1 -1
  145. package/fixtures/expected/card-gptom.grid48.txt +1 -1
  146. package/fixtures/expected/card-gptom.lines.json +1 -1
  147. package/fixtures/expected/card-gptom.sheet32.json +1 -1
  148. package/fixtures/expected/card-gptom.sheet48.json +1 -1
  149. package/fixtures/expected/card-hobex-cloud.grid32.txt +1 -1
  150. package/fixtures/expected/card-hobex-cloud.grid48.txt +1 -1
  151. package/fixtures/expected/card-hobex-cloud.lines.json +1 -1
  152. package/fixtures/expected/card-hobex-cloud.sheet32.json +1 -1
  153. package/fixtures/expected/card-hobex-cloud.sheet48.json +1 -1
  154. package/fixtures/expected/card-hobex-hps.grid32.txt +1 -1
  155. package/fixtures/expected/card-hobex-hps.grid48.txt +1 -1
  156. package/fixtures/expected/card-hobex-hps.lines.json +1 -1
  157. package/fixtures/expected/card-hobex-hps.sheet32.json +1 -1
  158. package/fixtures/expected/card-hobex-hps.sheet48.json +1 -1
  159. package/fixtures/expected/card-mypos.grid32.txt +1 -1
  160. package/fixtures/expected/card-mypos.grid48.txt +1 -1
  161. package/fixtures/expected/card-mypos.lines.json +1 -1
  162. package/fixtures/expected/card-mypos.sheet32.json +1 -1
  163. package/fixtures/expected/card-mypos.sheet48.json +1 -1
  164. package/fixtures/expected/card-stripe-eps.grid32.txt +1 -1
  165. package/fixtures/expected/card-stripe-eps.grid48.txt +1 -1
  166. package/fixtures/expected/card-stripe-eps.lines.json +1 -1
  167. package/fixtures/expected/card-stripe-eps.sheet32.json +1 -1
  168. package/fixtures/expected/card-stripe-eps.sheet48.json +1 -1
  169. package/fixtures/expected/card-stripe.grid32.txt +1 -1
  170. package/fixtures/expected/card-stripe.grid48.txt +1 -1
  171. package/fixtures/expected/card-stripe.lines.json +1 -1
  172. package/fixtures/expected/card-stripe.sheet32.json +1 -1
  173. package/fixtures/expected/card-stripe.sheet48.json +1 -1
  174. package/fixtures/expected/card-sumup.grid32.txt +1 -1
  175. package/fixtures/expected/card-sumup.grid48.txt +1 -1
  176. package/fixtures/expected/card-sumup.lines.json +1 -1
  177. package/fixtures/expected/card-sumup.sheet32.json +1 -1
  178. package/fixtures/expected/card-sumup.sheet48.json +1 -1
  179. package/fixtures/expected/code-table-receipt.long-item-name.iso8859_15.hex +1 -1
  180. package/fixtures/expected/code-table-receipt.long-item-name.pc437.hex +1 -1
  181. package/fixtures/expected/code-table-receipt.long-item-name.pc850.hex +1 -1
  182. package/fixtures/expected/code-table-receipt.long-item-name.pc858.hex +1 -1
  183. package/fixtures/expected/code-table-receipt.long-item-name.replacement.hex +1 -1
  184. package/fixtures/expected/code-table-receipt.long-item-name.wpc1252.hex +1 -1
  185. package/fixtures/expected/code-table-receipt.sale-cash.iso8859_15.hex +1 -1
  186. package/fixtures/expected/code-table-receipt.sale-cash.pc437.hex +1 -1
  187. package/fixtures/expected/code-table-receipt.sale-cash.pc850.hex +1 -1
  188. package/fixtures/expected/code-table-receipt.sale-cash.pc858.hex +1 -1
  189. package/fixtures/expected/code-table-receipt.sale-cash.replacement.hex +1 -1
  190. package/fixtures/expected/code-table-receipt.sale-cash.wpc1252.hex +1 -1
  191. package/fixtures/expected/code-table-receipt.special-characters.iso8859_15.hex +1 -1
  192. package/fixtures/expected/code-table-receipt.special-characters.pc437.hex +1 -1
  193. package/fixtures/expected/code-table-receipt.special-characters.pc850.hex +1 -1
  194. package/fixtures/expected/code-table-receipt.special-characters.pc858.hex +1 -1
  195. package/fixtures/expected/code-table-receipt.special-characters.replacement.hex +1 -1
  196. package/fixtures/expected/code-table-receipt.special-characters.wpc1252.hex +1 -1
  197. package/fixtures/expected/code-table-receipt.test-cashregister-sale.iso8859_15.hex +1 -1
  198. package/fixtures/expected/code-table-receipt.test-cashregister-sale.pc437.hex +1 -1
  199. package/fixtures/expected/code-table-receipt.test-cashregister-sale.pc850.hex +1 -1
  200. package/fixtures/expected/code-table-receipt.test-cashregister-sale.pc858.hex +1 -1
  201. package/fixtures/expected/code-table-receipt.test-cashregister-sale.replacement.hex +1 -1
  202. package/fixtures/expected/code-table-receipt.test-cashregister-sale.wpc1252.hex +1 -1
  203. package/fixtures/expected/discount-lines.grid32.txt +1 -1
  204. package/fixtures/expected/discount-lines.grid48.txt +1 -1
  205. package/fixtures/expected/discount-lines.lines.json +1 -1
  206. package/fixtures/expected/discount-lines.sheet32.json +1 -1
  207. package/fixtures/expected/discount-lines.sheet48.json +1 -1
  208. package/fixtures/expected/discount-owner-tip.grid32.txt +1 -1
  209. package/fixtures/expected/discount-owner-tip.grid48.txt +1 -1
  210. package/fixtures/expected/discount-owner-tip.lines.json +1 -1
  211. package/fixtures/expected/discount-owner-tip.sheet32.json +1 -1
  212. package/fixtures/expected/discount-owner-tip.sheet48.json +1 -1
  213. package/fixtures/expected/discount-simple.grid32.txt +1 -1
  214. package/fixtures/expected/discount-simple.grid48.txt +1 -1
  215. package/fixtures/expected/discount-simple.lines.json +1 -1
  216. package/fixtures/expected/discount-simple.sheet32.json +1 -1
  217. package/fixtures/expected/discount-simple.sheet48.json +1 -1
  218. package/fixtures/expected/discount-tip.grid32.txt +1 -1
  219. package/fixtures/expected/discount-tip.grid48.txt +1 -1
  220. package/fixtures/expected/discount-tip.lines.json +1 -1
  221. package/fixtures/expected/discount-tip.sheet32.json +1 -1
  222. package/fixtures/expected/discount-tip.sheet48.json +1 -1
  223. package/fixtures/expected/discount-value-voucher.grid32.txt +1 -1
  224. package/fixtures/expected/discount-value-voucher.grid48.txt +1 -1
  225. package/fixtures/expected/discount-value-voucher.lines.json +1 -1
  226. package/fixtures/expected/discount-value-voucher.sheet32.json +1 -1
  227. package/fixtures/expected/discount-value-voucher.sheet48.json +1 -1
  228. package/fixtures/expected/duplicate.cancellation-full.hex +44 -0
  229. package/fixtures/expected/duplicate.cancellation-partial.hex +33 -0
  230. package/fixtures/expected/duplicate.sale-cash-mm58.hex +28 -0
  231. package/fixtures/expected/duplicate.sale-cash-twice.hex +35 -0
  232. package/fixtures/expected/duplicate.sale-cash.hex +35 -0
  233. package/fixtures/expected/duplicate.shift-close.hex +43 -0
  234. package/fixtures/expected/duplicate.summer-time-last-second.hex +28 -0
  235. package/fixtures/expected/duplicate.summer-time-start.hex +35 -0
  236. package/fixtures/expected/duplicate.test-cashregister-sale-logo.hex +189 -0
  237. package/fixtures/expected/duplicate.voucher-multi-purpose-redeem.hex +37 -0
  238. package/fixtures/expected/duplicate.voucher-service-redeem-logo.hex +119 -0
  239. package/fixtures/expected/duplicate.winter-time-first-second.hex +28 -0
  240. package/fixtures/expected/duplicate.zero-start.hex +40 -0
  241. package/fixtures/expected/long-item-name.grid32.txt +1 -1
  242. package/fixtures/expected/long-item-name.grid48.txt +1 -1
  243. package/fixtures/expected/long-item-name.lines.json +1 -1
  244. package/fixtures/expected/long-item-name.sheet32.json +1 -1
  245. package/fixtures/expected/long-item-name.sheet48.json +1 -1
  246. package/fixtures/expected/sale-card.grid32.txt +1 -1
  247. package/fixtures/expected/sale-card.grid48.txt +1 -1
  248. package/fixtures/expected/sale-card.lines.json +1 -1
  249. package/fixtures/expected/sale-card.sheet32.json +1 -1
  250. package/fixtures/expected/sale-card.sheet48.json +1 -1
  251. package/fixtures/expected/sale-cash.grid32.txt +1 -1
  252. package/fixtures/expected/sale-cash.grid48.txt +1 -1
  253. package/fixtures/expected/sale-cash.lines.json +1 -1
  254. package/fixtures/expected/sale-cash.sheet32.json +1 -1
  255. package/fixtures/expected/sale-cash.sheet48.json +1 -1
  256. package/fixtures/expected/sale-small-business.grid32.txt +1 -1
  257. package/fixtures/expected/sale-small-business.grid48.txt +1 -1
  258. package/fixtures/expected/sale-small-business.lines.json +1 -1
  259. package/fixtures/expected/sale-small-business.sheet32.json +1 -1
  260. package/fixtures/expected/sale-small-business.sheet48.json +1 -1
  261. package/fixtures/expected/signature-outage-sale.grid32.txt +1 -1
  262. package/fixtures/expected/signature-outage-sale.grid48.txt +1 -1
  263. package/fixtures/expected/signature-outage-sale.lines.json +1 -1
  264. package/fixtures/expected/signature-outage-sale.sheet32.json +1 -1
  265. package/fixtures/expected/signature-outage-sale.sheet48.json +1 -1
  266. package/fixtures/expected/split-card-card-cash.grid32.txt +1 -1
  267. package/fixtures/expected/split-card-card-cash.grid48.txt +1 -1
  268. package/fixtures/expected/split-card-card-cash.lines.json +1 -1
  269. package/fixtures/expected/split-card-card-cash.sheet32.json +1 -1
  270. package/fixtures/expected/split-card-card-cash.sheet48.json +1 -1
  271. package/fixtures/expected/split-cash-change.grid32.txt +1 -1
  272. package/fixtures/expected/split-cash-change.grid48.txt +1 -1
  273. package/fixtures/expected/split-cash-change.lines.json +1 -1
  274. package/fixtures/expected/split-cash-change.sheet32.json +1 -1
  275. package/fixtures/expected/split-cash-change.sheet48.json +1 -1
  276. package/fixtures/expected/split-long-amount.grid32.txt +1 -1
  277. package/fixtures/expected/split-long-amount.grid48.txt +1 -1
  278. package/fixtures/expected/split-long-amount.lines.json +1 -1
  279. package/fixtures/expected/split-long-amount.sheet32.json +1 -1
  280. package/fixtures/expected/split-long-amount.sheet48.json +1 -1
  281. package/fixtures/expected/split-one-card-tip.grid32.txt +1 -1
  282. package/fixtures/expected/split-one-card-tip.grid48.txt +1 -1
  283. package/fixtures/expected/split-one-card-tip.lines.json +1 -1
  284. package/fixtures/expected/split-one-card-tip.sheet32.json +1 -1
  285. package/fixtures/expected/split-one-card-tip.sheet48.json +1 -1
  286. package/fixtures/expected/split-table-round-tip.grid32.txt +1 -1
  287. package/fixtures/expected/split-table-round-tip.grid48.txt +1 -1
  288. package/fixtures/expected/split-table-round-tip.lines.json +1 -1
  289. package/fixtures/expected/split-table-round-tip.sheet32.json +1 -1
  290. package/fixtures/expected/split-table-round-tip.sheet48.json +1 -1
  291. package/fixtures/expected/split-tip-card.grid32.txt +1 -1
  292. package/fixtures/expected/split-tip-card.grid48.txt +1 -1
  293. package/fixtures/expected/split-tip-card.lines.json +1 -1
  294. package/fixtures/expected/split-tip-card.sheet32.json +1 -1
  295. package/fixtures/expected/split-tip-card.sheet48.json +1 -1
  296. package/fixtures/expected/split-two-cards-same-provider.grid32.txt +1 -1
  297. package/fixtures/expected/split-two-cards-same-provider.grid48.txt +1 -1
  298. package/fixtures/expected/split-two-cards-same-provider.lines.json +1 -1
  299. package/fixtures/expected/split-two-cards-same-provider.sheet32.json +1 -1
  300. package/fixtures/expected/split-two-cards-same-provider.sheet48.json +1 -1
  301. package/fixtures/expected/test-cashregister-sale.grid32.txt +1 -1
  302. package/fixtures/expected/test-cashregister-sale.grid48.txt +1 -1
  303. package/fixtures/expected/test-cashregister-sale.lines.json +1 -1
  304. package/fixtures/expected/test-cashregister-sale.sheet32.json +1 -1
  305. package/fixtures/expected/test-cashregister-sale.sheet48.json +1 -1
  306. package/fixtures/expected/test-signature-sale.grid32.txt +1 -1
  307. package/fixtures/expected/test-signature-sale.grid48.txt +1 -1
  308. package/fixtures/expected/test-signature-sale.lines.json +1 -1
  309. package/fixtures/expected/test-signature-sale.sheet32.json +1 -1
  310. package/fixtures/expected/test-signature-sale.sheet48.json +1 -1
  311. package/fixtures/expected/training.grid32.txt +1 -1
  312. package/fixtures/expected/training.grid48.txt +1 -1
  313. package/fixtures/expected/training.lines.json +1 -1
  314. package/fixtures/expected/training.sheet32.json +1 -1
  315. package/fixtures/expected/training.sheet48.json +1 -1
  316. package/fixtures/expected/voucher-multi-purpose-sale.grid32.txt +1 -2
  317. package/fixtures/expected/voucher-multi-purpose-sale.grid48.txt +1 -1
  318. package/fixtures/expected/voucher-multi-purpose-sale.lines.json +1 -1
  319. package/fixtures/expected/voucher-multi-purpose-sale.sheet32.json +1 -7
  320. package/fixtures/expected/voucher-multi-purpose-sale.sheet48.json +1 -1
  321. package/fixtures/expected/voucher-single-purpose-redeem-exempt.grid32.txt +1 -1
  322. package/fixtures/expected/voucher-single-purpose-redeem-exempt.grid48.txt +1 -1
  323. package/fixtures/expected/voucher-single-purpose-redeem-exempt.lines.json +1 -1
  324. package/fixtures/expected/voucher-single-purpose-redeem-exempt.sheet32.json +1 -1
  325. package/fixtures/expected/voucher-single-purpose-redeem-exempt.sheet48.json +1 -1
  326. package/fixtures/expected/voucher-single-purpose-redeem.grid32.txt +1 -1
  327. package/fixtures/expected/voucher-single-purpose-redeem.grid48.txt +1 -1
  328. package/fixtures/expected/voucher-single-purpose-redeem.lines.json +1 -1
  329. package/fixtures/expected/voucher-single-purpose-redeem.sheet32.json +1 -1
  330. package/fixtures/expected/voucher-single-purpose-redeem.sheet48.json +1 -1
  331. package/fixtures/expected/voucher-single-purpose-sale.grid32.txt +2 -3
  332. package/fixtures/expected/voucher-single-purpose-sale.grid48.txt +2 -2
  333. package/fixtures/expected/voucher-single-purpose-sale.lines.json +2 -2
  334. package/fixtures/expected/voucher-single-purpose-sale.sheet32.json +2 -8
  335. package/fixtures/expected/voucher-single-purpose-sale.sheet48.json +2 -2
  336. package/fixtures/expected/zero-annual.grid32.txt +1 -1
  337. package/fixtures/expected/zero-annual.grid48.txt +1 -1
  338. package/fixtures/expected/zero-annual.lines.json +1 -1
  339. package/fixtures/expected/zero-annual.sheet32.json +1 -1
  340. package/fixtures/expected/zero-annual.sheet48.json +1 -1
  341. package/fixtures/expected/zero-final.grid32.txt +1 -1
  342. package/fixtures/expected/zero-final.grid48.txt +1 -1
  343. package/fixtures/expected/zero-final.lines.json +1 -1
  344. package/fixtures/expected/zero-final.sheet32.json +1 -1
  345. package/fixtures/expected/zero-final.sheet48.json +1 -1
  346. package/fixtures/expected/zero-manual.grid32.txt +1 -1
  347. package/fixtures/expected/zero-manual.grid48.txt +1 -1
  348. package/fixtures/expected/zero-manual.lines.json +1 -1
  349. package/fixtures/expected/zero-manual.sheet32.json +1 -1
  350. package/fixtures/expected/zero-manual.sheet48.json +1 -1
  351. package/fixtures/expected/zero-monthly.grid32.txt +1 -1
  352. package/fixtures/expected/zero-monthly.grid48.txt +1 -1
  353. package/fixtures/expected/zero-monthly.lines.json +1 -1
  354. package/fixtures/expected/zero-monthly.sheet32.json +1 -1
  355. package/fixtures/expected/zero-monthly.sheet48.json +1 -1
  356. package/fixtures/expected/zero-outage-end.grid32.txt +1 -1
  357. package/fixtures/expected/zero-outage-end.grid48.txt +1 -1
  358. package/fixtures/expected/zero-outage-end.lines.json +1 -1
  359. package/fixtures/expected/zero-outage-end.sheet32.json +1 -1
  360. package/fixtures/expected/zero-outage-end.sheet48.json +1 -1
  361. package/fixtures/expected/zero-start.grid32.txt +1 -1
  362. package/fixtures/expected/zero-start.grid48.txt +1 -1
  363. package/fixtures/expected/zero-start.lines.json +1 -1
  364. package/fixtures/expected/zero-start.sheet32.json +1 -1
  365. package/fixtures/expected/zero-start.sheet48.json +1 -1
  366. package/fixtures/hobex-hps-codes.json +1 -1
  367. package/fixtures/invoice-api.schema.json +3 -2
  368. package/fixtures/invoice-texts.json +1 -1
  369. package/fixtures/manifest.json +260 -260
  370. package/fixtures/pos-texts.json +118 -1
  371. package/fixtures/receipt-due-voucher-generated.json +2 -2
  372. package/fixtures/receipt-outputs-cases.json +2778 -0
  373. package/fixtures/receipts/cancellation-discount.json +1 -1
  374. package/fixtures/receipts/cancellation-full.json +1 -1
  375. package/fixtures/receipts/cancellation-partial.json +1 -1
  376. package/fixtures/receipts/cancellation-split-full.json +1 -1
  377. package/fixtures/receipts/cancellation-split-partial.json +1 -1
  378. package/fixtures/receipts/card-custom.json +1 -1
  379. package/fixtures/receipts/card-gptom-ios.json +1 -1
  380. package/fixtures/receipts/card-gptom.json +1 -1
  381. package/fixtures/receipts/card-hobex-cloud.json +1 -1
  382. package/fixtures/receipts/card-hobex-hps.json +1 -1
  383. package/fixtures/receipts/card-mypos.json +1 -1
  384. package/fixtures/receipts/card-stripe-eps.json +1 -1
  385. package/fixtures/receipts/card-stripe.json +1 -1
  386. package/fixtures/receipts/card-sumup.json +1 -1
  387. package/fixtures/receipts/discount-lines.json +1 -1
  388. package/fixtures/receipts/discount-owner-tip.json +1 -1
  389. package/fixtures/receipts/discount-simple.json +1 -1
  390. package/fixtures/receipts/discount-tip.json +1 -1
  391. package/fixtures/receipts/discount-value-voucher.json +1 -1
  392. package/fixtures/receipts/long-item-name.json +1 -1
  393. package/fixtures/receipts/sale-card.json +1 -1
  394. package/fixtures/receipts/sale-cash.json +1 -1
  395. package/fixtures/receipts/sale-small-business.json +1 -1
  396. package/fixtures/receipts/signature-outage-sale.json +1 -1
  397. package/fixtures/receipts/split-card-card-cash.json +1 -1
  398. package/fixtures/receipts/split-cash-change.json +1 -1
  399. package/fixtures/receipts/split-long-amount.json +1 -1
  400. package/fixtures/receipts/split-one-card-tip.json +1 -1
  401. package/fixtures/receipts/split-table-round-tip.json +1 -1
  402. package/fixtures/receipts/split-tip-card.json +1 -1
  403. package/fixtures/receipts/split-two-cards-same-provider.json +1 -1
  404. package/fixtures/receipts/test-cashregister-sale.json +1 -1
  405. package/fixtures/receipts/test-signature-sale.json +1 -1
  406. package/fixtures/receipts/training.json +1 -1
  407. package/fixtures/receipts/zero-annual.json +1 -1
  408. package/fixtures/receipts/zero-final.json +1 -1
  409. package/fixtures/receipts/zero-manual.json +1 -1
  410. package/fixtures/receipts/zero-monthly.json +1 -1
  411. package/fixtures/receipts/zero-outage-end.json +1 -1
  412. package/fixtures/receipts/zero-start.json +1 -1
  413. package/fixtures/surface.json +30 -7
  414. package/fixtures/v3/README.md +10 -3
  415. package/fixtures/v3/antworten/belege.json +623 -125
  416. package/fixtures/v3/antworten/belegmail.json +2 -2
  417. package/fixtures/v3/antworten/kasse-belege.json +622 -122
  418. package/fixtures/v3/antworten/kasse.json +479 -38
  419. package/fixtures/v3/antworten/lager.json +1 -1
  420. package/fixtures/v3/antworten/rechnungen.json +4 -4
  421. package/fixtures/v3/antworten/storno.json +211 -3
  422. package/fixtures/v3/stored/belege.json +2 -2
  423. package/fixtures/v3/stored/kasse.json +262 -382
  424. package/fixtures/v3/stored/rechnungen.json +157 -17
  425. package/fixtures/v3/v3-vokabular.json +311 -28
  426. package/fixtures/v3/zahlbetrag-faelle.json +1070 -4
  427. package/package.json +3 -1
  428. package/dist/cjs/stored/gutscheine.d.ts +0 -3
  429. package/dist/cjs/stored/gutscheine.js +0 -60
  430. package/dist/esm/stored/gutscheine.d.ts +0 -3
  431. package/dist/esm/stored/gutscheine.js +0 -56
@@ -0,0 +1,211 @@
1
+ import { KeckPaymentMethod, ReceiptType } from '../enums/index.js';
2
+ import { type CancellationReason, type CancellationStatus, type Receipt, type ReceiptPayment, type ZeroKind } from '../models/index.js';
3
+ import type { InternerTransport } from './aufrufe.js';
4
+ /**
5
+ * Belege einer Kasse auflisten (`listReceipts`, nur unter `/v3`): ein Tag oder
6
+ * ein Zeitraum von hoechstens 31 Kalendertagen, Seite fuer Seite ueber einen
7
+ * undurchsichtigen Cursor. Nachfolger von `getReportV2` fuer Listen;
8
+ * `getReportV2` bleibt fuer Berichte.
9
+ *
10
+ * **Anmeldung wie `getReportV2`:** API-Schluessel plus `cashregister-token`
11
+ * (`apiKeyAuth`); die Kasse kommt aus dem Token, nie aus einem Parameter.
12
+ * Kassen-Bediener (Geraet + PIN) weist der Server ab; die Kasse hat dafuer
13
+ * `listMyReceipts` am Kassenweg. Dieses Paket bildet das nicht nach, wer darf,
14
+ * entscheidet allein das Backend.
15
+ *
16
+ * Zeiten sind die **Wiener Wanduhr** als Text, wie `timeStamp` am Beleg; der
17
+ * Server vergleicht sie als Text. Ein Tag ist ein Kalendertag, auch an den
18
+ * Tagen der Zeitumstellung, und die Grenze von 31 Tagen zaehlt Kalendertage,
19
+ * nicht 31 x 24 Stunden. Die Pruefung hier rechnet darum ohne Zeitzone, genau
20
+ * wie der Server (`beleg-liste-core.js`).
21
+ */
22
+ /** Ansicht einer Seite: `summary` eine schlanke Zeile je Beleg, `full` das gespeicherte Belegdokument. */
23
+ export declare const LIST_RECEIPTS_VIEWS: readonly ["summary", "full"];
24
+ export type ListReceiptsView = (typeof LIST_RECEIPTS_VIEWS)[number];
25
+ /** Reihenfolge: `desc` neueste zuerst (Vorgabe des Servers), `asc` aelteste zuerst. */
26
+ export declare const LIST_RECEIPTS_ORDERS: readonly ["desc", "asc"];
27
+ export type ListReceiptsOrder = (typeof LIST_RECEIPTS_ORDERS)[number];
28
+ /** Groesste Seite, die der Server liefert (`limit`); ohne Angabe nimmt er 100. */
29
+ export declare const LIST_RECEIPTS_LIMIT_MAX = 500;
30
+ /** Laengster Zeitraum in Kalendertagen (`to` hoechstens `from` + 31 Tage). */
31
+ export declare const LIST_RECEIPTS_DAYS_MAX = 31;
32
+ /**
33
+ * So viele Seiten holt [listAllReceipts] hoechstens, dann bricht er mit
34
+ * Fehler ab. Schutz gegen einen Cursor, der nie endet; mit der Seitengroesse
35
+ * des Helfers (500) sind das 50.000 Belege, mehr als jede Kasse in 31 Tagen
36
+ * ausstellt.
37
+ */
38
+ export declare const LIST_ALL_RECEIPTS_MAX_PAGES = 100;
39
+ /**
40
+ * Fehlercodes von `listReceipts` (`code` des [KasseneckApiError]), dazu die
41
+ * gemeinsamen Codes von Anmeldung und Rand (Kassen-Token, Live-Gate,
42
+ * API-Freigabe). Ein Code ausserhalb bleibt ueber `KasseneckApiError.code`
43
+ * lesbar. Die Regeln der ersten sieben prueft dieses Paket schon vor dem
44
+ * Senden (ausser `invalid_cursor`: ob ein Cursor zur Abfrage passt, weiss nur
45
+ * der Server).
46
+ */
47
+ export declare const LIST_RECEIPTS_ERROR_CODES: readonly ["invalid_date", "invalid_range", "range_too_long", "invalid_limit", "invalid_order", "invalid_view", "invalid_cursor", "server_error"];
48
+ export type ListReceiptsErrorCode = (typeof LIST_RECEIPTS_ERROR_CODES)[number];
49
+ /**
50
+ * Eingabe von [listReceipts]. Genau eine Form des Zeitfensters: `date` ODER
51
+ * `from` + `to`.
52
+ *
53
+ * - `date`: ein Wiener Tag, `YYYY-MM-DD` (00:00:00 bis zum Beginn des
54
+ * Folgetags). Nur mit `date` traegt die erste Seite `daySummary`.
55
+ * - `from` (einschliesslich) und `to` (ausschliesslich): `YYYY-MM-DD` oder
56
+ * `YYYY-MM-DDTHH:mm:ss`, Wiener Wanduhr ohne Zone. Ein reines Datum heisst
57
+ * Beginn dieses Tages; `to` liegt hoechstens 31 Kalendertage nach `from`.
58
+ *
59
+ * Mit `cursor` (dem `nextCursor` der Vorseite) muessen Zeitfenster, `order`
60
+ * und `view` gleich bleiben wie auf Seite 1, sonst antwortet der Server
61
+ * `invalid_cursor`; `limit` darf sich aendern.
62
+ */
63
+ export type ListReceiptsOptions<V extends ListReceiptsView = ListReceiptsView> = ListReceiptsWindow & {
64
+ /** Seitengroesse, ganze Zahl 1-500; ohne Angabe 100. */
65
+ limit?: number;
66
+ /** Ohne Angabe `desc` (neueste zuerst). */
67
+ order?: ListReceiptsOrder;
68
+ /** Ohne Angabe `summary`. */
69
+ view?: V;
70
+ /** `nextCursor` der vorigen Seite. */
71
+ cursor?: string;
72
+ };
73
+ /** Zeitfenster von [ListReceiptsOptions]: ein Tag oder ein Zeitraum. */
74
+ export type ListReceiptsWindow = {
75
+ date: string;
76
+ from?: undefined;
77
+ to?: undefined;
78
+ } | {
79
+ from: string;
80
+ to: string;
81
+ date?: undefined;
82
+ };
83
+ /** Brutto je RKSV-Satzgruppe in Cent (`amountRateStandard` bis `amountRateSpecial` am Beleg). */
84
+ export interface ListReceiptsGrossByRate {
85
+ standard: number;
86
+ reduced1: number;
87
+ reduced2: number;
88
+ zero: number;
89
+ special: number;
90
+ }
91
+ /**
92
+ * Zeile eines Belegs in [listReceipts] mit `view: 'summary'`. Betraege in
93
+ * ganzen Cent. Kein Layout, kein Kopf, keine Positionen und keine
94
+ * Pruefangaben: fuer die Detailansicht `getReceipt`, fuer die PDF
95
+ * `downloadReceipt` mit `fullReceiptId`.
96
+ *
97
+ * Nicht zu verwechseln mit [ReceiptSummary] von `listMyReceipts` (Kassenweg,
98
+ * andere Felder, Betrag dort aus Euro gerechnet).
99
+ *
100
+ * `receiptType` und `paymentMethod` sind wie ueberall beim Lesen der bekannte
101
+ * Enum-Eintrag oder der rohe Schluessel; ein Wert, den dieses Paket nicht
102
+ * kennt, laesst die Liste nicht scheitern.
103
+ */
104
+ export interface ListReceiptsSummary {
105
+ receiptId: string | null;
106
+ /** Fortlaufender Belegzaehler der Kasse; `null` bei Alt-Belegen. */
107
+ counter: number | null;
108
+ receiptType: ReceiptType | string | null;
109
+ /** Nur am Nullbeleg: Anlass (`manual`, wenn der Beleg keinen nennt); sonst `null`. */
110
+ zeroKind: ZeroKind | string | null;
111
+ /** Roher Belegzeitstempel (Wiener Wanduhr); Deutung ueber `parseServerTimeStamp`. */
112
+ timeStamp: string | null;
113
+ /** Summe von `grossByRateCents`; negativ am Storno-Beleg. */
114
+ totalCents: number;
115
+ grossByRateCents: ListReceiptsGrossByRate;
116
+ /** `mixed` bei mehreren Zahlungen (die stehen dann in `payments`). */
117
+ paymentMethod: KeckPaymentMethod | string | null;
118
+ /** Nur wenn der Beleg eine Zahlungsliste traegt; ohne Anbieterdaten. */
119
+ payments?: ReceiptPayment[];
120
+ /** Nur wenn der Beleg Trinkgeld traegt. */
121
+ tipCents?: number;
122
+ /** Bediener (nur der Name), oder `null`. */
123
+ operator: {
124
+ name: string;
125
+ } | null;
126
+ /** Nur am Storno-Beleg: das Original. */
127
+ cancellationOf: {
128
+ receiptId: string | null;
129
+ timeStamp: string | null;
130
+ } | null;
131
+ cancellationReason: CancellationReason | string | null;
132
+ /**
133
+ * Storno-Stand: `none`, `partial` oder `full` (nur an Normalbelegen anders
134
+ * als `none`). Ein Wert, den dieses Paket nicht kennt, kommt als
135
+ * `'unknown'` an, nie still als `none`: dann keinen Storno anbieten, bis
136
+ * der Beleg einzeln gelesen ist.
137
+ */
138
+ cancellationStatus: CancellationStatus | 'unknown';
139
+ /** Mit funktionierender Signatureinheit ausgestellt (`signatureSuccess !== false`). */
140
+ signatureOk: boolean;
141
+ /** Eigene Referenz des Aufrufers am Beleg, oder `null`. */
142
+ customProjectId: string | null;
143
+ /** Schluessel fuer `downloadReceipt` und den Beleg-Link, oder `null`. */
144
+ fullReceiptId: string | null;
145
+ }
146
+ /** Ein Beleg der Liste je Ansicht: `full` das Belegdokument wie bei `getReportV2`, sonst die Zeile. */
147
+ export type ListedReceipt<V extends ListReceiptsView = 'summary'> = V extends 'full' ? Receipt : ListReceiptsSummary;
148
+ /**
149
+ * Tagessumme aus der Tagesstatistik der Kasse, nur bei `date` und nur auf
150
+ * der ersten Seite. **Nicht die Summe der Liste:** `receiptCount` zaehlt jeden
151
+ * Beleg des Tages (auch Null-, Start- und Trainingsbelege), `revenueCents`
152
+ * nur Normal- und Storno-Belege, ohne Mitarbeiter-Trinkgeld und nach
153
+ * Aktionsrabatt. Wer die Liste summieren will, summiert die Liste.
154
+ */
155
+ export interface ListReceiptsDaySummary {
156
+ date: string;
157
+ receiptCount: number;
158
+ revenueCents: number;
159
+ /** Je Steuersatz (Basispunkte, 2000 = 20 %), hoechster zuerst; Saetze ohne Umsatz fehlen. */
160
+ revenueByRate: Array<{
161
+ rateBp: number;
162
+ grossCents: number;
163
+ }>;
164
+ }
165
+ /** Eine Seite von [listReceipts]. */
166
+ export interface ListReceiptsPage<V extends ListReceiptsView = 'summary'> {
167
+ receipts: Array<ListedReceipt<V>>;
168
+ /** Es gibt weitere Belege: mit `cursor: nextCursor` weiterlesen. */
169
+ hasMore: boolean;
170
+ /** `null`, wenn `hasMore` false ist. */
171
+ nextCursor: string | null;
172
+ /**
173
+ * Nur bei `date` auf der ersten Seite (ohne `cursor`); `null`, wenn es fuer
174
+ * den Tag keine Statistik gibt. Auf allen anderen Seiten fehlt das Feld.
175
+ */
176
+ daySummary?: ListReceiptsDaySummary | null;
177
+ }
178
+ /** Zeile `view: summary` vom Draht. */
179
+ export declare function fromListReceiptsSummaryPayload(payload: Record<string, unknown>): ListReceiptsSummary;
180
+ /**
181
+ * Eine Seite Belege der angemeldeten Kasse (`listReceipts`). Die Eingabe wird
182
+ * vor dem Senden nach den Regeln des Servers geprueft (genau eine Form des
183
+ * Zeitfensters, Datumsformat, hoechstens 31 Kalendertage, `limit` 1-500,
184
+ * `order`, `view`); ein Verstoss wirft [KasseneckValidationError] mit
185
+ * `scope: 'request'`, ohne dass etwas hinausgeht.
186
+ *
187
+ * Mit `view: 'full'` sind die Belege das gespeicherte Belegdokument
188
+ * ([Receipt], dieselbe Form wie `getReportV2`), sonst [ListReceiptsSummary].
189
+ * Alle Seiten auf einmal: [listAllReceipts].
190
+ */
191
+ export declare function listReceipts<V extends ListReceiptsView = 'summary'>(transport: InternerTransport, options: ListReceiptsOptions<V>): Promise<ListReceiptsPage<V>>;
192
+ /**
193
+ * Alle Belege eines Tages oder Zeitraums, Seite fuer Seite: holt mit
194
+ * [listReceipts] die erste Seite, dann mit `cursor: nextCursor` und
195
+ * demselben Zeitfenster, `order` und `view` jede weitere, und liefert jeden
196
+ * Beleg einzeln, in der Reihenfolge des Servers. Jeder Beleg des Fensters
197
+ * kommt genau einmal.
198
+ *
199
+ * Ohne `limit` holt der Helfer Seiten zu 500 (weniger Aufrufe als die
200
+ * Vorgabe 100 des Servers). Mit `cursor` setzt er an dieser Stelle fort.
201
+ *
202
+ * Ein Fehler auf irgendeiner Seite bricht ab (der Fehler kommt im
203
+ * `for await` an); die bis dahin gelieferten Belege bleiben gueltig. Nach
204
+ * [LIST_ALL_RECEIPTS_MAX_PAGES] Seiten, oder wenn der Server denselben
205
+ * Cursor zweimal nennt, bricht er mit [KasseneckValidationError]
206
+ * (`scope: 'response'`) ab, statt endlos zu laufen.
207
+ *
208
+ * `daySummary` liefert der Helfer nicht; wer sie braucht, ruft die erste
209
+ * Seite mit [listReceipts].
210
+ */
211
+ export declare function listAllReceipts<V extends ListReceiptsView = 'summary'>(transport: InternerTransport, options: ListReceiptsOptions<V>): AsyncGenerator<ListedReceipt<V>, void, undefined>;
@@ -0,0 +1,290 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LIST_RECEIPTS_ERROR_CODES = exports.LIST_ALL_RECEIPTS_MAX_PAGES = exports.LIST_RECEIPTS_DAYS_MAX = exports.LIST_RECEIPTS_LIMIT_MAX = exports.LIST_RECEIPTS_ORDERS = exports.LIST_RECEIPTS_VIEWS = void 0;
4
+ exports.fromListReceiptsSummaryPayload = fromListReceiptsSummaryPayload;
5
+ exports.listReceipts = listReceipts;
6
+ exports.listAllReceipts = listAllReceipts;
7
+ const index_js_1 = require("../enums/index.js");
8
+ const index_js_2 = require("../models/index.js");
9
+ const enum_payload_js_1 = require("../models/enum-payload.js");
10
+ const errors_js_1 = require("./errors.js");
11
+ /**
12
+ * Belege einer Kasse auflisten (`listReceipts`, nur unter `/v3`): ein Tag oder
13
+ * ein Zeitraum von hoechstens 31 Kalendertagen, Seite fuer Seite ueber einen
14
+ * undurchsichtigen Cursor. Nachfolger von `getReportV2` fuer Listen;
15
+ * `getReportV2` bleibt fuer Berichte.
16
+ *
17
+ * **Anmeldung wie `getReportV2`:** API-Schluessel plus `cashregister-token`
18
+ * (`apiKeyAuth`); die Kasse kommt aus dem Token, nie aus einem Parameter.
19
+ * Kassen-Bediener (Geraet + PIN) weist der Server ab; die Kasse hat dafuer
20
+ * `listMyReceipts` am Kassenweg. Dieses Paket bildet das nicht nach, wer darf,
21
+ * entscheidet allein das Backend.
22
+ *
23
+ * Zeiten sind die **Wiener Wanduhr** als Text, wie `timeStamp` am Beleg; der
24
+ * Server vergleicht sie als Text. Ein Tag ist ein Kalendertag, auch an den
25
+ * Tagen der Zeitumstellung, und die Grenze von 31 Tagen zaehlt Kalendertage,
26
+ * nicht 31 x 24 Stunden. Die Pruefung hier rechnet darum ohne Zeitzone, genau
27
+ * wie der Server (`beleg-liste-core.js`).
28
+ */
29
+ /** Ansicht einer Seite: `summary` eine schlanke Zeile je Beleg, `full` das gespeicherte Belegdokument. */
30
+ exports.LIST_RECEIPTS_VIEWS = Object.freeze(['summary', 'full']);
31
+ /** Reihenfolge: `desc` neueste zuerst (Vorgabe des Servers), `asc` aelteste zuerst. */
32
+ exports.LIST_RECEIPTS_ORDERS = Object.freeze(['desc', 'asc']);
33
+ /** Groesste Seite, die der Server liefert (`limit`); ohne Angabe nimmt er 100. */
34
+ exports.LIST_RECEIPTS_LIMIT_MAX = 500;
35
+ /** Laengster Zeitraum in Kalendertagen (`to` hoechstens `from` + 31 Tage). */
36
+ exports.LIST_RECEIPTS_DAYS_MAX = 31;
37
+ /**
38
+ * So viele Seiten holt [listAllReceipts] hoechstens, dann bricht er mit
39
+ * Fehler ab. Schutz gegen einen Cursor, der nie endet; mit der Seitengroesse
40
+ * des Helfers (500) sind das 50.000 Belege, mehr als jede Kasse in 31 Tagen
41
+ * ausstellt.
42
+ */
43
+ exports.LIST_ALL_RECEIPTS_MAX_PAGES = 100;
44
+ /**
45
+ * Fehlercodes von `listReceipts` (`code` des [KasseneckApiError]), dazu die
46
+ * gemeinsamen Codes von Anmeldung und Rand (Kassen-Token, Live-Gate,
47
+ * API-Freigabe). Ein Code ausserhalb bleibt ueber `KasseneckApiError.code`
48
+ * lesbar. Die Regeln der ersten sieben prueft dieses Paket schon vor dem
49
+ * Senden (ausser `invalid_cursor`: ob ein Cursor zur Abfrage passt, weiss nur
50
+ * der Server).
51
+ */
52
+ exports.LIST_RECEIPTS_ERROR_CODES = Object.freeze([
53
+ 'invalid_date', // kein Datum JJJJ-MM-TT bzw. Zeitpunkt JJJJ-MM-TTThh:mm:ss, oder unmoeglich (2026-02-30)
54
+ 'invalid_range', // nicht genau eine Form (date ODER from + to), oder to nicht nach from
55
+ 'range_too_long', // mehr als 31 Kalendertage
56
+ 'invalid_limit', // keine ganze Zahl von 1 bis 500 (der Server kappt nie still)
57
+ 'invalid_order', // weder desc noch asc
58
+ 'invalid_view', // weder summary noch full
59
+ 'invalid_cursor', // veraendert, fremde Kasse, oder Zeitfenster/order/view anders als auf Seite 1
60
+ 'server_error',
61
+ ]);
62
+ const TAG = /^(\d{4})-(\d{2})-(\d{2})$/;
63
+ const ZEIT = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})$/;
64
+ /** Kalendertag als UTC-Mitternacht (nur zum Rechnen mit Tagen; auch fuer Jahre unter 100). */
65
+ function utcTag(jahr, monat, tag) {
66
+ const d = new Date(Date.UTC(2000, 0, 1));
67
+ d.setUTCFullYear(jahr, monat - 1, tag);
68
+ return d;
69
+ }
70
+ /** Ein echtes Kalenderdatum (2026-02-30 nicht)? */
71
+ function kalendertag(jahr, monat, tag) {
72
+ const d = utcTag(jahr, monat, tag);
73
+ return d.getUTCFullYear() === jahr && d.getUTCMonth() === monat - 1 && d.getUTCDate() === tag;
74
+ }
75
+ const zwei = (n) => String(n).padStart(2, '0');
76
+ /** Wanduhr-Text `YYYY-MM-DDTHH:mm:ss` aus einem Tag oder Zeitpunkt; sonst `null`. */
77
+ function wanduhr(wert) {
78
+ if (typeof wert !== 'string')
79
+ return null;
80
+ const t = TAG.exec(wert);
81
+ if (t)
82
+ return kalendertag(+t[1], +t[2], +t[3]) ? `${wert}T00:00:00` : null;
83
+ const z = ZEIT.exec(wert);
84
+ if (z && kalendertag(+z[1], +z[2], +z[3]) && +z[4] <= 23 && +z[5] <= 59 && +z[6] <= 59)
85
+ return wert;
86
+ return null;
87
+ }
88
+ /** Wanduhr-Text plus ganze Kalendertage, Uhrzeit bleibt (ohne Zeitzone gerechnet). */
89
+ function plusTage(zeit, tage) {
90
+ const [datum, uhr] = zeit.split('T');
91
+ const [j, m, t] = datum.split('-').map(Number);
92
+ const d = utcTag(j, m, t + tage);
93
+ return `${String(d.getUTCFullYear()).padStart(4, '0')}-${zwei(d.getUTCMonth() + 1)}-${zwei(d.getUTCDate())}T${uhr}`;
94
+ }
95
+ const gesetzt = (v) => v !== undefined && v !== null;
96
+ /** Fehler in der Eingabe des Aufrufers: es geht keine Anfrage raus. */
97
+ function eingabefehler(grund) {
98
+ return new errors_js_1.KasseneckValidationError('listReceipts', grund, 'request');
99
+ }
100
+ /** Antwort meldet Erfolg, traegt aber nicht, was der Aufruf zusagt. */
101
+ function antwortfehler(grund) {
102
+ return new errors_js_1.KasseneckValidationError('listReceipts', grund, 'response');
103
+ }
104
+ /**
105
+ * Prueft die Eingabe nach den Regeln des Servers und gibt die Parameter
106
+ * zurueck, die hinausgehen (nur gesetzte Felder, Werte unveraendert, damit
107
+ * Folgeseiten dasselbe Fenster senden).
108
+ */
109
+ function parameter(options) {
110
+ if (options == null || typeof options !== 'object')
111
+ throw eingabefehler('Optionen fehlen (date oder from und to)');
112
+ const o = options;
113
+ const raus = {};
114
+ if (gesetzt(o.date)) {
115
+ if (gesetzt(o.from) || gesetzt(o.to))
116
+ throw eingabefehler('entweder date oder from und to angeben, nicht beides');
117
+ if (typeof o.date !== 'string' || !TAG.test(o.date) || wanduhr(o.date) === null) {
118
+ throw eingabefehler(`date muss ein Datum YYYY-MM-DD sein, war "${String(o.date)}"`);
119
+ }
120
+ raus['date'] = o.date;
121
+ }
122
+ else {
123
+ if (!gesetzt(o.from) || !gesetzt(o.to))
124
+ throw eingabefehler('Zeitraum fehlt: date oder from und to angeben');
125
+ const von = wanduhr(o.from);
126
+ if (von === null)
127
+ throw eingabefehler(`from muss YYYY-MM-DD oder YYYY-MM-DDTHH:mm:ss sein, war "${String(o.from)}"`);
128
+ const bis = wanduhr(o.to);
129
+ if (bis === null)
130
+ throw eingabefehler(`to muss YYYY-MM-DD oder YYYY-MM-DDTHH:mm:ss sein, war "${String(o.to)}"`);
131
+ if (bis <= von)
132
+ throw eingabefehler('to muss nach from liegen (to ist ausschliesslich)');
133
+ if (bis > plusTage(von, exports.LIST_RECEIPTS_DAYS_MAX)) {
134
+ throw eingabefehler(`Zeitraum hoechstens ${exports.LIST_RECEIPTS_DAYS_MAX} Kalendertage (to hoechstens from + ${exports.LIST_RECEIPTS_DAYS_MAX} Tage)`);
135
+ }
136
+ raus['from'] = o.from;
137
+ raus['to'] = o.to;
138
+ }
139
+ if (gesetzt(o.limit)) {
140
+ if (!Number.isInteger(o.limit) || o.limit < 1 || o.limit > exports.LIST_RECEIPTS_LIMIT_MAX) {
141
+ throw eingabefehler(`limit muss eine ganze Zahl von 1 bis ${exports.LIST_RECEIPTS_LIMIT_MAX} sein, war "${String(o.limit)}"`);
142
+ }
143
+ raus['limit'] = o.limit;
144
+ }
145
+ if (gesetzt(o.order)) {
146
+ if (!exports.LIST_RECEIPTS_ORDERS.includes(o.order))
147
+ throw eingabefehler(`order muss desc oder asc sein, war "${String(o.order)}"`);
148
+ raus['order'] = o.order;
149
+ }
150
+ if (gesetzt(o.view)) {
151
+ if (!exports.LIST_RECEIPTS_VIEWS.includes(o.view))
152
+ throw eingabefehler(`view muss summary oder full sein, war "${String(o.view)}"`);
153
+ raus['view'] = o.view;
154
+ }
155
+ if (gesetzt(o.cursor)) {
156
+ if (typeof o.cursor !== 'string' || o.cursor === '')
157
+ throw eingabefehler('cursor muss der nextCursor der vorigen Seite sein (nicht leerer Text)');
158
+ raus['cursor'] = o.cursor;
159
+ }
160
+ return raus;
161
+ }
162
+ const istObjekt = (w) => w != null && typeof w === 'object' && !Array.isArray(w);
163
+ const text = (w) => (typeof w === 'string' ? w : null);
164
+ // Ganze Cent; ein einzelner unbrauchbarer Betrag laesst die Liste nicht scheitern.
165
+ const cent = (w) => (typeof w === 'number' && Number.isInteger(w) ? w : 0);
166
+ function istStornoStand(w) {
167
+ return typeof w === 'string' && index_js_2.CANCELLATION_STATUSES.includes(w);
168
+ }
169
+ /** Zeile `view: summary` vom Draht. */
170
+ function fromListReceiptsSummaryPayload(payload) {
171
+ const brutto = istObjekt(payload['grossByRateCents']) ? payload['grossByRateCents'] : {};
172
+ const bediener = payload['operator'];
173
+ const bezug = payload['cancellationOf'];
174
+ return {
175
+ receiptId: text(payload['receiptId']),
176
+ counter: typeof payload['counter'] === 'number' ? payload['counter'] : null,
177
+ receiptType: typeof payload['receiptType'] === 'string' ? (0, enum_payload_js_1.readEnumKey)(index_js_1.ReceiptType, payload['receiptType']) : null,
178
+ zeroKind: text(payload['zeroKind']),
179
+ timeStamp: text(payload['timeStamp']),
180
+ totalCents: cent(payload['totalCents']),
181
+ grossByRateCents: {
182
+ standard: cent(brutto['standard']),
183
+ reduced1: cent(brutto['reduced1']),
184
+ reduced2: cent(brutto['reduced2']),
185
+ zero: cent(brutto['zero']),
186
+ special: cent(brutto['special']),
187
+ },
188
+ paymentMethod: typeof payload['paymentMethod'] === 'string' ? (0, enum_payload_js_1.readEnumKey)(index_js_1.KeckPaymentMethod, payload['paymentMethod']) : null,
189
+ ...(Array.isArray(payload['payments'])
190
+ ? { payments: payload['payments'].filter(istObjekt).map((z) => (0, index_js_2.fromReceiptPaymentPayload)(z)) }
191
+ : {}),
192
+ ...(typeof payload['tipCents'] === 'number' ? { tipCents: payload['tipCents'] } : {}),
193
+ operator: istObjekt(bediener) ? { name: typeof bediener['name'] === 'string' ? bediener['name'] : '' } : null,
194
+ cancellationOf: istObjekt(bezug) ? { receiptId: text(bezug['receiptId']), timeStamp: text(bezug['timeStamp']) } : null,
195
+ cancellationReason: text(payload['cancellationReason']),
196
+ cancellationStatus: istStornoStand(payload['cancellationStatus']) ? payload['cancellationStatus'] : 'unknown',
197
+ signatureOk: payload['signatureOk'] !== false,
198
+ customProjectId: text(payload['customProjectId']),
199
+ fullReceiptId: text(payload['fullReceiptId']),
200
+ };
201
+ }
202
+ function tagessumme(roh) {
203
+ if (roh === null)
204
+ return null;
205
+ if (!istObjekt(roh))
206
+ throw antwortfehler('daySummary ist weder ein Objekt noch null');
207
+ const saetze = Array.isArray(roh['revenueByRate']) ? roh['revenueByRate'] : [];
208
+ return {
209
+ date: typeof roh['date'] === 'string' ? roh['date'] : '',
210
+ receiptCount: cent(roh['receiptCount']),
211
+ revenueCents: cent(roh['revenueCents']),
212
+ revenueByRate: saetze.filter(istObjekt).map((z) => ({ rateBp: cent(z['rateBp']), grossCents: cent(z['grossCents']) })),
213
+ };
214
+ }
215
+ /**
216
+ * Eine Seite Belege der angemeldeten Kasse (`listReceipts`). Die Eingabe wird
217
+ * vor dem Senden nach den Regeln des Servers geprueft (genau eine Form des
218
+ * Zeitfensters, Datumsformat, hoechstens 31 Kalendertage, `limit` 1-500,
219
+ * `order`, `view`); ein Verstoss wirft [KasseneckValidationError] mit
220
+ * `scope: 'request'`, ohne dass etwas hinausgeht.
221
+ *
222
+ * Mit `view: 'full'` sind die Belege das gespeicherte Belegdokument
223
+ * ([Receipt], dieselbe Form wie `getReportV2`), sonst [ListReceiptsSummary].
224
+ * Alle Seiten auf einmal: [listAllReceipts].
225
+ */
226
+ async function listReceipts(transport, options) {
227
+ const params = parameter(options);
228
+ const voll = params['view'] === 'full';
229
+ const daten = await transport('listReceipts', params);
230
+ if (!istObjekt(daten))
231
+ throw antwortfehler('Antwort enthaelt keine Daten (data fehlt)');
232
+ const liste = daten['receipts'];
233
+ if (!Array.isArray(liste) || liste.some((b) => !istObjekt(b))) {
234
+ throw antwortfehler('Antwort enthaelt keine Belegliste (data.receipts fehlt)');
235
+ }
236
+ if (typeof daten['hasMore'] !== 'boolean')
237
+ throw antwortfehler('Antwort ohne hasMore');
238
+ const weiter = daten['nextCursor'];
239
+ // Ein `hasMore` ohne Cursor liesse den Aufrufer ratlos (oder einen Blaetterer im Kreis laufen).
240
+ if (daten['hasMore'] ? typeof weiter !== 'string' || weiter === '' : weiter !== null) {
241
+ throw antwortfehler('nextCursor passt nicht zu hasMore (Text bei hasMore, sonst null)');
242
+ }
243
+ const receipts = (voll
244
+ ? liste.map((b) => (0, index_js_2.fromReceiptPayload)(b))
245
+ : liste.map((b) => fromListReceiptsSummaryPayload(b)));
246
+ return {
247
+ receipts,
248
+ hasMore: daten['hasMore'],
249
+ nextCursor: daten['hasMore'] ? weiter : null,
250
+ ...('daySummary' in daten ? { daySummary: tagessumme(daten['daySummary']) } : {}),
251
+ };
252
+ }
253
+ /**
254
+ * Alle Belege eines Tages oder Zeitraums, Seite fuer Seite: holt mit
255
+ * [listReceipts] die erste Seite, dann mit `cursor: nextCursor` und
256
+ * demselben Zeitfenster, `order` und `view` jede weitere, und liefert jeden
257
+ * Beleg einzeln, in der Reihenfolge des Servers. Jeder Beleg des Fensters
258
+ * kommt genau einmal.
259
+ *
260
+ * Ohne `limit` holt der Helfer Seiten zu 500 (weniger Aufrufe als die
261
+ * Vorgabe 100 des Servers). Mit `cursor` setzt er an dieser Stelle fort.
262
+ *
263
+ * Ein Fehler auf irgendeiner Seite bricht ab (der Fehler kommt im
264
+ * `for await` an); die bis dahin gelieferten Belege bleiben gueltig. Nach
265
+ * [LIST_ALL_RECEIPTS_MAX_PAGES] Seiten, oder wenn der Server denselben
266
+ * Cursor zweimal nennt, bricht er mit [KasseneckValidationError]
267
+ * (`scope: 'response'`) ab, statt endlos zu laufen.
268
+ *
269
+ * `daySummary` liefert der Helfer nicht; wer sie braucht, ruft die erste
270
+ * Seite mit [listReceipts].
271
+ */
272
+ async function* listAllReceipts(transport, options) {
273
+ // Frueh pruefen: ein Eingabefehler kommt beim ersten Schritt an, vor jedem Aufruf.
274
+ parameter(options);
275
+ const grund = { ...options, limit: options.limit ?? exports.LIST_RECEIPTS_LIMIT_MAX };
276
+ let cursor = options.cursor;
277
+ const gesehen = new Set();
278
+ for (let seite = 1; seite <= exports.LIST_ALL_RECEIPTS_MAX_PAGES; seite++) {
279
+ const page = await listReceipts(transport, { ...grund, cursor });
280
+ yield* page.receipts;
281
+ if (!page.hasMore)
282
+ return;
283
+ const weiter = page.nextCursor;
284
+ if (gesehen.has(weiter) || weiter === cursor)
285
+ throw antwortfehler('Server nennt denselben Cursor erneut; Abbruch statt Endlosschleife');
286
+ gesehen.add(weiter);
287
+ cursor = weiter;
288
+ }
289
+ throw antwortfehler(`mehr als ${exports.LIST_ALL_RECEIPTS_MAX_PAGES} Seiten; Zeitfenster kleiner waehlen`);
290
+ }
@@ -1,5 +1,6 @@
1
1
  import { ReceiptType, type ReceiptTypeKey, KeckPaymentMethod, type KeckPaymentMethodKey } from '../enums/index.js';
2
2
  import { type Receipt, type ReceiptCompany, type ReceiptItem, type Voucher, type ReceiptSummary, type ReportMonth, type CancellationItem, type CancellationOf, type CancellationReason, type TipRefundSource, type ReturnDisposition, type ReceiptPaymentInput, type RegistrationInfo, type ReceiptEmailVia } from '../models/index.js';
3
+ import { type ReceiptOutput, type ReceiptOutputEntryErrorCode, type ReceiptOutputLogKind, type ReceiptOutputResult } from '../models/receipt-output.js';
3
4
  import type { InternerTransport } from './aufrufe.js';
4
5
  import { type ReceiptLayout } from '../receipt/layout.js';
5
6
  import type { PosPaperSize } from '../printing/escpos.js';
@@ -140,8 +141,9 @@ export type CancelReceiptOptions = {
140
141
  /**
141
142
  * Rueckzahlung je Zahlung (Betraege negativ, `refundOf` = `id` der
142
143
  * Originalzahlung). Ohne Angabe spiegelt der Server die Restbetraege jeder
143
- * Originalzahlung; ein Teilstorno eines Belegs mit mehreren Zahlungen
144
- * braucht sie (`cancellation_payments_required`).
144
+ * Originalzahlung (Ausnahme Storno einer Gutschein-Auszahlung: genau eine
145
+ * positive Barzahlung ohne `refundOf`); ein Teilstorno eines Belegs mit
146
+ * mehreren Zahlungen braucht sie (`cancellation_payments_required`).
145
147
  *
146
148
  * **Karten-Storno:** `provider`, `providerPaymentId` und `providerData`
147
149
  * beschreiben die ERSTATTUNG am Terminal, nie die Originalzahlung. Die
@@ -216,6 +218,13 @@ export interface ReceiptWithCompany {
216
218
  * setzen das Logo in genau dieser Stufe; fehlt der Wert, gilt `M`.
217
219
  */
218
220
  logoScale: SheetLogoSize;
221
+ /**
222
+ * Ausgaben des Belegs (`data.outputs`, nur `getReceipt` unter `/v3`): die
223
+ * neuesten 20, neueste zuerst. Fehlt, wenn die Antwort keine Liste traegt
224
+ * (Verkauf, `/api`). Gelesen nach [ReceiptOutput]; ein kaputter Eintrag
225
+ * faellt weg, der Beleg bleibt lesbar.
226
+ */
227
+ outputs?: ReceiptOutput[];
219
228
  }
220
229
  /**
221
230
  * Das Zeilenmodell zum Drucken und Anzeigen eines Belegs aus einer Antwort.
@@ -402,6 +411,80 @@ export interface SendReceiptEmailResult {
402
411
  * eine zweite Mail und zaehlt auf die Schleuse.
403
412
  */
404
413
  export declare function sendReceiptEmail(transport: InternerTransport, options: SendReceiptEmailOptions): Promise<SendReceiptEmailResult>;
414
+ /**
415
+ * Eine Ausgabe, wie die Kasse sie puffert und meldet: ein Druck oder ein
416
+ * Teilen des Belegs. Siehe [logReceiptOutputs].
417
+ */
418
+ export interface ReceiptOutputEntry {
419
+ /**
420
+ * Idempotenzschluessel des Eintrags, am Geraet beim Puffern vergeben und
421
+ * beim Nachsenden unveraendert: ein zweites Melden legt keinen zweiten
422
+ * Eintrag an. 8–64 Zeichen `[A-Za-z0-9_-]` (Regel des Servers); ein anderer
423
+ * Schluessel wirft vor dem Senden.
424
+ */
425
+ key: string;
426
+ /** Beleg in der Kasse der Anmeldung; ein Beleg einer anderen Kasse ist `receipt_not_found`. */
427
+ receiptId: string;
428
+ /** `print` (Erstdruck), `reprint` (Duplikat, gedruckt mit `markAsDuplicate`), `link_shared`, `pdf_shared`. */
429
+ kind: ReceiptOutputLogKind;
430
+ /**
431
+ * Zeitpunkt am Geraet: Millisekunden seit 1970 oder ISO 8601 **mit Zone**
432
+ * (`new Date().toISOString()`); Text ohne Zone wirft vor dem Senden. Eine
433
+ * falsch gehende Geraeteuhr lehnt der Server nicht ab: er klemmt die Zeit auf
434
+ * Belegzeit bis Eingang.
435
+ */
436
+ at: number | string;
437
+ /**
438
+ * Ergebnis eines Drucks: `ok`, `failed` (sicher nicht gedruckt) oder
439
+ * `unclear` (Ausgang offen). Pflicht bei `print` und `reprint` (sonst lehnt
440
+ * der Server den Eintrag mit `validation` ab); beim Teilen ohne Angabe `ok`.
441
+ */
442
+ result?: ReceiptOutputResult;
443
+ }
444
+ /** Eingabe von [logReceiptOutputs]. Die Kasse bindet die Anmeldung (wie bei [sendReceiptEmail]). */
445
+ export interface LogReceiptOutputsOptions {
446
+ /** 1–50 Eintraege ([RECEIPT_OUTPUT_ENTRIES_MAX]); ein groesserer Puffer geht in mehreren Aufrufen hinaus. */
447
+ entries: ReceiptOutputEntry[];
448
+ }
449
+ /** Ein abgelehnter Eintrag: dauerhaft, aus dem Puffer nehmen und nicht noch einmal senden. */
450
+ export interface RejectedReceiptOutput {
451
+ key: string;
452
+ /** Aus [RECEIPT_OUTPUT_ENTRY_ERROR_CODES]; ein Code, den das Paket nicht kennt, bleibt lesbar. */
453
+ code: ReceiptOutputEntryErrorCode | (string & {});
454
+ }
455
+ /** Antwort von [logReceiptOutputs]. */
456
+ export interface LogReceiptOutputsResult {
457
+ /** Angenommene Eintraege, auch die schon frueher gemeldeten (gleicher Schluessel). */
458
+ accepted: number;
459
+ rejected: RejectedReceiptOutput[];
460
+ }
461
+ /**
462
+ * Meldet Drucke und das Teilen eines Belegs an das Protokoll „Ausgaben“
463
+ * (Endpunkt `logReceiptOutputs`, nur ueber den Kassenweg `/api/v3`; mit
464
+ * `registerUserAuth` und mit `apiKeyAuth`). Registrierkassen-Erlass
465
+ * BMF-AV Nr. 2/2026, Abschnitt 4.2: die Belegerteilung ist zu dokumentieren.
466
+ * Der Beleg selbst bleibt unberuehrt; das Protokoll steht nie im DEP.
467
+ *
468
+ * **Ein Eintrag scheitert nie die anderen.** Der Server nimmt jeden Eintrag
469
+ * einzeln an oder lehnt ihn mit Code ab (`rejected`, Codes
470
+ * [RECEIPT_OUTPUT_ENTRY_ERROR_CODES]); nach einer Erfolgsantwort ist jeder
471
+ * gesendete Eintrag erledigt. Die Kasse puffert die Eintraege (offline,
472
+ * Neustart) und sendet sie spaeter; der Puffer blockiert nie Druck oder Teilen.
473
+ *
474
+ * **Wiederholen ist gefahrlos:** jeder Eintrag traegt seinen Schluessel. Bei
475
+ * unklarem Ausgang (`outcome: 'unknown'`) dieselben Eintraege mit denselben
476
+ * Schluesseln noch einmal senden.
477
+ *
478
+ * **Vor dem Senden abgewiesen** wird nur, was die ganze Anfrage scheitern
479
+ * liesse oder ohne Netz sicher falsch ist: keine oder mehr als 50 Eintraege,
480
+ * ein unbekanntes Feld (oben oder im Eintrag), ein fehlender Beleg, ein
481
+ * Schluessel ausserhalb der Regel des Servers, eine Art oder ein Ergebnis
482
+ * ausserhalb des Katalogs, eine Zeit, die weder ganze Millisekunden noch
483
+ * ISO 8601 mit Zone ist. `email` und `opened` gehen hinaus und kommen als
484
+ * `invalid_output_kind` zurueck: so verwirft der Puffer genau diesen Eintrag.
485
+ * Fehler der ganzen Anfrage: [RECEIPT_OUTPUT_ERROR_CODES].
486
+ */
487
+ export declare function logReceiptOutputs(transport: InternerTransport, options: LogReceiptOutputsOptions): Promise<LogReceiptOutputsResult>;
405
488
  /**
406
489
  * Prueft die Gutschein-Kombination eines Belegs und liefert den ersten
407
490
  * Regelverstoss als Text (oder `null`) — Zwilling von