@kreiseck/kasseneck-api 1.13.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 +23 -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 +114 -0
  32. package/dist/cjs/pos/texte.js +64 -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 +114 -0
  78. package/dist/esm/pos/texte.js +63 -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 +118 -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
@@ -0,0 +1,2778 @@
1
+ {
2
+ "version": 1,
3
+ "_note": "Receipt outputs (Ausgaben eines Belegs). `outputs`: `input` is `data.outputs` of a getReceipt answer as received; `expected` is the list the package reads from it (null when it is no list; an entry without non-empty text kind, at and result is dropped; by is {id, name} with name null when not text, or null without a non-empty text id; count only as a safe whole number from 0; unknown kind or result kept), `labels` is receiptOutputLabel of each expected entry (null for an unknown kind; opened without a whole count from 1 counts as 1). `requests`: `entries` as given to logReceiptOutputs; `expected.sent` is the request body (without cashregisterId, which the sign-in adds), or `expected.error` the rejection before sending (scope request, reason of the first failing check; an unknown field reads `entries[i]: unbekanntes Feld \"<name>\"`). Written by `npm run fixtures:ausgaben`.",
4
+ "outputs": [
5
+ {
6
+ "name": "contract_get_receipt_with_outputs",
7
+ "input": [
8
+ {
9
+ "at": "2026-09-26T10:04:00+02:00",
10
+ "kind": "reprint",
11
+ "result": "unclear",
12
+ "by": {
13
+ "id": "ru_livia",
14
+ "name": "Livia Lindmayr"
15
+ }
16
+ },
17
+ {
18
+ "at": "2026-09-26T10:03:00+02:00",
19
+ "kind": "opened",
20
+ "result": "ok",
21
+ "by": null,
22
+ "count": 3
23
+ },
24
+ {
25
+ "at": "2026-09-26T10:02:00+02:00",
26
+ "kind": "email",
27
+ "result": "ok",
28
+ "by": {
29
+ "id": "ru_livia",
30
+ "name": "Livia Lindmayr"
31
+ }
32
+ },
33
+ {
34
+ "at": "2026-09-26T10:00:05+02:00",
35
+ "kind": "print",
36
+ "result": "ok",
37
+ "by": {
38
+ "id": "ru_livia",
39
+ "name": "Livia Lindmayr"
40
+ }
41
+ }
42
+ ],
43
+ "expected": [
44
+ {
45
+ "kind": "reprint",
46
+ "at": "2026-09-26T10:04:00+02:00",
47
+ "result": "unclear",
48
+ "by": {
49
+ "id": "ru_livia",
50
+ "name": "Livia Lindmayr"
51
+ }
52
+ },
53
+ {
54
+ "kind": "opened",
55
+ "at": "2026-09-26T10:03:00+02:00",
56
+ "result": "ok",
57
+ "by": null,
58
+ "count": 3
59
+ },
60
+ {
61
+ "kind": "email",
62
+ "at": "2026-09-26T10:02:00+02:00",
63
+ "result": "ok",
64
+ "by": {
65
+ "id": "ru_livia",
66
+ "name": "Livia Lindmayr"
67
+ }
68
+ },
69
+ {
70
+ "kind": "print",
71
+ "at": "2026-09-26T10:00:05+02:00",
72
+ "result": "ok",
73
+ "by": {
74
+ "id": "ru_livia",
75
+ "name": "Livia Lindmayr"
76
+ }
77
+ }
78
+ ],
79
+ "labels": [
80
+ "Duplikat",
81
+ "Link geöffnet (3×)",
82
+ "E-Mail",
83
+ "Erstdruck"
84
+ ]
85
+ },
86
+ {
87
+ "name": "not_a_list_object",
88
+ "input": {
89
+ "kind": "print"
90
+ },
91
+ "expected": null,
92
+ "labels": null
93
+ },
94
+ {
95
+ "name": "not_a_list_none",
96
+ "input": null,
97
+ "expected": null,
98
+ "labels": null
99
+ },
100
+ {
101
+ "name": "not_a_list_text",
102
+ "input": "print",
103
+ "expected": null,
104
+ "labels": null
105
+ },
106
+ {
107
+ "name": "empty_list",
108
+ "input": [],
109
+ "expected": [],
110
+ "labels": []
111
+ },
112
+ {
113
+ "name": "broken_entries_dropped",
114
+ "input": [
115
+ {
116
+ "kind": "print",
117
+ "at": "2026-09-26T10:00:00+02:00",
118
+ "result": "ok",
119
+ "by": {
120
+ "id": "ru_livia",
121
+ "name": "Livia Lindmayr"
122
+ }
123
+ },
124
+ null,
125
+ "print",
126
+ 42,
127
+ [
128
+ {
129
+ "kind": "print",
130
+ "at": "2026-09-26T10:00:00+02:00",
131
+ "result": "ok",
132
+ "by": null
133
+ }
134
+ ],
135
+ {
136
+ "at": "2026-09-26T10:01:00+02:00",
137
+ "result": "ok",
138
+ "by": null
139
+ },
140
+ {
141
+ "kind": "",
142
+ "at": "2026-09-26T10:01:00+02:00",
143
+ "result": "ok",
144
+ "by": null
145
+ },
146
+ {
147
+ "kind": "reprint",
148
+ "at": 5,
149
+ "result": "ok",
150
+ "by": null
151
+ },
152
+ {
153
+ "kind": "reprint",
154
+ "at": "",
155
+ "result": "ok",
156
+ "by": null
157
+ },
158
+ {
159
+ "kind": "reprint",
160
+ "at": "2026-09-26T10:02:00+02:00",
161
+ "by": null
162
+ },
163
+ {
164
+ "kind": "reprint",
165
+ "at": "2026-09-26T10:02:00+02:00",
166
+ "result": "",
167
+ "by": null
168
+ },
169
+ {
170
+ "kind": 7,
171
+ "at": "2026-09-26T10:02:00+02:00",
172
+ "result": "ok",
173
+ "by": null
174
+ },
175
+ {
176
+ "kind": "email",
177
+ "at": "2026-09-26T10:03:00+02:00",
178
+ "result": "ok",
179
+ "by": {
180
+ "id": "ru_livia",
181
+ "name": "Livia Lindmayr"
182
+ },
183
+ "extra": true
184
+ }
185
+ ],
186
+ "expected": [
187
+ {
188
+ "kind": "print",
189
+ "at": "2026-09-26T10:00:00+02:00",
190
+ "result": "ok",
191
+ "by": {
192
+ "id": "ru_livia",
193
+ "name": "Livia Lindmayr"
194
+ }
195
+ },
196
+ {
197
+ "kind": "email",
198
+ "at": "2026-09-26T10:03:00+02:00",
199
+ "result": "ok",
200
+ "by": {
201
+ "id": "ru_livia",
202
+ "name": "Livia Lindmayr"
203
+ }
204
+ }
205
+ ],
206
+ "labels": [
207
+ "Erstdruck",
208
+ "E-Mail"
209
+ ]
210
+ },
211
+ {
212
+ "name": "unknown_kind_and_result_kept",
213
+ "input": [
214
+ {
215
+ "kind": "fax",
216
+ "at": "2026-09-26T10:01:00+02:00",
217
+ "result": "pending",
218
+ "by": {
219
+ "id": "ru_livia"
220
+ }
221
+ },
222
+ {
223
+ "kind": "print",
224
+ "at": "2026-09-26T10:02:00+02:00",
225
+ "result": "queued",
226
+ "by": {
227
+ "id": "ru_livia",
228
+ "name": "Livia Lindmayr"
229
+ }
230
+ },
231
+ {
232
+ "kind": "constructor",
233
+ "at": "2026-09-26T10:03:00+02:00",
234
+ "result": "ok",
235
+ "by": null
236
+ },
237
+ {
238
+ "kind": "__proto__",
239
+ "at": "2026-09-26T10:03:00+02:00",
240
+ "result": "ok",
241
+ "by": null
242
+ },
243
+ {
244
+ "kind": "toString",
245
+ "at": "2026-09-26T10:03:00+02:00",
246
+ "result": "ok",
247
+ "by": null
248
+ },
249
+ {
250
+ "kind": "outputs_title",
251
+ "at": "2026-09-26T10:03:00+02:00",
252
+ "result": "ok",
253
+ "by": null
254
+ }
255
+ ],
256
+ "expected": [
257
+ {
258
+ "kind": "fax",
259
+ "at": "2026-09-26T10:01:00+02:00",
260
+ "result": "pending",
261
+ "by": {
262
+ "id": "ru_livia",
263
+ "name": null
264
+ }
265
+ },
266
+ {
267
+ "kind": "print",
268
+ "at": "2026-09-26T10:02:00+02:00",
269
+ "result": "queued",
270
+ "by": {
271
+ "id": "ru_livia",
272
+ "name": "Livia Lindmayr"
273
+ }
274
+ },
275
+ {
276
+ "kind": "constructor",
277
+ "at": "2026-09-26T10:03:00+02:00",
278
+ "result": "ok",
279
+ "by": null
280
+ },
281
+ {
282
+ "kind": "__proto__",
283
+ "at": "2026-09-26T10:03:00+02:00",
284
+ "result": "ok",
285
+ "by": null
286
+ },
287
+ {
288
+ "kind": "toString",
289
+ "at": "2026-09-26T10:03:00+02:00",
290
+ "result": "ok",
291
+ "by": null
292
+ },
293
+ {
294
+ "kind": "outputs_title",
295
+ "at": "2026-09-26T10:03:00+02:00",
296
+ "result": "ok",
297
+ "by": null
298
+ }
299
+ ],
300
+ "labels": [
301
+ null,
302
+ "Erstdruck",
303
+ null,
304
+ null,
305
+ null,
306
+ null
307
+ ]
308
+ },
309
+ {
310
+ "name": "actor_rules",
311
+ "input": [
312
+ {
313
+ "kind": "print",
314
+ "at": "2026-09-26T10:00:00+02:00",
315
+ "result": "ok",
316
+ "by": {
317
+ "id": "ru_livia",
318
+ "name": "Livia Lindmayr"
319
+ }
320
+ },
321
+ {
322
+ "kind": "print",
323
+ "at": "2026-09-26T10:01:00+02:00",
324
+ "result": "ok",
325
+ "by": {
326
+ "id": "ru_livia"
327
+ }
328
+ },
329
+ {
330
+ "kind": "print",
331
+ "at": "2026-09-26T10:02:00+02:00",
332
+ "result": "ok",
333
+ "by": {
334
+ "id": "ru_livia",
335
+ "name": 3
336
+ }
337
+ },
338
+ {
339
+ "kind": "print",
340
+ "at": "2026-09-26T10:03:00+02:00",
341
+ "result": "ok",
342
+ "by": {
343
+ "id": "kr_account",
344
+ "name": null
345
+ }
346
+ },
347
+ {
348
+ "kind": "print",
349
+ "at": "2026-09-26T10:04:00+02:00",
350
+ "result": "ok",
351
+ "by": {
352
+ "name": "ohne Kennung"
353
+ }
354
+ },
355
+ {
356
+ "kind": "print",
357
+ "at": "2026-09-26T10:05:00+02:00",
358
+ "result": "ok",
359
+ "by": {
360
+ "id": "",
361
+ "name": "leere Kennung"
362
+ }
363
+ },
364
+ {
365
+ "kind": "print",
366
+ "at": "2026-09-26T10:06:00+02:00",
367
+ "result": "ok",
368
+ "by": {
369
+ "id": 42
370
+ }
371
+ },
372
+ {
373
+ "kind": "print",
374
+ "at": "2026-09-26T10:07:00+02:00",
375
+ "result": "ok",
376
+ "by": "ru_livia"
377
+ },
378
+ {
379
+ "kind": "print",
380
+ "at": "2026-09-26T10:08:00+02:00",
381
+ "result": "ok",
382
+ "by": [
383
+ "ru_livia"
384
+ ]
385
+ },
386
+ {
387
+ "kind": "print",
388
+ "at": "2026-09-26T10:09:00+02:00",
389
+ "result": "ok"
390
+ }
391
+ ],
392
+ "expected": [
393
+ {
394
+ "kind": "print",
395
+ "at": "2026-09-26T10:00:00+02:00",
396
+ "result": "ok",
397
+ "by": {
398
+ "id": "ru_livia",
399
+ "name": "Livia Lindmayr"
400
+ }
401
+ },
402
+ {
403
+ "kind": "print",
404
+ "at": "2026-09-26T10:01:00+02:00",
405
+ "result": "ok",
406
+ "by": {
407
+ "id": "ru_livia",
408
+ "name": null
409
+ }
410
+ },
411
+ {
412
+ "kind": "print",
413
+ "at": "2026-09-26T10:02:00+02:00",
414
+ "result": "ok",
415
+ "by": {
416
+ "id": "ru_livia",
417
+ "name": null
418
+ }
419
+ },
420
+ {
421
+ "kind": "print",
422
+ "at": "2026-09-26T10:03:00+02:00",
423
+ "result": "ok",
424
+ "by": {
425
+ "id": "kr_account",
426
+ "name": null
427
+ }
428
+ },
429
+ {
430
+ "kind": "print",
431
+ "at": "2026-09-26T10:04:00+02:00",
432
+ "result": "ok",
433
+ "by": null
434
+ },
435
+ {
436
+ "kind": "print",
437
+ "at": "2026-09-26T10:05:00+02:00",
438
+ "result": "ok",
439
+ "by": null
440
+ },
441
+ {
442
+ "kind": "print",
443
+ "at": "2026-09-26T10:06:00+02:00",
444
+ "result": "ok",
445
+ "by": null
446
+ },
447
+ {
448
+ "kind": "print",
449
+ "at": "2026-09-26T10:07:00+02:00",
450
+ "result": "ok",
451
+ "by": null
452
+ },
453
+ {
454
+ "kind": "print",
455
+ "at": "2026-09-26T10:08:00+02:00",
456
+ "result": "ok",
457
+ "by": null
458
+ },
459
+ {
460
+ "kind": "print",
461
+ "at": "2026-09-26T10:09:00+02:00",
462
+ "result": "ok",
463
+ "by": null
464
+ }
465
+ ],
466
+ "labels": [
467
+ "Erstdruck",
468
+ "Erstdruck",
469
+ "Erstdruck",
470
+ "Erstdruck",
471
+ "Erstdruck",
472
+ "Erstdruck",
473
+ "Erstdruck",
474
+ "Erstdruck",
475
+ "Erstdruck",
476
+ "Erstdruck"
477
+ ]
478
+ },
479
+ {
480
+ "name": "count_rules",
481
+ "input": [
482
+ {
483
+ "kind": "opened",
484
+ "at": "2026-09-26T10:00:00+02:00",
485
+ "result": "ok",
486
+ "by": null,
487
+ "count": 40
488
+ },
489
+ {
490
+ "kind": "opened",
491
+ "at": "2026-09-26T10:01:00+02:00",
492
+ "result": "ok",
493
+ "by": null,
494
+ "count": 1
495
+ },
496
+ {
497
+ "kind": "opened",
498
+ "at": "2026-09-26T10:02:00+02:00",
499
+ "result": "ok",
500
+ "by": null,
501
+ "count": 0
502
+ },
503
+ {
504
+ "kind": "opened",
505
+ "at": "2026-09-26T10:03:00+02:00",
506
+ "result": "ok",
507
+ "by": null,
508
+ "count": -2
509
+ },
510
+ {
511
+ "kind": "opened",
512
+ "at": "2026-09-26T10:04:00+02:00",
513
+ "result": "ok",
514
+ "by": null,
515
+ "count": 1.5
516
+ },
517
+ {
518
+ "kind": "opened",
519
+ "at": "2026-09-26T10:05:00+02:00",
520
+ "result": "ok",
521
+ "by": null,
522
+ "count": "3"
523
+ },
524
+ {
525
+ "kind": "opened",
526
+ "at": "2026-09-26T10:06:00+02:00",
527
+ "result": "ok",
528
+ "by": null,
529
+ "count": null
530
+ },
531
+ {
532
+ "kind": "opened",
533
+ "at": "2026-09-26T10:07:00+02:00",
534
+ "result": "ok",
535
+ "by": null
536
+ },
537
+ {
538
+ "kind": "opened",
539
+ "at": "2026-09-26T10:08:00+02:00",
540
+ "result": "ok",
541
+ "by": null,
542
+ "count": 9007199254740992
543
+ },
544
+ {
545
+ "kind": "print",
546
+ "at": "2026-09-26T10:09:00+02:00",
547
+ "result": "ok",
548
+ "by": {
549
+ "id": "ru_livia",
550
+ "name": "Livia Lindmayr"
551
+ },
552
+ "count": 2
553
+ }
554
+ ],
555
+ "expected": [
556
+ {
557
+ "kind": "opened",
558
+ "at": "2026-09-26T10:00:00+02:00",
559
+ "result": "ok",
560
+ "by": null,
561
+ "count": 40
562
+ },
563
+ {
564
+ "kind": "opened",
565
+ "at": "2026-09-26T10:01:00+02:00",
566
+ "result": "ok",
567
+ "by": null,
568
+ "count": 1
569
+ },
570
+ {
571
+ "kind": "opened",
572
+ "at": "2026-09-26T10:02:00+02:00",
573
+ "result": "ok",
574
+ "by": null,
575
+ "count": 0
576
+ },
577
+ {
578
+ "kind": "opened",
579
+ "at": "2026-09-26T10:03:00+02:00",
580
+ "result": "ok",
581
+ "by": null
582
+ },
583
+ {
584
+ "kind": "opened",
585
+ "at": "2026-09-26T10:04:00+02:00",
586
+ "result": "ok",
587
+ "by": null
588
+ },
589
+ {
590
+ "kind": "opened",
591
+ "at": "2026-09-26T10:05:00+02:00",
592
+ "result": "ok",
593
+ "by": null
594
+ },
595
+ {
596
+ "kind": "opened",
597
+ "at": "2026-09-26T10:06:00+02:00",
598
+ "result": "ok",
599
+ "by": null
600
+ },
601
+ {
602
+ "kind": "opened",
603
+ "at": "2026-09-26T10:07:00+02:00",
604
+ "result": "ok",
605
+ "by": null
606
+ },
607
+ {
608
+ "kind": "opened",
609
+ "at": "2026-09-26T10:08:00+02:00",
610
+ "result": "ok",
611
+ "by": null
612
+ },
613
+ {
614
+ "kind": "print",
615
+ "at": "2026-09-26T10:09:00+02:00",
616
+ "result": "ok",
617
+ "by": {
618
+ "id": "ru_livia",
619
+ "name": "Livia Lindmayr"
620
+ },
621
+ "count": 2
622
+ }
623
+ ],
624
+ "labels": [
625
+ "Link geöffnet (40×)",
626
+ "Link geöffnet (1×)",
627
+ "Link geöffnet (1×)",
628
+ "Link geöffnet (1×)",
629
+ "Link geöffnet (1×)",
630
+ "Link geöffnet (1×)",
631
+ "Link geöffnet (1×)",
632
+ "Link geöffnet (1×)",
633
+ "Link geöffnet (1×)",
634
+ "Erstdruck"
635
+ ]
636
+ },
637
+ {
638
+ "name": "label_only_kind",
639
+ "input": [
640
+ {
641
+ "kind": "print",
642
+ "at": "2026-09-26T10:00:00+02:00",
643
+ "result": "failed",
644
+ "by": {
645
+ "id": "ru_livia",
646
+ "name": "Livia Lindmayr"
647
+ }
648
+ },
649
+ {
650
+ "kind": "reprint",
651
+ "at": "2026-09-26T10:01:00+02:00",
652
+ "result": "unclear",
653
+ "by": {
654
+ "id": "ru_livia",
655
+ "name": "Livia Lindmayr"
656
+ }
657
+ },
658
+ {
659
+ "kind": "link_shared",
660
+ "at": "2026-09-26T10:02:00+02:00",
661
+ "result": "ok",
662
+ "by": {
663
+ "id": "ru_livia",
664
+ "name": "Livia Lindmayr"
665
+ }
666
+ },
667
+ {
668
+ "kind": "pdf_shared",
669
+ "at": "2026-09-26T10:03:00+02:00",
670
+ "result": "ok",
671
+ "by": {
672
+ "id": "ru_livia",
673
+ "name": "Livia Lindmayr"
674
+ }
675
+ },
676
+ {
677
+ "kind": "email",
678
+ "at": "2026-09-26T10:04:00+02:00",
679
+ "result": "ok",
680
+ "by": {
681
+ "id": "ru_livia",
682
+ "name": "Livia Lindmayr"
683
+ }
684
+ }
685
+ ],
686
+ "expected": [
687
+ {
688
+ "kind": "print",
689
+ "at": "2026-09-26T10:00:00+02:00",
690
+ "result": "failed",
691
+ "by": {
692
+ "id": "ru_livia",
693
+ "name": "Livia Lindmayr"
694
+ }
695
+ },
696
+ {
697
+ "kind": "reprint",
698
+ "at": "2026-09-26T10:01:00+02:00",
699
+ "result": "unclear",
700
+ "by": {
701
+ "id": "ru_livia",
702
+ "name": "Livia Lindmayr"
703
+ }
704
+ },
705
+ {
706
+ "kind": "link_shared",
707
+ "at": "2026-09-26T10:02:00+02:00",
708
+ "result": "ok",
709
+ "by": {
710
+ "id": "ru_livia",
711
+ "name": "Livia Lindmayr"
712
+ }
713
+ },
714
+ {
715
+ "kind": "pdf_shared",
716
+ "at": "2026-09-26T10:03:00+02:00",
717
+ "result": "ok",
718
+ "by": {
719
+ "id": "ru_livia",
720
+ "name": "Livia Lindmayr"
721
+ }
722
+ },
723
+ {
724
+ "kind": "email",
725
+ "at": "2026-09-26T10:04:00+02:00",
726
+ "result": "ok",
727
+ "by": {
728
+ "id": "ru_livia",
729
+ "name": "Livia Lindmayr"
730
+ }
731
+ }
732
+ ],
733
+ "labels": [
734
+ "Erstdruck",
735
+ "Duplikat",
736
+ "Link geteilt",
737
+ "PDF geteilt",
738
+ "E-Mail"
739
+ ]
740
+ }
741
+ ],
742
+ "requests": [
743
+ {
744
+ "name": "contract_mixed",
745
+ "entries": [
746
+ {
747
+ "key": "mail-0001",
748
+ "receiptId": "KASSE1-ID-7",
749
+ "at": 1790409599000,
750
+ "kind": "email",
751
+ "result": "ok"
752
+ },
753
+ {
754
+ "key": "abruf-0001",
755
+ "receiptId": "KASSE1-ID-7",
756
+ "at": 1790409599000,
757
+ "kind": "opened",
758
+ "result": "ok"
759
+ },
760
+ {
761
+ "key": "fremd-0001",
762
+ "receiptId": "KASSE3-ID-1",
763
+ "at": 1790409599000,
764
+ "kind": "print",
765
+ "result": "ok"
766
+ },
767
+ {
768
+ "key": "zeit-0001",
769
+ "receiptId": "KASSE1-ID-7",
770
+ "at": 1790410200000,
771
+ "kind": "print",
772
+ "result": "ok"
773
+ },
774
+ {
775
+ "key": "kurz",
776
+ "receiptId": "KASSE1-ID-7",
777
+ "at": 1790409599000,
778
+ "kind": "print",
779
+ "result": "ok"
780
+ },
781
+ {
782
+ "key": "druck-0009",
783
+ "receiptId": "KASSE1-ID-7",
784
+ "at": 1790409599000,
785
+ "kind": "reprint"
786
+ },
787
+ {
788
+ "key": "druck-0010",
789
+ "receiptId": "KASSE1-ID-7",
790
+ "at": 1790409599000,
791
+ "kind": "reprint",
792
+ "result": "failed"
793
+ }
794
+ ],
795
+ "expected": {
796
+ "error": {
797
+ "scope": "request",
798
+ "reason": "entries[4].key muss 8–64 Zeichen [A-Za-z0-9_-] haben"
799
+ }
800
+ }
801
+ },
802
+ {
803
+ "name": "contract_mixed_without_short_key",
804
+ "entries": [
805
+ {
806
+ "key": "mail-0001",
807
+ "receiptId": "KASSE1-ID-7",
808
+ "at": 1790409599000,
809
+ "kind": "email",
810
+ "result": "ok"
811
+ },
812
+ {
813
+ "key": "abruf-0001",
814
+ "receiptId": "KASSE1-ID-7",
815
+ "at": 1790409599000,
816
+ "kind": "opened",
817
+ "result": "ok"
818
+ },
819
+ {
820
+ "key": "fremd-0001",
821
+ "receiptId": "KASSE3-ID-1",
822
+ "at": 1790409599000,
823
+ "kind": "print",
824
+ "result": "ok"
825
+ },
826
+ {
827
+ "key": "zeit-0001",
828
+ "receiptId": "KASSE1-ID-7",
829
+ "at": 1790410200000,
830
+ "kind": "print",
831
+ "result": "ok"
832
+ },
833
+ {
834
+ "key": "druck-0009",
835
+ "receiptId": "KASSE1-ID-7",
836
+ "at": 1790409599000,
837
+ "kind": "reprint"
838
+ },
839
+ {
840
+ "key": "druck-0010",
841
+ "receiptId": "KASSE1-ID-7",
842
+ "at": 1790409599000,
843
+ "kind": "reprint",
844
+ "result": "failed"
845
+ }
846
+ ],
847
+ "expected": {
848
+ "sent": {
849
+ "entries": [
850
+ {
851
+ "key": "mail-0001",
852
+ "receiptId": "KASSE1-ID-7",
853
+ "at": 1790409599000,
854
+ "kind": "email",
855
+ "result": "ok"
856
+ },
857
+ {
858
+ "key": "abruf-0001",
859
+ "receiptId": "KASSE1-ID-7",
860
+ "at": 1790409599000,
861
+ "kind": "opened",
862
+ "result": "ok"
863
+ },
864
+ {
865
+ "key": "fremd-0001",
866
+ "receiptId": "KASSE3-ID-1",
867
+ "at": 1790409599000,
868
+ "kind": "print",
869
+ "result": "ok"
870
+ },
871
+ {
872
+ "key": "zeit-0001",
873
+ "receiptId": "KASSE1-ID-7",
874
+ "at": 1790410200000,
875
+ "kind": "print",
876
+ "result": "ok"
877
+ },
878
+ {
879
+ "key": "druck-0009",
880
+ "receiptId": "KASSE1-ID-7",
881
+ "at": 1790409599000,
882
+ "kind": "reprint"
883
+ },
884
+ {
885
+ "key": "druck-0010",
886
+ "receiptId": "KASSE1-ID-7",
887
+ "at": 1790409599000,
888
+ "kind": "reprint",
889
+ "result": "failed"
890
+ }
891
+ ]
892
+ }
893
+ }
894
+ },
895
+ {
896
+ "name": "one_entry",
897
+ "entries": [
898
+ {
899
+ "key": "print-0001",
900
+ "receiptId": "KASSE1-ID-7",
901
+ "at": "2026-09-26T09:58:00+02:00",
902
+ "kind": "print",
903
+ "result": "ok"
904
+ }
905
+ ],
906
+ "expected": {
907
+ "sent": {
908
+ "entries": [
909
+ {
910
+ "key": "print-0001",
911
+ "receiptId": "KASSE1-ID-7",
912
+ "at": "2026-09-26T09:58:00+02:00",
913
+ "kind": "print",
914
+ "result": "ok"
915
+ }
916
+ ]
917
+ }
918
+ }
919
+ },
920
+ {
921
+ "name": "no_entries",
922
+ "entries": [],
923
+ "expected": {
924
+ "error": {
925
+ "scope": "request",
926
+ "reason": "entries muss 1–50 Eintraege haben"
927
+ }
928
+ }
929
+ },
930
+ {
931
+ "name": "max_entries",
932
+ "entries": [
933
+ {
934
+ "receiptId": "KASSE1-ID-7",
935
+ "at": 1790409570000,
936
+ "kind": "link_shared",
937
+ "key": "share-1000"
938
+ },
939
+ {
940
+ "receiptId": "KASSE1-ID-7",
941
+ "at": 1790409570000,
942
+ "kind": "link_shared",
943
+ "key": "share-1001"
944
+ },
945
+ {
946
+ "receiptId": "KASSE1-ID-7",
947
+ "at": 1790409570000,
948
+ "kind": "link_shared",
949
+ "key": "share-1002"
950
+ },
951
+ {
952
+ "receiptId": "KASSE1-ID-7",
953
+ "at": 1790409570000,
954
+ "kind": "link_shared",
955
+ "key": "share-1003"
956
+ },
957
+ {
958
+ "receiptId": "KASSE1-ID-7",
959
+ "at": 1790409570000,
960
+ "kind": "link_shared",
961
+ "key": "share-1004"
962
+ },
963
+ {
964
+ "receiptId": "KASSE1-ID-7",
965
+ "at": 1790409570000,
966
+ "kind": "link_shared",
967
+ "key": "share-1005"
968
+ },
969
+ {
970
+ "receiptId": "KASSE1-ID-7",
971
+ "at": 1790409570000,
972
+ "kind": "link_shared",
973
+ "key": "share-1006"
974
+ },
975
+ {
976
+ "receiptId": "KASSE1-ID-7",
977
+ "at": 1790409570000,
978
+ "kind": "link_shared",
979
+ "key": "share-1007"
980
+ },
981
+ {
982
+ "receiptId": "KASSE1-ID-7",
983
+ "at": 1790409570000,
984
+ "kind": "link_shared",
985
+ "key": "share-1008"
986
+ },
987
+ {
988
+ "receiptId": "KASSE1-ID-7",
989
+ "at": 1790409570000,
990
+ "kind": "link_shared",
991
+ "key": "share-1009"
992
+ },
993
+ {
994
+ "receiptId": "KASSE1-ID-7",
995
+ "at": 1790409570000,
996
+ "kind": "link_shared",
997
+ "key": "share-1010"
998
+ },
999
+ {
1000
+ "receiptId": "KASSE1-ID-7",
1001
+ "at": 1790409570000,
1002
+ "kind": "link_shared",
1003
+ "key": "share-1011"
1004
+ },
1005
+ {
1006
+ "receiptId": "KASSE1-ID-7",
1007
+ "at": 1790409570000,
1008
+ "kind": "link_shared",
1009
+ "key": "share-1012"
1010
+ },
1011
+ {
1012
+ "receiptId": "KASSE1-ID-7",
1013
+ "at": 1790409570000,
1014
+ "kind": "link_shared",
1015
+ "key": "share-1013"
1016
+ },
1017
+ {
1018
+ "receiptId": "KASSE1-ID-7",
1019
+ "at": 1790409570000,
1020
+ "kind": "link_shared",
1021
+ "key": "share-1014"
1022
+ },
1023
+ {
1024
+ "receiptId": "KASSE1-ID-7",
1025
+ "at": 1790409570000,
1026
+ "kind": "link_shared",
1027
+ "key": "share-1015"
1028
+ },
1029
+ {
1030
+ "receiptId": "KASSE1-ID-7",
1031
+ "at": 1790409570000,
1032
+ "kind": "link_shared",
1033
+ "key": "share-1016"
1034
+ },
1035
+ {
1036
+ "receiptId": "KASSE1-ID-7",
1037
+ "at": 1790409570000,
1038
+ "kind": "link_shared",
1039
+ "key": "share-1017"
1040
+ },
1041
+ {
1042
+ "receiptId": "KASSE1-ID-7",
1043
+ "at": 1790409570000,
1044
+ "kind": "link_shared",
1045
+ "key": "share-1018"
1046
+ },
1047
+ {
1048
+ "receiptId": "KASSE1-ID-7",
1049
+ "at": 1790409570000,
1050
+ "kind": "link_shared",
1051
+ "key": "share-1019"
1052
+ },
1053
+ {
1054
+ "receiptId": "KASSE1-ID-7",
1055
+ "at": 1790409570000,
1056
+ "kind": "link_shared",
1057
+ "key": "share-1020"
1058
+ },
1059
+ {
1060
+ "receiptId": "KASSE1-ID-7",
1061
+ "at": 1790409570000,
1062
+ "kind": "link_shared",
1063
+ "key": "share-1021"
1064
+ },
1065
+ {
1066
+ "receiptId": "KASSE1-ID-7",
1067
+ "at": 1790409570000,
1068
+ "kind": "link_shared",
1069
+ "key": "share-1022"
1070
+ },
1071
+ {
1072
+ "receiptId": "KASSE1-ID-7",
1073
+ "at": 1790409570000,
1074
+ "kind": "link_shared",
1075
+ "key": "share-1023"
1076
+ },
1077
+ {
1078
+ "receiptId": "KASSE1-ID-7",
1079
+ "at": 1790409570000,
1080
+ "kind": "link_shared",
1081
+ "key": "share-1024"
1082
+ },
1083
+ {
1084
+ "receiptId": "KASSE1-ID-7",
1085
+ "at": 1790409570000,
1086
+ "kind": "link_shared",
1087
+ "key": "share-1025"
1088
+ },
1089
+ {
1090
+ "receiptId": "KASSE1-ID-7",
1091
+ "at": 1790409570000,
1092
+ "kind": "link_shared",
1093
+ "key": "share-1026"
1094
+ },
1095
+ {
1096
+ "receiptId": "KASSE1-ID-7",
1097
+ "at": 1790409570000,
1098
+ "kind": "link_shared",
1099
+ "key": "share-1027"
1100
+ },
1101
+ {
1102
+ "receiptId": "KASSE1-ID-7",
1103
+ "at": 1790409570000,
1104
+ "kind": "link_shared",
1105
+ "key": "share-1028"
1106
+ },
1107
+ {
1108
+ "receiptId": "KASSE1-ID-7",
1109
+ "at": 1790409570000,
1110
+ "kind": "link_shared",
1111
+ "key": "share-1029"
1112
+ },
1113
+ {
1114
+ "receiptId": "KASSE1-ID-7",
1115
+ "at": 1790409570000,
1116
+ "kind": "link_shared",
1117
+ "key": "share-1030"
1118
+ },
1119
+ {
1120
+ "receiptId": "KASSE1-ID-7",
1121
+ "at": 1790409570000,
1122
+ "kind": "link_shared",
1123
+ "key": "share-1031"
1124
+ },
1125
+ {
1126
+ "receiptId": "KASSE1-ID-7",
1127
+ "at": 1790409570000,
1128
+ "kind": "link_shared",
1129
+ "key": "share-1032"
1130
+ },
1131
+ {
1132
+ "receiptId": "KASSE1-ID-7",
1133
+ "at": 1790409570000,
1134
+ "kind": "link_shared",
1135
+ "key": "share-1033"
1136
+ },
1137
+ {
1138
+ "receiptId": "KASSE1-ID-7",
1139
+ "at": 1790409570000,
1140
+ "kind": "link_shared",
1141
+ "key": "share-1034"
1142
+ },
1143
+ {
1144
+ "receiptId": "KASSE1-ID-7",
1145
+ "at": 1790409570000,
1146
+ "kind": "link_shared",
1147
+ "key": "share-1035"
1148
+ },
1149
+ {
1150
+ "receiptId": "KASSE1-ID-7",
1151
+ "at": 1790409570000,
1152
+ "kind": "link_shared",
1153
+ "key": "share-1036"
1154
+ },
1155
+ {
1156
+ "receiptId": "KASSE1-ID-7",
1157
+ "at": 1790409570000,
1158
+ "kind": "link_shared",
1159
+ "key": "share-1037"
1160
+ },
1161
+ {
1162
+ "receiptId": "KASSE1-ID-7",
1163
+ "at": 1790409570000,
1164
+ "kind": "link_shared",
1165
+ "key": "share-1038"
1166
+ },
1167
+ {
1168
+ "receiptId": "KASSE1-ID-7",
1169
+ "at": 1790409570000,
1170
+ "kind": "link_shared",
1171
+ "key": "share-1039"
1172
+ },
1173
+ {
1174
+ "receiptId": "KASSE1-ID-7",
1175
+ "at": 1790409570000,
1176
+ "kind": "link_shared",
1177
+ "key": "share-1040"
1178
+ },
1179
+ {
1180
+ "receiptId": "KASSE1-ID-7",
1181
+ "at": 1790409570000,
1182
+ "kind": "link_shared",
1183
+ "key": "share-1041"
1184
+ },
1185
+ {
1186
+ "receiptId": "KASSE1-ID-7",
1187
+ "at": 1790409570000,
1188
+ "kind": "link_shared",
1189
+ "key": "share-1042"
1190
+ },
1191
+ {
1192
+ "receiptId": "KASSE1-ID-7",
1193
+ "at": 1790409570000,
1194
+ "kind": "link_shared",
1195
+ "key": "share-1043"
1196
+ },
1197
+ {
1198
+ "receiptId": "KASSE1-ID-7",
1199
+ "at": 1790409570000,
1200
+ "kind": "link_shared",
1201
+ "key": "share-1044"
1202
+ },
1203
+ {
1204
+ "receiptId": "KASSE1-ID-7",
1205
+ "at": 1790409570000,
1206
+ "kind": "link_shared",
1207
+ "key": "share-1045"
1208
+ },
1209
+ {
1210
+ "receiptId": "KASSE1-ID-7",
1211
+ "at": 1790409570000,
1212
+ "kind": "link_shared",
1213
+ "key": "share-1046"
1214
+ },
1215
+ {
1216
+ "receiptId": "KASSE1-ID-7",
1217
+ "at": 1790409570000,
1218
+ "kind": "link_shared",
1219
+ "key": "share-1047"
1220
+ },
1221
+ {
1222
+ "receiptId": "KASSE1-ID-7",
1223
+ "at": 1790409570000,
1224
+ "kind": "link_shared",
1225
+ "key": "share-1048"
1226
+ },
1227
+ {
1228
+ "receiptId": "KASSE1-ID-7",
1229
+ "at": 1790409570000,
1230
+ "kind": "link_shared",
1231
+ "key": "share-1049"
1232
+ }
1233
+ ],
1234
+ "expected": {
1235
+ "sent": {
1236
+ "entries": [
1237
+ {
1238
+ "receiptId": "KASSE1-ID-7",
1239
+ "at": 1790409570000,
1240
+ "kind": "link_shared",
1241
+ "key": "share-1000"
1242
+ },
1243
+ {
1244
+ "receiptId": "KASSE1-ID-7",
1245
+ "at": 1790409570000,
1246
+ "kind": "link_shared",
1247
+ "key": "share-1001"
1248
+ },
1249
+ {
1250
+ "receiptId": "KASSE1-ID-7",
1251
+ "at": 1790409570000,
1252
+ "kind": "link_shared",
1253
+ "key": "share-1002"
1254
+ },
1255
+ {
1256
+ "receiptId": "KASSE1-ID-7",
1257
+ "at": 1790409570000,
1258
+ "kind": "link_shared",
1259
+ "key": "share-1003"
1260
+ },
1261
+ {
1262
+ "receiptId": "KASSE1-ID-7",
1263
+ "at": 1790409570000,
1264
+ "kind": "link_shared",
1265
+ "key": "share-1004"
1266
+ },
1267
+ {
1268
+ "receiptId": "KASSE1-ID-7",
1269
+ "at": 1790409570000,
1270
+ "kind": "link_shared",
1271
+ "key": "share-1005"
1272
+ },
1273
+ {
1274
+ "receiptId": "KASSE1-ID-7",
1275
+ "at": 1790409570000,
1276
+ "kind": "link_shared",
1277
+ "key": "share-1006"
1278
+ },
1279
+ {
1280
+ "receiptId": "KASSE1-ID-7",
1281
+ "at": 1790409570000,
1282
+ "kind": "link_shared",
1283
+ "key": "share-1007"
1284
+ },
1285
+ {
1286
+ "receiptId": "KASSE1-ID-7",
1287
+ "at": 1790409570000,
1288
+ "kind": "link_shared",
1289
+ "key": "share-1008"
1290
+ },
1291
+ {
1292
+ "receiptId": "KASSE1-ID-7",
1293
+ "at": 1790409570000,
1294
+ "kind": "link_shared",
1295
+ "key": "share-1009"
1296
+ },
1297
+ {
1298
+ "receiptId": "KASSE1-ID-7",
1299
+ "at": 1790409570000,
1300
+ "kind": "link_shared",
1301
+ "key": "share-1010"
1302
+ },
1303
+ {
1304
+ "receiptId": "KASSE1-ID-7",
1305
+ "at": 1790409570000,
1306
+ "kind": "link_shared",
1307
+ "key": "share-1011"
1308
+ },
1309
+ {
1310
+ "receiptId": "KASSE1-ID-7",
1311
+ "at": 1790409570000,
1312
+ "kind": "link_shared",
1313
+ "key": "share-1012"
1314
+ },
1315
+ {
1316
+ "receiptId": "KASSE1-ID-7",
1317
+ "at": 1790409570000,
1318
+ "kind": "link_shared",
1319
+ "key": "share-1013"
1320
+ },
1321
+ {
1322
+ "receiptId": "KASSE1-ID-7",
1323
+ "at": 1790409570000,
1324
+ "kind": "link_shared",
1325
+ "key": "share-1014"
1326
+ },
1327
+ {
1328
+ "receiptId": "KASSE1-ID-7",
1329
+ "at": 1790409570000,
1330
+ "kind": "link_shared",
1331
+ "key": "share-1015"
1332
+ },
1333
+ {
1334
+ "receiptId": "KASSE1-ID-7",
1335
+ "at": 1790409570000,
1336
+ "kind": "link_shared",
1337
+ "key": "share-1016"
1338
+ },
1339
+ {
1340
+ "receiptId": "KASSE1-ID-7",
1341
+ "at": 1790409570000,
1342
+ "kind": "link_shared",
1343
+ "key": "share-1017"
1344
+ },
1345
+ {
1346
+ "receiptId": "KASSE1-ID-7",
1347
+ "at": 1790409570000,
1348
+ "kind": "link_shared",
1349
+ "key": "share-1018"
1350
+ },
1351
+ {
1352
+ "receiptId": "KASSE1-ID-7",
1353
+ "at": 1790409570000,
1354
+ "kind": "link_shared",
1355
+ "key": "share-1019"
1356
+ },
1357
+ {
1358
+ "receiptId": "KASSE1-ID-7",
1359
+ "at": 1790409570000,
1360
+ "kind": "link_shared",
1361
+ "key": "share-1020"
1362
+ },
1363
+ {
1364
+ "receiptId": "KASSE1-ID-7",
1365
+ "at": 1790409570000,
1366
+ "kind": "link_shared",
1367
+ "key": "share-1021"
1368
+ },
1369
+ {
1370
+ "receiptId": "KASSE1-ID-7",
1371
+ "at": 1790409570000,
1372
+ "kind": "link_shared",
1373
+ "key": "share-1022"
1374
+ },
1375
+ {
1376
+ "receiptId": "KASSE1-ID-7",
1377
+ "at": 1790409570000,
1378
+ "kind": "link_shared",
1379
+ "key": "share-1023"
1380
+ },
1381
+ {
1382
+ "receiptId": "KASSE1-ID-7",
1383
+ "at": 1790409570000,
1384
+ "kind": "link_shared",
1385
+ "key": "share-1024"
1386
+ },
1387
+ {
1388
+ "receiptId": "KASSE1-ID-7",
1389
+ "at": 1790409570000,
1390
+ "kind": "link_shared",
1391
+ "key": "share-1025"
1392
+ },
1393
+ {
1394
+ "receiptId": "KASSE1-ID-7",
1395
+ "at": 1790409570000,
1396
+ "kind": "link_shared",
1397
+ "key": "share-1026"
1398
+ },
1399
+ {
1400
+ "receiptId": "KASSE1-ID-7",
1401
+ "at": 1790409570000,
1402
+ "kind": "link_shared",
1403
+ "key": "share-1027"
1404
+ },
1405
+ {
1406
+ "receiptId": "KASSE1-ID-7",
1407
+ "at": 1790409570000,
1408
+ "kind": "link_shared",
1409
+ "key": "share-1028"
1410
+ },
1411
+ {
1412
+ "receiptId": "KASSE1-ID-7",
1413
+ "at": 1790409570000,
1414
+ "kind": "link_shared",
1415
+ "key": "share-1029"
1416
+ },
1417
+ {
1418
+ "receiptId": "KASSE1-ID-7",
1419
+ "at": 1790409570000,
1420
+ "kind": "link_shared",
1421
+ "key": "share-1030"
1422
+ },
1423
+ {
1424
+ "receiptId": "KASSE1-ID-7",
1425
+ "at": 1790409570000,
1426
+ "kind": "link_shared",
1427
+ "key": "share-1031"
1428
+ },
1429
+ {
1430
+ "receiptId": "KASSE1-ID-7",
1431
+ "at": 1790409570000,
1432
+ "kind": "link_shared",
1433
+ "key": "share-1032"
1434
+ },
1435
+ {
1436
+ "receiptId": "KASSE1-ID-7",
1437
+ "at": 1790409570000,
1438
+ "kind": "link_shared",
1439
+ "key": "share-1033"
1440
+ },
1441
+ {
1442
+ "receiptId": "KASSE1-ID-7",
1443
+ "at": 1790409570000,
1444
+ "kind": "link_shared",
1445
+ "key": "share-1034"
1446
+ },
1447
+ {
1448
+ "receiptId": "KASSE1-ID-7",
1449
+ "at": 1790409570000,
1450
+ "kind": "link_shared",
1451
+ "key": "share-1035"
1452
+ },
1453
+ {
1454
+ "receiptId": "KASSE1-ID-7",
1455
+ "at": 1790409570000,
1456
+ "kind": "link_shared",
1457
+ "key": "share-1036"
1458
+ },
1459
+ {
1460
+ "receiptId": "KASSE1-ID-7",
1461
+ "at": 1790409570000,
1462
+ "kind": "link_shared",
1463
+ "key": "share-1037"
1464
+ },
1465
+ {
1466
+ "receiptId": "KASSE1-ID-7",
1467
+ "at": 1790409570000,
1468
+ "kind": "link_shared",
1469
+ "key": "share-1038"
1470
+ },
1471
+ {
1472
+ "receiptId": "KASSE1-ID-7",
1473
+ "at": 1790409570000,
1474
+ "kind": "link_shared",
1475
+ "key": "share-1039"
1476
+ },
1477
+ {
1478
+ "receiptId": "KASSE1-ID-7",
1479
+ "at": 1790409570000,
1480
+ "kind": "link_shared",
1481
+ "key": "share-1040"
1482
+ },
1483
+ {
1484
+ "receiptId": "KASSE1-ID-7",
1485
+ "at": 1790409570000,
1486
+ "kind": "link_shared",
1487
+ "key": "share-1041"
1488
+ },
1489
+ {
1490
+ "receiptId": "KASSE1-ID-7",
1491
+ "at": 1790409570000,
1492
+ "kind": "link_shared",
1493
+ "key": "share-1042"
1494
+ },
1495
+ {
1496
+ "receiptId": "KASSE1-ID-7",
1497
+ "at": 1790409570000,
1498
+ "kind": "link_shared",
1499
+ "key": "share-1043"
1500
+ },
1501
+ {
1502
+ "receiptId": "KASSE1-ID-7",
1503
+ "at": 1790409570000,
1504
+ "kind": "link_shared",
1505
+ "key": "share-1044"
1506
+ },
1507
+ {
1508
+ "receiptId": "KASSE1-ID-7",
1509
+ "at": 1790409570000,
1510
+ "kind": "link_shared",
1511
+ "key": "share-1045"
1512
+ },
1513
+ {
1514
+ "receiptId": "KASSE1-ID-7",
1515
+ "at": 1790409570000,
1516
+ "kind": "link_shared",
1517
+ "key": "share-1046"
1518
+ },
1519
+ {
1520
+ "receiptId": "KASSE1-ID-7",
1521
+ "at": 1790409570000,
1522
+ "kind": "link_shared",
1523
+ "key": "share-1047"
1524
+ },
1525
+ {
1526
+ "receiptId": "KASSE1-ID-7",
1527
+ "at": 1790409570000,
1528
+ "kind": "link_shared",
1529
+ "key": "share-1048"
1530
+ },
1531
+ {
1532
+ "receiptId": "KASSE1-ID-7",
1533
+ "at": 1790409570000,
1534
+ "kind": "link_shared",
1535
+ "key": "share-1049"
1536
+ }
1537
+ ]
1538
+ }
1539
+ }
1540
+ },
1541
+ {
1542
+ "name": "too_many_entries",
1543
+ "entries": [
1544
+ {
1545
+ "receiptId": "KASSE1-ID-7",
1546
+ "at": 1790409570000,
1547
+ "kind": "link_shared",
1548
+ "key": "share-1000"
1549
+ },
1550
+ {
1551
+ "receiptId": "KASSE1-ID-7",
1552
+ "at": 1790409570000,
1553
+ "kind": "link_shared",
1554
+ "key": "share-1001"
1555
+ },
1556
+ {
1557
+ "receiptId": "KASSE1-ID-7",
1558
+ "at": 1790409570000,
1559
+ "kind": "link_shared",
1560
+ "key": "share-1002"
1561
+ },
1562
+ {
1563
+ "receiptId": "KASSE1-ID-7",
1564
+ "at": 1790409570000,
1565
+ "kind": "link_shared",
1566
+ "key": "share-1003"
1567
+ },
1568
+ {
1569
+ "receiptId": "KASSE1-ID-7",
1570
+ "at": 1790409570000,
1571
+ "kind": "link_shared",
1572
+ "key": "share-1004"
1573
+ },
1574
+ {
1575
+ "receiptId": "KASSE1-ID-7",
1576
+ "at": 1790409570000,
1577
+ "kind": "link_shared",
1578
+ "key": "share-1005"
1579
+ },
1580
+ {
1581
+ "receiptId": "KASSE1-ID-7",
1582
+ "at": 1790409570000,
1583
+ "kind": "link_shared",
1584
+ "key": "share-1006"
1585
+ },
1586
+ {
1587
+ "receiptId": "KASSE1-ID-7",
1588
+ "at": 1790409570000,
1589
+ "kind": "link_shared",
1590
+ "key": "share-1007"
1591
+ },
1592
+ {
1593
+ "receiptId": "KASSE1-ID-7",
1594
+ "at": 1790409570000,
1595
+ "kind": "link_shared",
1596
+ "key": "share-1008"
1597
+ },
1598
+ {
1599
+ "receiptId": "KASSE1-ID-7",
1600
+ "at": 1790409570000,
1601
+ "kind": "link_shared",
1602
+ "key": "share-1009"
1603
+ },
1604
+ {
1605
+ "receiptId": "KASSE1-ID-7",
1606
+ "at": 1790409570000,
1607
+ "kind": "link_shared",
1608
+ "key": "share-1010"
1609
+ },
1610
+ {
1611
+ "receiptId": "KASSE1-ID-7",
1612
+ "at": 1790409570000,
1613
+ "kind": "link_shared",
1614
+ "key": "share-1011"
1615
+ },
1616
+ {
1617
+ "receiptId": "KASSE1-ID-7",
1618
+ "at": 1790409570000,
1619
+ "kind": "link_shared",
1620
+ "key": "share-1012"
1621
+ },
1622
+ {
1623
+ "receiptId": "KASSE1-ID-7",
1624
+ "at": 1790409570000,
1625
+ "kind": "link_shared",
1626
+ "key": "share-1013"
1627
+ },
1628
+ {
1629
+ "receiptId": "KASSE1-ID-7",
1630
+ "at": 1790409570000,
1631
+ "kind": "link_shared",
1632
+ "key": "share-1014"
1633
+ },
1634
+ {
1635
+ "receiptId": "KASSE1-ID-7",
1636
+ "at": 1790409570000,
1637
+ "kind": "link_shared",
1638
+ "key": "share-1015"
1639
+ },
1640
+ {
1641
+ "receiptId": "KASSE1-ID-7",
1642
+ "at": 1790409570000,
1643
+ "kind": "link_shared",
1644
+ "key": "share-1016"
1645
+ },
1646
+ {
1647
+ "receiptId": "KASSE1-ID-7",
1648
+ "at": 1790409570000,
1649
+ "kind": "link_shared",
1650
+ "key": "share-1017"
1651
+ },
1652
+ {
1653
+ "receiptId": "KASSE1-ID-7",
1654
+ "at": 1790409570000,
1655
+ "kind": "link_shared",
1656
+ "key": "share-1018"
1657
+ },
1658
+ {
1659
+ "receiptId": "KASSE1-ID-7",
1660
+ "at": 1790409570000,
1661
+ "kind": "link_shared",
1662
+ "key": "share-1019"
1663
+ },
1664
+ {
1665
+ "receiptId": "KASSE1-ID-7",
1666
+ "at": 1790409570000,
1667
+ "kind": "link_shared",
1668
+ "key": "share-1020"
1669
+ },
1670
+ {
1671
+ "receiptId": "KASSE1-ID-7",
1672
+ "at": 1790409570000,
1673
+ "kind": "link_shared",
1674
+ "key": "share-1021"
1675
+ },
1676
+ {
1677
+ "receiptId": "KASSE1-ID-7",
1678
+ "at": 1790409570000,
1679
+ "kind": "link_shared",
1680
+ "key": "share-1022"
1681
+ },
1682
+ {
1683
+ "receiptId": "KASSE1-ID-7",
1684
+ "at": 1790409570000,
1685
+ "kind": "link_shared",
1686
+ "key": "share-1023"
1687
+ },
1688
+ {
1689
+ "receiptId": "KASSE1-ID-7",
1690
+ "at": 1790409570000,
1691
+ "kind": "link_shared",
1692
+ "key": "share-1024"
1693
+ },
1694
+ {
1695
+ "receiptId": "KASSE1-ID-7",
1696
+ "at": 1790409570000,
1697
+ "kind": "link_shared",
1698
+ "key": "share-1025"
1699
+ },
1700
+ {
1701
+ "receiptId": "KASSE1-ID-7",
1702
+ "at": 1790409570000,
1703
+ "kind": "link_shared",
1704
+ "key": "share-1026"
1705
+ },
1706
+ {
1707
+ "receiptId": "KASSE1-ID-7",
1708
+ "at": 1790409570000,
1709
+ "kind": "link_shared",
1710
+ "key": "share-1027"
1711
+ },
1712
+ {
1713
+ "receiptId": "KASSE1-ID-7",
1714
+ "at": 1790409570000,
1715
+ "kind": "link_shared",
1716
+ "key": "share-1028"
1717
+ },
1718
+ {
1719
+ "receiptId": "KASSE1-ID-7",
1720
+ "at": 1790409570000,
1721
+ "kind": "link_shared",
1722
+ "key": "share-1029"
1723
+ },
1724
+ {
1725
+ "receiptId": "KASSE1-ID-7",
1726
+ "at": 1790409570000,
1727
+ "kind": "link_shared",
1728
+ "key": "share-1030"
1729
+ },
1730
+ {
1731
+ "receiptId": "KASSE1-ID-7",
1732
+ "at": 1790409570000,
1733
+ "kind": "link_shared",
1734
+ "key": "share-1031"
1735
+ },
1736
+ {
1737
+ "receiptId": "KASSE1-ID-7",
1738
+ "at": 1790409570000,
1739
+ "kind": "link_shared",
1740
+ "key": "share-1032"
1741
+ },
1742
+ {
1743
+ "receiptId": "KASSE1-ID-7",
1744
+ "at": 1790409570000,
1745
+ "kind": "link_shared",
1746
+ "key": "share-1033"
1747
+ },
1748
+ {
1749
+ "receiptId": "KASSE1-ID-7",
1750
+ "at": 1790409570000,
1751
+ "kind": "link_shared",
1752
+ "key": "share-1034"
1753
+ },
1754
+ {
1755
+ "receiptId": "KASSE1-ID-7",
1756
+ "at": 1790409570000,
1757
+ "kind": "link_shared",
1758
+ "key": "share-1035"
1759
+ },
1760
+ {
1761
+ "receiptId": "KASSE1-ID-7",
1762
+ "at": 1790409570000,
1763
+ "kind": "link_shared",
1764
+ "key": "share-1036"
1765
+ },
1766
+ {
1767
+ "receiptId": "KASSE1-ID-7",
1768
+ "at": 1790409570000,
1769
+ "kind": "link_shared",
1770
+ "key": "share-1037"
1771
+ },
1772
+ {
1773
+ "receiptId": "KASSE1-ID-7",
1774
+ "at": 1790409570000,
1775
+ "kind": "link_shared",
1776
+ "key": "share-1038"
1777
+ },
1778
+ {
1779
+ "receiptId": "KASSE1-ID-7",
1780
+ "at": 1790409570000,
1781
+ "kind": "link_shared",
1782
+ "key": "share-1039"
1783
+ },
1784
+ {
1785
+ "receiptId": "KASSE1-ID-7",
1786
+ "at": 1790409570000,
1787
+ "kind": "link_shared",
1788
+ "key": "share-1040"
1789
+ },
1790
+ {
1791
+ "receiptId": "KASSE1-ID-7",
1792
+ "at": 1790409570000,
1793
+ "kind": "link_shared",
1794
+ "key": "share-1041"
1795
+ },
1796
+ {
1797
+ "receiptId": "KASSE1-ID-7",
1798
+ "at": 1790409570000,
1799
+ "kind": "link_shared",
1800
+ "key": "share-1042"
1801
+ },
1802
+ {
1803
+ "receiptId": "KASSE1-ID-7",
1804
+ "at": 1790409570000,
1805
+ "kind": "link_shared",
1806
+ "key": "share-1043"
1807
+ },
1808
+ {
1809
+ "receiptId": "KASSE1-ID-7",
1810
+ "at": 1790409570000,
1811
+ "kind": "link_shared",
1812
+ "key": "share-1044"
1813
+ },
1814
+ {
1815
+ "receiptId": "KASSE1-ID-7",
1816
+ "at": 1790409570000,
1817
+ "kind": "link_shared",
1818
+ "key": "share-1045"
1819
+ },
1820
+ {
1821
+ "receiptId": "KASSE1-ID-7",
1822
+ "at": 1790409570000,
1823
+ "kind": "link_shared",
1824
+ "key": "share-1046"
1825
+ },
1826
+ {
1827
+ "receiptId": "KASSE1-ID-7",
1828
+ "at": 1790409570000,
1829
+ "kind": "link_shared",
1830
+ "key": "share-1047"
1831
+ },
1832
+ {
1833
+ "receiptId": "KASSE1-ID-7",
1834
+ "at": 1790409570000,
1835
+ "kind": "link_shared",
1836
+ "key": "share-1048"
1837
+ },
1838
+ {
1839
+ "receiptId": "KASSE1-ID-7",
1840
+ "at": 1790409570000,
1841
+ "kind": "link_shared",
1842
+ "key": "share-1049"
1843
+ },
1844
+ {
1845
+ "receiptId": "KASSE1-ID-7",
1846
+ "at": 1790409570000,
1847
+ "kind": "link_shared",
1848
+ "key": "share-1050"
1849
+ }
1850
+ ],
1851
+ "expected": {
1852
+ "error": {
1853
+ "scope": "request",
1854
+ "reason": "entries muss 1–50 Eintraege haben"
1855
+ }
1856
+ }
1857
+ },
1858
+ {
1859
+ "name": "unknown_field",
1860
+ "entries": [
1861
+ {
1862
+ "key": "print-0001",
1863
+ "receiptId": "KASSE1-ID-7",
1864
+ "at": "2026-09-26T09:58:00+02:00",
1865
+ "kind": "print",
1866
+ "result": "ok",
1867
+ "receiptID": "KASSE1-ID-7"
1868
+ }
1869
+ ],
1870
+ "expected": {
1871
+ "error": {
1872
+ "scope": "request",
1873
+ "reason": "entries[0]: unbekanntes Feld \"receiptID\""
1874
+ }
1875
+ }
1876
+ },
1877
+ {
1878
+ "name": "unknown_field_second_entry",
1879
+ "entries": [
1880
+ {
1881
+ "key": "print-0001",
1882
+ "receiptId": "KASSE1-ID-7",
1883
+ "at": "2026-09-26T09:58:00+02:00",
1884
+ "kind": "print",
1885
+ "result": "ok"
1886
+ },
1887
+ {
1888
+ "key": "print-0002",
1889
+ "receiptId": "KASSE1-ID-7",
1890
+ "at": "2026-09-26T09:58:00+02:00",
1891
+ "kind": "print",
1892
+ "result": "ok",
1893
+ "note": "Kopie"
1894
+ }
1895
+ ],
1896
+ "expected": {
1897
+ "error": {
1898
+ "scope": "request",
1899
+ "reason": "entries[1]: unbekanntes Feld \"note\""
1900
+ }
1901
+ }
1902
+ },
1903
+ {
1904
+ "name": "unknown_field_cashregister",
1905
+ "entries": [
1906
+ {
1907
+ "key": "print-0001",
1908
+ "receiptId": "KASSE1-ID-7",
1909
+ "at": "2026-09-26T09:58:00+02:00",
1910
+ "kind": "print",
1911
+ "result": "ok",
1912
+ "cashregisterId": "KASSE2"
1913
+ }
1914
+ ],
1915
+ "expected": {
1916
+ "error": {
1917
+ "scope": "request",
1918
+ "reason": "entries[0]: unbekanntes Feld \"cashregisterId\""
1919
+ }
1920
+ }
1921
+ },
1922
+ {
1923
+ "name": "key_missing",
1924
+ "entries": [
1925
+ {
1926
+ "receiptId": "KASSE1-ID-7",
1927
+ "at": "2026-09-26T09:58:00+02:00",
1928
+ "kind": "print",
1929
+ "result": "ok"
1930
+ }
1931
+ ],
1932
+ "expected": {
1933
+ "error": {
1934
+ "scope": "request",
1935
+ "reason": "entries[0].key fehlt"
1936
+ }
1937
+ }
1938
+ },
1939
+ {
1940
+ "name": "key_empty",
1941
+ "entries": [
1942
+ {
1943
+ "key": "",
1944
+ "receiptId": "KASSE1-ID-7",
1945
+ "at": "2026-09-26T09:58:00+02:00",
1946
+ "kind": "print",
1947
+ "result": "ok"
1948
+ }
1949
+ ],
1950
+ "expected": {
1951
+ "error": {
1952
+ "scope": "request",
1953
+ "reason": "entries[0].key fehlt"
1954
+ }
1955
+ }
1956
+ },
1957
+ {
1958
+ "name": "key_null",
1959
+ "entries": [
1960
+ {
1961
+ "key": null,
1962
+ "receiptId": "KASSE1-ID-7",
1963
+ "at": "2026-09-26T09:58:00+02:00",
1964
+ "kind": "print",
1965
+ "result": "ok"
1966
+ }
1967
+ ],
1968
+ "expected": {
1969
+ "error": {
1970
+ "scope": "request",
1971
+ "reason": "entries[0].key fehlt"
1972
+ }
1973
+ }
1974
+ },
1975
+ {
1976
+ "name": "key_blank",
1977
+ "entries": [
1978
+ {
1979
+ "key": " ",
1980
+ "receiptId": "KASSE1-ID-7",
1981
+ "at": "2026-09-26T09:58:00+02:00",
1982
+ "kind": "print",
1983
+ "result": "ok"
1984
+ }
1985
+ ],
1986
+ "expected": {
1987
+ "error": {
1988
+ "scope": "request",
1989
+ "reason": "entries[0].key fehlt"
1990
+ }
1991
+ }
1992
+ },
1993
+ {
1994
+ "name": "key_too_short",
1995
+ "entries": [
1996
+ {
1997
+ "key": "kurz",
1998
+ "receiptId": "KASSE1-ID-7",
1999
+ "at": "2026-09-26T09:58:00+02:00",
2000
+ "kind": "print",
2001
+ "result": "ok"
2002
+ }
2003
+ ],
2004
+ "expected": {
2005
+ "error": {
2006
+ "scope": "request",
2007
+ "reason": "entries[0].key muss 8–64 Zeichen [A-Za-z0-9_-] haben"
2008
+ }
2009
+ }
2010
+ },
2011
+ {
2012
+ "name": "key_seven",
2013
+ "entries": [
2014
+ {
2015
+ "key": "print-1",
2016
+ "receiptId": "KASSE1-ID-7",
2017
+ "at": "2026-09-26T09:58:00+02:00",
2018
+ "kind": "print",
2019
+ "result": "ok"
2020
+ }
2021
+ ],
2022
+ "expected": {
2023
+ "error": {
2024
+ "scope": "request",
2025
+ "reason": "entries[0].key muss 8–64 Zeichen [A-Za-z0-9_-] haben"
2026
+ }
2027
+ }
2028
+ },
2029
+ {
2030
+ "name": "key_space",
2031
+ "entries": [
2032
+ {
2033
+ "key": "print 0001",
2034
+ "receiptId": "KASSE1-ID-7",
2035
+ "at": "2026-09-26T09:58:00+02:00",
2036
+ "kind": "print",
2037
+ "result": "ok"
2038
+ }
2039
+ ],
2040
+ "expected": {
2041
+ "error": {
2042
+ "scope": "request",
2043
+ "reason": "entries[0].key muss 8–64 Zeichen [A-Za-z0-9_-] haben"
2044
+ }
2045
+ }
2046
+ },
2047
+ {
2048
+ "name": "key_umlaut",
2049
+ "entries": [
2050
+ {
2051
+ "key": "prínt-0001",
2052
+ "receiptId": "KASSE1-ID-7",
2053
+ "at": "2026-09-26T09:58:00+02:00",
2054
+ "kind": "print",
2055
+ "result": "ok"
2056
+ }
2057
+ ],
2058
+ "expected": {
2059
+ "error": {
2060
+ "scope": "request",
2061
+ "reason": "entries[0].key muss 8–64 Zeichen [A-Za-z0-9_-] haben"
2062
+ }
2063
+ }
2064
+ },
2065
+ {
2066
+ "name": "key_too_long",
2067
+ "entries": [
2068
+ {
2069
+ "key": "ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
2070
+ "receiptId": "KASSE1-ID-7",
2071
+ "at": "2026-09-26T09:58:00+02:00",
2072
+ "kind": "print",
2073
+ "result": "ok"
2074
+ }
2075
+ ],
2076
+ "expected": {
2077
+ "error": {
2078
+ "scope": "request",
2079
+ "reason": "entries[0].key muss 8–64 Zeichen [A-Za-z0-9_-] haben"
2080
+ }
2081
+ }
2082
+ },
2083
+ {
2084
+ "name": "key_bounds",
2085
+ "entries": [
2086
+ {
2087
+ "key": "Ab_-0123",
2088
+ "receiptId": "KASSE1-ID-7",
2089
+ "at": "2026-09-26T09:58:00+02:00",
2090
+ "kind": "print",
2091
+ "result": "ok"
2092
+ },
2093
+ {
2094
+ "key": "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk",
2095
+ "receiptId": "KASSE1-ID-7",
2096
+ "at": "2026-09-26T09:58:00+02:00",
2097
+ "kind": "print",
2098
+ "result": "ok"
2099
+ }
2100
+ ],
2101
+ "expected": {
2102
+ "sent": {
2103
+ "entries": [
2104
+ {
2105
+ "key": "Ab_-0123",
2106
+ "receiptId": "KASSE1-ID-7",
2107
+ "at": "2026-09-26T09:58:00+02:00",
2108
+ "kind": "print",
2109
+ "result": "ok"
2110
+ },
2111
+ {
2112
+ "key": "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk",
2113
+ "receiptId": "KASSE1-ID-7",
2114
+ "at": "2026-09-26T09:58:00+02:00",
2115
+ "kind": "print",
2116
+ "result": "ok"
2117
+ }
2118
+ ]
2119
+ }
2120
+ }
2121
+ },
2122
+ {
2123
+ "name": "key_not_trimmed",
2124
+ "entries": [
2125
+ {
2126
+ "key": " print-0001",
2127
+ "receiptId": "KASSE1-ID-7",
2128
+ "at": "2026-09-26T09:58:00+02:00",
2129
+ "kind": "print",
2130
+ "result": "ok"
2131
+ }
2132
+ ],
2133
+ "expected": {
2134
+ "error": {
2135
+ "scope": "request",
2136
+ "reason": "entries[0].key muss 8–64 Zeichen [A-Za-z0-9_-] haben"
2137
+ }
2138
+ }
2139
+ },
2140
+ {
2141
+ "name": "receipt_missing",
2142
+ "entries": [
2143
+ {
2144
+ "key": "print-0001",
2145
+ "at": "2026-09-26T09:58:00+02:00",
2146
+ "kind": "print",
2147
+ "result": "ok"
2148
+ }
2149
+ ],
2150
+ "expected": {
2151
+ "error": {
2152
+ "scope": "request",
2153
+ "reason": "entries[0].receiptId fehlt"
2154
+ }
2155
+ }
2156
+ },
2157
+ {
2158
+ "name": "receipt_blank",
2159
+ "entries": [
2160
+ {
2161
+ "key": "print-0001",
2162
+ "receiptId": " ",
2163
+ "at": "2026-09-26T09:58:00+02:00",
2164
+ "kind": "print",
2165
+ "result": "ok"
2166
+ }
2167
+ ],
2168
+ "expected": {
2169
+ "error": {
2170
+ "scope": "request",
2171
+ "reason": "entries[0].receiptId fehlt"
2172
+ }
2173
+ }
2174
+ },
2175
+ {
2176
+ "name": "kind_internal_word",
2177
+ "entries": [
2178
+ {
2179
+ "key": "print-0001",
2180
+ "receiptId": "KASSE1-ID-7",
2181
+ "at": "2026-09-26T09:58:00+02:00",
2182
+ "kind": "erstdruck",
2183
+ "result": "ok"
2184
+ }
2185
+ ],
2186
+ "expected": {
2187
+ "error": {
2188
+ "scope": "request",
2189
+ "reason": "entries[0].kind muss print, reprint, email, link_shared, pdf_shared, opened sein"
2190
+ }
2191
+ }
2192
+ },
2193
+ {
2194
+ "name": "kind_missing",
2195
+ "entries": [
2196
+ {
2197
+ "key": "print-0001",
2198
+ "receiptId": "KASSE1-ID-7",
2199
+ "at": "2026-09-26T09:58:00+02:00",
2200
+ "result": "ok"
2201
+ }
2202
+ ],
2203
+ "expected": {
2204
+ "error": {
2205
+ "scope": "request",
2206
+ "reason": "entries[0].kind muss print, reprint, email, link_shared, pdf_shared, opened sein"
2207
+ }
2208
+ }
2209
+ },
2210
+ {
2211
+ "name": "kind_null",
2212
+ "entries": [
2213
+ {
2214
+ "key": "print-0001",
2215
+ "receiptId": "KASSE1-ID-7",
2216
+ "at": "2026-09-26T09:58:00+02:00",
2217
+ "kind": null,
2218
+ "result": "ok"
2219
+ }
2220
+ ],
2221
+ "expected": {
2222
+ "error": {
2223
+ "scope": "request",
2224
+ "reason": "entries[0].kind muss print, reprint, email, link_shared, pdf_shared, opened sein"
2225
+ }
2226
+ }
2227
+ },
2228
+ {
2229
+ "name": "kind_server_written",
2230
+ "entries": [
2231
+ {
2232
+ "key": "email-0001",
2233
+ "receiptId": "KASSE1-ID-7",
2234
+ "at": "2026-09-26T09:58:00+02:00",
2235
+ "kind": "email",
2236
+ "result": "ok"
2237
+ },
2238
+ {
2239
+ "key": "opened-0001",
2240
+ "receiptId": "KASSE1-ID-7",
2241
+ "at": "2026-09-26T09:58:00+02:00",
2242
+ "kind": "opened",
2243
+ "result": "ok"
2244
+ }
2245
+ ],
2246
+ "expected": {
2247
+ "sent": {
2248
+ "entries": [
2249
+ {
2250
+ "key": "email-0001",
2251
+ "receiptId": "KASSE1-ID-7",
2252
+ "at": "2026-09-26T09:58:00+02:00",
2253
+ "kind": "email",
2254
+ "result": "ok"
2255
+ },
2256
+ {
2257
+ "key": "opened-0001",
2258
+ "receiptId": "KASSE1-ID-7",
2259
+ "at": "2026-09-26T09:58:00+02:00",
2260
+ "kind": "opened",
2261
+ "result": "ok"
2262
+ }
2263
+ ]
2264
+ }
2265
+ }
2266
+ },
2267
+ {
2268
+ "name": "result_outside_catalog",
2269
+ "entries": [
2270
+ {
2271
+ "key": "print-0001",
2272
+ "receiptId": "KASSE1-ID-7",
2273
+ "at": "2026-09-26T09:58:00+02:00",
2274
+ "kind": "print",
2275
+ "result": "error"
2276
+ }
2277
+ ],
2278
+ "expected": {
2279
+ "error": {
2280
+ "scope": "request",
2281
+ "reason": "entries[0].result muss ok, failed, unclear sein"
2282
+ }
2283
+ }
2284
+ },
2285
+ {
2286
+ "name": "result_null",
2287
+ "entries": [
2288
+ {
2289
+ "key": "print-0001",
2290
+ "receiptId": "KASSE1-ID-7",
2291
+ "at": "2026-09-26T09:58:00+02:00",
2292
+ "kind": "print",
2293
+ "result": null
2294
+ }
2295
+ ],
2296
+ "expected": {
2297
+ "error": {
2298
+ "scope": "request",
2299
+ "reason": "entries[0].result muss ok, failed, unclear sein"
2300
+ }
2301
+ }
2302
+ },
2303
+ {
2304
+ "name": "result_missing_share",
2305
+ "entries": [
2306
+ {
2307
+ "key": "share-0001",
2308
+ "receiptId": "KASSE1-ID-7",
2309
+ "at": "2026-09-26T09:58:00+02:00",
2310
+ "kind": "link_shared"
2311
+ }
2312
+ ],
2313
+ "expected": {
2314
+ "sent": {
2315
+ "entries": [
2316
+ {
2317
+ "key": "share-0001",
2318
+ "receiptId": "KASSE1-ID-7",
2319
+ "at": "2026-09-26T09:58:00+02:00",
2320
+ "kind": "link_shared"
2321
+ }
2322
+ ]
2323
+ }
2324
+ }
2325
+ },
2326
+ {
2327
+ "name": "result_missing_print",
2328
+ "entries": [
2329
+ {
2330
+ "key": "print-0001",
2331
+ "receiptId": "KASSE1-ID-7",
2332
+ "at": "2026-09-26T09:58:00+02:00",
2333
+ "kind": "print"
2334
+ }
2335
+ ],
2336
+ "expected": {
2337
+ "sent": {
2338
+ "entries": [
2339
+ {
2340
+ "key": "print-0001",
2341
+ "receiptId": "KASSE1-ID-7",
2342
+ "at": "2026-09-26T09:58:00+02:00",
2343
+ "kind": "print"
2344
+ }
2345
+ ]
2346
+ }
2347
+ }
2348
+ },
2349
+ {
2350
+ "name": "result_values",
2351
+ "entries": [
2352
+ {
2353
+ "key": "print-0001",
2354
+ "receiptId": "KASSE1-ID-7",
2355
+ "at": "2026-09-26T09:58:00+02:00",
2356
+ "kind": "reprint",
2357
+ "result": "ok"
2358
+ },
2359
+ {
2360
+ "key": "print-0002",
2361
+ "receiptId": "KASSE1-ID-7",
2362
+ "at": "2026-09-26T09:58:00+02:00",
2363
+ "kind": "reprint",
2364
+ "result": "failed"
2365
+ },
2366
+ {
2367
+ "key": "print-0003",
2368
+ "receiptId": "KASSE1-ID-7",
2369
+ "at": "2026-09-26T09:58:00+02:00",
2370
+ "kind": "reprint",
2371
+ "result": "unclear"
2372
+ }
2373
+ ],
2374
+ "expected": {
2375
+ "sent": {
2376
+ "entries": [
2377
+ {
2378
+ "key": "print-0001",
2379
+ "receiptId": "KASSE1-ID-7",
2380
+ "at": "2026-09-26T09:58:00+02:00",
2381
+ "kind": "reprint",
2382
+ "result": "ok"
2383
+ },
2384
+ {
2385
+ "key": "print-0002",
2386
+ "receiptId": "KASSE1-ID-7",
2387
+ "at": "2026-09-26T09:58:00+02:00",
2388
+ "kind": "reprint",
2389
+ "result": "failed"
2390
+ },
2391
+ {
2392
+ "key": "print-0003",
2393
+ "receiptId": "KASSE1-ID-7",
2394
+ "at": "2026-09-26T09:58:00+02:00",
2395
+ "kind": "reprint",
2396
+ "result": "unclear"
2397
+ }
2398
+ ]
2399
+ }
2400
+ }
2401
+ },
2402
+ {
2403
+ "name": "at_missing",
2404
+ "entries": [
2405
+ {
2406
+ "key": "print-0001",
2407
+ "receiptId": "KASSE1-ID-7",
2408
+ "kind": "print",
2409
+ "result": "ok"
2410
+ }
2411
+ ],
2412
+ "expected": {
2413
+ "error": {
2414
+ "scope": "request",
2415
+ "reason": "entries[0].at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein"
2416
+ }
2417
+ }
2418
+ },
2419
+ {
2420
+ "name": "at_empty",
2421
+ "entries": [
2422
+ {
2423
+ "key": "print-0001",
2424
+ "receiptId": "KASSE1-ID-7",
2425
+ "at": "",
2426
+ "kind": "print",
2427
+ "result": "ok"
2428
+ }
2429
+ ],
2430
+ "expected": {
2431
+ "error": {
2432
+ "scope": "request",
2433
+ "reason": "entries[0].at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein"
2434
+ }
2435
+ }
2436
+ },
2437
+ {
2438
+ "name": "at_null",
2439
+ "entries": [
2440
+ {
2441
+ "key": "print-0001",
2442
+ "receiptId": "KASSE1-ID-7",
2443
+ "at": null,
2444
+ "kind": "print",
2445
+ "result": "ok"
2446
+ }
2447
+ ],
2448
+ "expected": {
2449
+ "error": {
2450
+ "scope": "request",
2451
+ "reason": "entries[0].at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein"
2452
+ }
2453
+ }
2454
+ },
2455
+ {
2456
+ "name": "at_fraction",
2457
+ "entries": [
2458
+ {
2459
+ "key": "print-0001",
2460
+ "receiptId": "KASSE1-ID-7",
2461
+ "at": 1.5,
2462
+ "kind": "print",
2463
+ "result": "ok"
2464
+ }
2465
+ ],
2466
+ "expected": {
2467
+ "error": {
2468
+ "scope": "request",
2469
+ "reason": "entries[0].at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein"
2470
+ }
2471
+ }
2472
+ },
2473
+ {
2474
+ "name": "at_negative",
2475
+ "entries": [
2476
+ {
2477
+ "key": "print-0001",
2478
+ "receiptId": "KASSE1-ID-7",
2479
+ "at": -1,
2480
+ "kind": "print",
2481
+ "result": "ok"
2482
+ }
2483
+ ],
2484
+ "expected": {
2485
+ "error": {
2486
+ "scope": "request",
2487
+ "reason": "entries[0].at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein"
2488
+ }
2489
+ }
2490
+ },
2491
+ {
2492
+ "name": "at_zero",
2493
+ "entries": [
2494
+ {
2495
+ "key": "print-0001",
2496
+ "receiptId": "KASSE1-ID-7",
2497
+ "at": 0,
2498
+ "kind": "print",
2499
+ "result": "ok"
2500
+ }
2501
+ ],
2502
+ "expected": {
2503
+ "sent": {
2504
+ "entries": [
2505
+ {
2506
+ "key": "print-0001",
2507
+ "receiptId": "KASSE1-ID-7",
2508
+ "at": 0,
2509
+ "kind": "print",
2510
+ "result": "ok"
2511
+ }
2512
+ ]
2513
+ }
2514
+ }
2515
+ },
2516
+ {
2517
+ "name": "at_ms",
2518
+ "entries": [
2519
+ {
2520
+ "key": "print-0001",
2521
+ "receiptId": "KASSE1-ID-7",
2522
+ "at": 1790409480000,
2523
+ "kind": "print",
2524
+ "result": "ok"
2525
+ }
2526
+ ],
2527
+ "expected": {
2528
+ "sent": {
2529
+ "entries": [
2530
+ {
2531
+ "key": "print-0001",
2532
+ "receiptId": "KASSE1-ID-7",
2533
+ "at": 1790409480000,
2534
+ "kind": "print",
2535
+ "result": "ok"
2536
+ }
2537
+ ]
2538
+ }
2539
+ }
2540
+ },
2541
+ {
2542
+ "name": "at_unsafe",
2543
+ "entries": [
2544
+ {
2545
+ "key": "print-0001",
2546
+ "receiptId": "KASSE1-ID-7",
2547
+ "at": 9007199254740992,
2548
+ "kind": "print",
2549
+ "result": "ok"
2550
+ }
2551
+ ],
2552
+ "expected": {
2553
+ "error": {
2554
+ "scope": "request",
2555
+ "reason": "entries[0].at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein"
2556
+ }
2557
+ }
2558
+ },
2559
+ {
2560
+ "name": "at_without_zone",
2561
+ "entries": [
2562
+ {
2563
+ "key": "print-0001",
2564
+ "receiptId": "KASSE1-ID-7",
2565
+ "at": "2026-09-26T09:58:00",
2566
+ "kind": "print",
2567
+ "result": "ok"
2568
+ }
2569
+ ],
2570
+ "expected": {
2571
+ "error": {
2572
+ "scope": "request",
2573
+ "reason": "entries[0].at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein"
2574
+ }
2575
+ }
2576
+ },
2577
+ {
2578
+ "name": "at_fraction_without_zone",
2579
+ "entries": [
2580
+ {
2581
+ "key": "print-0001",
2582
+ "receiptId": "KASSE1-ID-7",
2583
+ "at": "2026-09-26T09:58:00.123",
2584
+ "kind": "print",
2585
+ "result": "ok"
2586
+ }
2587
+ ],
2588
+ "expected": {
2589
+ "error": {
2590
+ "scope": "request",
2591
+ "reason": "entries[0].at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein"
2592
+ }
2593
+ }
2594
+ },
2595
+ {
2596
+ "name": "at_offset_without_colon",
2597
+ "entries": [
2598
+ {
2599
+ "key": "print-0001",
2600
+ "receiptId": "KASSE1-ID-7",
2601
+ "at": "2026-09-26T09:58:00+0200",
2602
+ "kind": "print",
2603
+ "result": "ok"
2604
+ }
2605
+ ],
2606
+ "expected": {
2607
+ "error": {
2608
+ "scope": "request",
2609
+ "reason": "entries[0].at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein"
2610
+ }
2611
+ }
2612
+ },
2613
+ {
2614
+ "name": "at_date_only",
2615
+ "entries": [
2616
+ {
2617
+ "key": "print-0001",
2618
+ "receiptId": "KASSE1-ID-7",
2619
+ "at": "2026-09-26",
2620
+ "kind": "print",
2621
+ "result": "ok"
2622
+ }
2623
+ ],
2624
+ "expected": {
2625
+ "error": {
2626
+ "scope": "request",
2627
+ "reason": "entries[0].at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein"
2628
+ }
2629
+ }
2630
+ },
2631
+ {
2632
+ "name": "at_space",
2633
+ "entries": [
2634
+ {
2635
+ "key": "print-0001",
2636
+ "receiptId": "KASSE1-ID-7",
2637
+ "at": "2026-09-26 09:58:00Z",
2638
+ "kind": "print",
2639
+ "result": "ok"
2640
+ }
2641
+ ],
2642
+ "expected": {
2643
+ "error": {
2644
+ "scope": "request",
2645
+ "reason": "entries[0].at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein"
2646
+ }
2647
+ }
2648
+ },
2649
+ {
2650
+ "name": "at_seven_fraction_digits",
2651
+ "entries": [
2652
+ {
2653
+ "key": "print-0001",
2654
+ "receiptId": "KASSE1-ID-7",
2655
+ "at": "2026-09-26T09:58:00.1234567Z",
2656
+ "kind": "print",
2657
+ "result": "ok"
2658
+ }
2659
+ ],
2660
+ "expected": {
2661
+ "error": {
2662
+ "scope": "request",
2663
+ "reason": "entries[0].at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein"
2664
+ }
2665
+ }
2666
+ },
2667
+ {
2668
+ "name": "at_lowercase_z",
2669
+ "entries": [
2670
+ {
2671
+ "key": "print-0001",
2672
+ "receiptId": "KASSE1-ID-7",
2673
+ "at": "2026-09-26T07:58:00z",
2674
+ "kind": "print",
2675
+ "result": "ok"
2676
+ }
2677
+ ],
2678
+ "expected": {
2679
+ "error": {
2680
+ "scope": "request",
2681
+ "reason": "entries[0].at muss Millisekunden seit 1970 oder ISO 8601 mit Zone sein"
2682
+ }
2683
+ }
2684
+ },
2685
+ {
2686
+ "name": "at_with_zone",
2687
+ "entries": [
2688
+ {
2689
+ "key": "print-0001",
2690
+ "receiptId": "KASSE1-ID-7",
2691
+ "at": "2026-09-26T07:58:00Z",
2692
+ "kind": "print",
2693
+ "result": "ok"
2694
+ },
2695
+ {
2696
+ "key": "print-0002",
2697
+ "receiptId": "KASSE1-ID-7",
2698
+ "at": "2026-09-26T09:58:00.123456+02:00",
2699
+ "kind": "print",
2700
+ "result": "ok"
2701
+ },
2702
+ {
2703
+ "key": "print-0003",
2704
+ "receiptId": "KASSE1-ID-7",
2705
+ "at": "2026-09-26T07:59:00.000Z",
2706
+ "kind": "print",
2707
+ "result": "ok"
2708
+ },
2709
+ {
2710
+ "key": "print-0004",
2711
+ "receiptId": "KASSE1-ID-7",
2712
+ "at": "2026-09-26T02:58:00-05:00",
2713
+ "kind": "print",
2714
+ "result": "ok"
2715
+ }
2716
+ ],
2717
+ "expected": {
2718
+ "sent": {
2719
+ "entries": [
2720
+ {
2721
+ "key": "print-0001",
2722
+ "receiptId": "KASSE1-ID-7",
2723
+ "at": "2026-09-26T07:58:00Z",
2724
+ "kind": "print",
2725
+ "result": "ok"
2726
+ },
2727
+ {
2728
+ "key": "print-0002",
2729
+ "receiptId": "KASSE1-ID-7",
2730
+ "at": "2026-09-26T09:58:00.123456+02:00",
2731
+ "kind": "print",
2732
+ "result": "ok"
2733
+ },
2734
+ {
2735
+ "key": "print-0003",
2736
+ "receiptId": "KASSE1-ID-7",
2737
+ "at": "2026-09-26T07:59:00.000Z",
2738
+ "kind": "print",
2739
+ "result": "ok"
2740
+ },
2741
+ {
2742
+ "key": "print-0004",
2743
+ "receiptId": "KASSE1-ID-7",
2744
+ "at": "2026-09-26T02:58:00-05:00",
2745
+ "kind": "print",
2746
+ "result": "ok"
2747
+ }
2748
+ ]
2749
+ }
2750
+ }
2751
+ },
2752
+ {
2753
+ "name": "first_error_wins",
2754
+ "entries": [
2755
+ {
2756
+ "key": "print-0001",
2757
+ "receiptId": "KASSE1-ID-7",
2758
+ "at": "2026-09-26T09:58:00+02:00",
2759
+ "kind": "print",
2760
+ "result": "ok"
2761
+ },
2762
+ {
2763
+ "key": "kurz",
2764
+ "receiptId": "KASSE1-ID-7",
2765
+ "at": "2026-09-26",
2766
+ "kind": "erstdruck",
2767
+ "result": "ok"
2768
+ }
2769
+ ],
2770
+ "expected": {
2771
+ "error": {
2772
+ "scope": "request",
2773
+ "reason": "entries[1].key muss 8–64 Zeichen [A-Za-z0-9_-] haben"
2774
+ }
2775
+ }
2776
+ }
2777
+ ]
2778
+ }