@kreiseck/kasseneck-api 1.14.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 (57) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +70 -2
  3. package/dist/cjs/client/api.d.ts +5 -0
  4. package/dist/cjs/client/api.js +3 -0
  5. package/dist/cjs/client/aufrufe.d.ts +2 -2
  6. package/dist/cjs/client/aufrufe.js +4 -0
  7. package/dist/cjs/client/index.d.ts +1 -0
  8. package/dist/cjs/client/index.js +12 -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/index.d.ts +1 -1
  12. package/dist/cjs/index.js +11 -2
  13. package/dist/cjs/invoice/vertrag.d.ts +1 -1
  14. package/dist/cjs/invoice/vertrag.js +2 -0
  15. package/dist/cjs/models/receipt-errors.d.ts +1 -1
  16. package/dist/cjs/models/receipt-errors.js +3 -0
  17. package/dist/cjs/stored/vokabular.d.ts +1 -1
  18. package/dist/cjs/stored/vokabular.js +14 -2
  19. package/dist/cjs/version.d.ts +1 -1
  20. package/dist/cjs/version.js +1 -1
  21. package/dist/esm/client/api.d.ts +5 -0
  22. package/dist/esm/client/api.js +3 -0
  23. package/dist/esm/client/aufrufe.d.ts +2 -2
  24. package/dist/esm/client/aufrufe.js +4 -0
  25. package/dist/esm/client/index.d.ts +1 -0
  26. package/dist/esm/client/index.js +1 -0
  27. package/dist/esm/client/list-receipts.d.ts +211 -0
  28. package/dist/esm/client/list-receipts.js +284 -0
  29. package/dist/esm/index.d.ts +1 -1
  30. package/dist/esm/index.js +1 -1
  31. package/dist/esm/invoice/vertrag.d.ts +1 -1
  32. package/dist/esm/invoice/vertrag.js +2 -0
  33. package/dist/esm/models/receipt-errors.d.ts +1 -1
  34. package/dist/esm/models/receipt-errors.js +3 -0
  35. package/dist/esm/stored/vokabular.d.ts +1 -1
  36. package/dist/esm/stored/vokabular.js +14 -2
  37. package/dist/esm/version.d.ts +1 -1
  38. package/dist/esm/version.js +1 -1
  39. package/fixtures/hobex-hps-codes.json +1 -1
  40. package/fixtures/invoice-api.schema.json +3 -2
  41. package/fixtures/invoice-texts.json +1 -1
  42. package/fixtures/pos-texts.json +1 -1
  43. package/fixtures/receipt-due-voucher-generated.json +1 -1
  44. package/fixtures/surface.json +6 -3
  45. package/fixtures/v3/antworten/belege.json +1 -1
  46. package/fixtures/v3/antworten/belegmail.json +1 -1
  47. package/fixtures/v3/antworten/kasse-belege.json +1 -1
  48. package/fixtures/v3/antworten/kasse.json +75 -10
  49. package/fixtures/v3/antworten/lager.json +1 -1
  50. package/fixtures/v3/antworten/rechnungen.json +1 -1
  51. package/fixtures/v3/antworten/storno.json +1 -1
  52. package/fixtures/v3/stored/belege.json +1 -1
  53. package/fixtures/v3/stored/kasse.json +151 -381
  54. package/fixtures/v3/stored/rechnungen.json +142 -2
  55. package/fixtures/v3/v3-vokabular.json +89 -11
  56. package/fixtures/v3/zahlbetrag-faelle.json +1 -1
  57. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,19 @@ Was vor 0.7.0 geschah, steht in der Commit-Historie (`git log`); ab hier wird
4
4
  es hier geführt. Ein Eintrag nennt die Änderung **und ihren Grund** —
5
5
  nur der Grund überlebt den nächsten Umbau.
6
6
 
7
+ ## 1.15.0 - 2026-10-28
8
+
9
+ Receipt lists page by page: `listReceipts` and `listAllReceipts` for the new public endpoint `listReceipts` (`/v3` only). Additive.
10
+
11
+ - **`listReceipts(options)`** (root and `createKasseneckApi`, `apiKeyAuth` with `cashregister-token` like `getReportV2`) returns one page `{ receipts, hasMore, nextCursor, daySummary? }` (`ListReceiptsPage`). Window: exactly one of `date` (`YYYY-MM-DD`, one Vienna day) or `from` (inclusive) + `to` (exclusive), each `YYYY-MM-DD` or `YYYY-MM-DDTHH:mm:ss` Vienna wall clock, at most 31 calendar days (`LIST_RECEIPTS_DAYS_MAX`); `limit` 1-500 (`LIST_RECEIPTS_LIMIT_MAX`, default 100), `order` `desc`|`asc` (`LIST_RECEIPTS_ORDERS`), `view` `summary`|`full` (`LIST_RECEIPTS_VIEWS`), `cursor` = `nextCursor` of the previous page (same window, order and view; limit may change). Reason: `getReportV2` returns every receipt of any period in one answer, without a limit; a list needs pages with bounded cost per call.
12
+ - **Checked before sending, by the server's rules:** one window form, the date formats (impossible dates such as `2026-02-30`, no zone, no fractions), `to` after `from`, 31 calendar days counted without time zone (also across the change of summer time), `limit` an integer 1-500 (never capped silently), `order`/`view` values, a non-empty `cursor`. A violation throws `KasseneckValidationError` (`scope: 'request'`) and nothing goes out. Reason: a partner should notice a wrong request at once, not after a round trip, and the package rejects what the server rejects.
13
+ - **Separate types per view:** `view: 'summary'` (default) gives `ListReceiptsSummary` rows (`receiptId`, `counter`, `receiptType`, `zeroKind`, `timeStamp`, `totalCents`, `grossByRateCents { standard, reduced1, reduced2, zero, special }`, `paymentMethod`, `payments?`, `tipCents?`, `operator { name } | null`, `cancellationOf { receiptId, timeStamp } | null`, `cancellationReason`, `cancellationStatus`, `signatureOk`, `customProjectId`, `fullReceiptId`), amounts in whole cents; `view: 'full'` gives `Receipt`, the same shape and reader as `getReportV2`. The page type follows `view` (`ListReceiptsPage<'full'>`, `ListedReceipt<V>`). Read leniently like the other lists: an unknown receipt type or payment method stays readable as sent, an unknown `cancellationStatus` reads as `'unknown'` (offer no cancellation then). The name is `ListReceiptsSummary` because `ReceiptSummary` already is the row of `listMyReceipts` (register path, other fields).
14
+ - **`daySummary`** (`ListReceiptsDaySummary`: `date`, `receiptCount`, `revenueCents`, `revenueByRate [{ rateBp, grossCents }]`) only with `date` and only on the first page, `null` when the day has no statistics, absent on later pages. It is not the sum of the list (the count covers every receipt of the day, the revenue only standard and cancellation receipts, without employee tips, after promotion discounts).
15
+ - **`listAllReceipts(options)`**: an `AsyncGenerator` that fetches page after page with the same window, order and view and yields each receipt once, in the server's order; without `limit` it asks for pages of 500, with `cursor` it resumes there. An error on a page ends the loop (receipts already yielded stay valid). After `LIST_ALL_RECEIPTS_MAX_PAGES` (100) pages, or when the server names the same cursor twice, it throws `KasseneckValidationError` (`scope: 'response'`). Reason: a cursor that never ends must not turn into an endless loop of paid reads.
16
+ - **Answer checks:** a page without `receipts`, without boolean `hasMore`, with `hasMore` but no cursor (or a cursor without `hasMore`), or with a `daySummary` that is neither object nor `null` throws `KasseneckValidationError` (`scope: 'response'`).
17
+ - **`LIST_RECEIPTS_ERROR_CODES`**: `invalid_date`, `invalid_range`, `range_too_long`, `invalid_limit`, `invalid_order`, `invalid_view`, `invalid_cursor`, `server_error` (plus the codes of sign-in and edge). `listReceipts` is a read (`outcome: 'rejected'` after a timeout), in `PUBLIC_CALLS` (now 108) and in the contract `surface.json`.
18
+ - Contract re-fetched from the backend (`listReceipts` in `endpoints.public`, schema with `cancellationStatus`/`cancellationReason` catalogues). Also from it: `idempotency_conflict` in `RECEIPT_ERROR_CODES` (readable only; this package sends no `idempotencyKey` on receipts yet), `invoice_number_taken` at the end of `INVOICE_ERROR_CODES` (`fixtures/invoice-api.schema.json` rewritten), and the old settings field `vouchers.label`, which the package does not read (registers before voucher stage 4b).
19
+
7
20
  ## 1.14.0 - 2026-10-23
8
21
 
9
22
  Vouchers at the register, catch-up: the receipt rules of the voucher form, words for the register navigation, the drawer reason of a voucher payout and three shortcut actions; in addition the line `Duplikat am:` on every reprint (`markAsDuplicate`) and the receipt outputs (`logReceiptOutputs`, `outputs` from `getReceipt`, words for the receipt detail). Additive, with one type narrowing (see below).
package/README.md CHANGED
@@ -552,8 +552,9 @@ The facade from `createKasseneckApi` offers `sellReceipt` and
552
552
  `getReceipt` and `getReceiptWithCompany`, `listMyReceipts`, `cancelReceipt`,
553
553
  `sendReceiptEmail`, the report downloads, the FinanzOnline status queries
554
554
  (`getCashboxStatus`, `getSignatureStatus`), `getReportV2({ start, end })` for
555
- the raw receipts and company data of a period, and the Stripe and Hobex cloud
556
- payments.
555
+ the raw receipts and company data of a period, `listReceipts` and
556
+ `listAllReceipts` for receipt lists page by page (see below), and the Stripe
557
+ and Hobex cloud payments.
557
558
 
558
559
  The models are English throughout: the company has `taxNumber` and `vatId`, a
559
560
  receipt `headerVersionId`, `layoutRuleset` and `registrationInfo`, a receipt
@@ -596,6 +597,73 @@ text stays German, and the CSS classes of the React banner stay
596
597
  Times on receipts are read as **Vienna wall-clock time**
597
598
  (`parseServerTimeStamp`), never through `new Date(text)`.
598
599
 
600
+ ### Listing receipts: `listReceipts` and `listAllReceipts`
601
+
602
+ `listReceipts` lists the receipts of the signed-in cash register for one day
603
+ (`date`) or a period (`from` inclusive, `to` exclusive, at most 31 calendar
604
+ days), page by page. Same sign-in as `getReportV2`: `apiKeyAuth` with the API
605
+ key and the `cashregister-token`; the cash register comes from the token.
606
+ Only on `/v3`. Times are Vienna wall-clock text (`YYYY-MM-DD` or
607
+ `YYYY-MM-DDTHH:mm:ss`, no zone), like `timeStamp` on the receipt; a day is a
608
+ calendar day, also when the clocks change. For lists use this instead of
609
+ `getReportV2`, which returns a whole period in one answer and stays for
610
+ reports.
611
+
612
+ ```ts
613
+ import { createKasseneckApi, apiKeyAuth } from '@kreiseck/kasseneck-api';
614
+
615
+ const api = createKasseneckApi({ auth: apiKeyAuth({ apiKey, cashregisterToken }) });
616
+
617
+ // One page (default 100, at most 500), newest first, short lines in cents.
618
+ const page = await api.listReceipts({ date: '2026-10-27', limit: 50 });
619
+ for (const r of page.receipts) console.log(r.counter, r.timeStamp, r.totalCents, r.cancellationStatus);
620
+ console.log(page.daySummary?.revenueCents);
621
+ if (page.hasMore) {
622
+ // Same window, order and view; limit may change.
623
+ const next = await api.listReceipts({ date: '2026-10-27', limit: 50, cursor: page.nextCursor! });
624
+ }
625
+
626
+ // Every receipt of a month, oldest first, as the stored receipt document.
627
+ for await (const receipt of api.listAllReceipts({ from: '2026-10-01', to: '2026-11-01', order: 'asc', view: 'full' })) {
628
+ console.log(receipt.receiptId, receipt.items.length);
629
+ }
630
+ ```
631
+
632
+ - **Options:** exactly one window, `date` or `from` + `to`; `limit` 1-500
633
+ (an integer; the server never caps silently), `order` `desc` (default) or
634
+ `asc`, `view` `summary` (default) or `full`, `cursor` from `nextCursor`.
635
+ The package checks all of this before sending, by the server's rules
636
+ (impossible dates like `2026-02-30`, more than 31 calendar days, `to` not
637
+ after `from`, ...), and throws `KasseneckValidationError` with
638
+ `scope: 'request'`; nothing goes out.
639
+ - **Views:** `summary` returns `ListReceiptsSummary` rows (`receiptId`,
640
+ `counter`, `receiptType`, `zeroKind`, `timeStamp`, `totalCents`,
641
+ `grossByRateCents`, `paymentMethod`, `payments`, `tipCents`, `operator`,
642
+ `cancellationOf`, `cancellationReason`, `cancellationStatus`, `signatureOk`,
643
+ `customProjectId`, `fullReceiptId`); amounts in cents, no items, no layout.
644
+ `full` returns `Receipt`, the same shape as `getReportV2`. For one receipt
645
+ with its print layout use `getReceiptWithCompany`, for the PDF
646
+ `downloadReceipt` with `fullReceiptId`. `ListReceiptsSummary` is not the
647
+ `ReceiptSummary` of `listMyReceipts` (register path, other fields).
648
+ - **`daySummary`** is only there with `date` and only on the first page
649
+ (`null` when the day has no statistics): `receiptCount` counts every
650
+ receipt of the day, `revenueCents` only standard and cancellation receipts,
651
+ without employee tips and after promotion discounts, and `revenueByRate`
652
+ per rate in basis points. It is not the sum of the list; to sum the list,
653
+ sum the list.
654
+ - **`listAllReceipts`** fetches page after page with the same window, `order`
655
+ and `view` and yields each receipt once, in the server's order. Without
656
+ `limit` it asks for pages of 500. An error on any page ends the loop
657
+ (`for await` throws it; receipts already yielded stay valid). After
658
+ `LIST_ALL_RECEIPTS_MAX_PAGES` (100) pages, or when the server repeats a
659
+ cursor, it throws `KasseneckValidationError` (`scope: 'response'`) instead
660
+ of running forever. It does not return `daySummary`.
661
+ - **Errors** (`KasseneckApiError.code`, `LIST_RECEIPTS_ERROR_CODES`):
662
+ `invalid_date`, `invalid_range`, `range_too_long`, `invalid_limit`,
663
+ `invalid_order`, `invalid_view`, `invalid_cursor` (a cursor of another
664
+ cash register or query, or changed window, `order` or `view`),
665
+ `server_error`, plus the codes of sign-in and edge.
666
+
599
667
  ## Cancellation (Storno)
600
668
 
601
669
  A cancellation (*Storno*) refers to the original receipt, in full or in part:
@@ -4,6 +4,7 @@ import { type HobexPayOptions, type HobexRefundOptions } from '../payments/hobex
4
4
  import { type TransportOptions } from './transport.js';
5
5
  import { type CashregisterReportPeriod, type ReportV2, type ReportV2Options } from './reports.js';
6
6
  import { type CashboxStatus, type SignatureStatus } from './status.js';
7
+ import { type ListedReceipt, type ListReceiptsOptions, type ListReceiptsPage, type ListReceiptsView } from './list-receipts.js';
7
8
  import { type SendReceiptEmailOptions, type SendReceiptEmailResult, type LogReceiptOutputsOptions, type LogReceiptOutputsResult, type ListMyReceiptsOptions, type ReceiptList, type ReceiptWithCompany, type SellReceiptOptions, type CancelReceiptOptions, type CancelReceiptResult } from './receipts.js';
8
9
  /**
9
10
  * Schlichte Factory ueber den Endpunkt-Funktionen: bindet einen Transport
@@ -56,6 +57,10 @@ export interface KasseneckApi {
56
57
  listMyCashregisters(): Promise<Cashregister[]>;
57
58
  /** Rohdaten eines Zeitraums: Belege und Firmendaten (`getReportV2`). */
58
59
  getReportV2(options: ReportV2Options): Promise<ReportV2>;
60
+ /** Eine Seite Belege eines Tages oder Zeitraums (`listReceipts`, hoechstens 31 Tage, blaetterbar). */
61
+ listReceipts<V extends ListReceiptsView = 'summary'>(options: ListReceiptsOptions<V>): Promise<ListReceiptsPage<V>>;
62
+ /** Alle Belege eines Tages oder Zeitraums, Seite fuer Seite geholt (hoechstens 100 Seiten). */
63
+ listAllReceipts<V extends ListReceiptsView = 'summary'>(options: ListReceiptsOptions<V>): AsyncGenerator<ListedReceipt<V>, void, undefined>;
59
64
  /** Kassenbericht als PDF (v2): abgeschlossener Monat, Tag oder Zeitraum (Endpunkt `getCashregisterReport`). */
60
65
  getCashregisterReport(options: CashregisterReportPeriod): Promise<Uint8Array>;
61
66
  /** @deprecated Since 1.10.0: use getCashregisterReport. Tagesbericht als PDF (Kalendertag nach Wiener Zeit). */
@@ -6,6 +6,7 @@ const hobex_js_1 = require("../payments/hobex.js");
6
6
  const transport_js_1 = require("./transport.js");
7
7
  const reports_js_1 = require("./reports.js");
8
8
  const status_js_1 = require("./status.js");
9
+ const list_receipts_js_1 = require("./list-receipts.js");
9
10
  const receipts_js_1 = require("./receipts.js");
10
11
  const cashregisters_js_1 = require("./cashregisters.js");
11
12
  const session_js_1 = require("../register/session.js");
@@ -28,6 +29,8 @@ function createKasseneckApi(options) {
28
29
  logReceiptOutputs: (o) => (0, receipts_js_1.logReceiptOutputs)(rufen, o),
29
30
  listMyCashregisters: () => (0, cashregisters_js_1.listMyCashregisters)(rufen),
30
31
  getReportV2: (o) => (0, reports_js_1.getReportV2)(rufen, o),
32
+ listReceipts: (o) => (0, list_receipts_js_1.listReceipts)(rufen, o),
33
+ listAllReceipts: (o) => (0, list_receipts_js_1.listAllReceipts)(rufen, o),
31
34
  getCashregisterReport: (options) => (0, reports_js_1.getCashregisterReport)(rufenBinaer, options),
32
35
  downloadDailyReport: (date) => (0, reports_js_1.downloadDailyReport)(rufenBinaer, date),
33
36
  downloadMonthlyReport: (reportMonth) => (0, reports_js_1.downloadMonthlyReport)(rufenBinaer, reportMonth),
@@ -13,7 +13,7 @@
13
13
  * umhuellt, muss ihn weiterhin absetzen koennen.
14
14
  */
15
15
  import type { PdfOrData, TransportBodyFields, TransportCallOptions } from './transport.js';
16
- export declare const ALL_CALLS: readonly ["activateCashregister", "cancelInvoice", "cancelReceipt", "createCreditNote", "createCustomer", "createCustomerCashregister", "createPartnerCustomer", "checkPartnerCustomerEmail", "createPartnerWebhook", "createPaymentLinkStripe", "createPrintJob", "createReceipt", "deletePartnerWebhook", "downloadDailyReport", "downloadReport", "endRegisterSession", "financeWebService", "generateFullReceiptId", "getCashregisterReport", "getCustomer", "getCustomerCredentials", "getCustomerSignatureStatus", "getFirstReceiptDate", "getInvoice", "getInvoicePdf", "getInvoiceSetupStatus", "getInvoiceXml", "getKasseSettings", "getPartnerCustomer", "getPartnerInfo", "getPrintJob", "getReceipt", "getReportV2", "hobexPayApi", "hobexRefundApi", "issueInvoice", "listCustomerCashregisters", "listInvoices", "listBrands", "listMyArticleGroups", "listMyArticles", "listMyCashregisters", "listMyPrinters", "listMyReceipts", "listMyStock", "listMyStockLocations", "listMyTipRecipients", "listPartnerCustomers", "listPartnerWebhookDeliveries", "listPartnerWebhooks", "listRegisterUsersForDevice", "listRegisterSessionsForDevice", "pairRegisterDevice", "recordInvoicePayment", "registerPinLogin", "registerUserLogin", "renewRegisterSession", "reportCustomerContract", "requestCustomerSignature", "searchCustomers", "sendPartnerCustomerFonLink", "sendPartnerWebhookTest", "sendReceiptEmail", "setMyCashregisterStockLocation", "setMyKasseLogo", "setMyKasseSettings", "setMyRegisterDeviceSettings", "stripeCaptureIntent", "unpairRegisterDevice", "rotatePartnerWebhookSecret", "updateCustomer", "updatePartnerWebhook", "getArticle", "listArticles", "lookupArticleByCode", "listLocations", "getStock", "listStock", "listStockMovements", "createWebhook", "updateWebhook", "deleteWebhook", "listWebhooks", "sendWebhookTest", "rotateWebhookSecret", "listWebhookDeliveries", "createArticle", "updateArticle", "deactivateArticle", "receiveGoods", "transferStock", "recordStockLoss", "changeStockCondition", "reverseStockMovement", "createReservation", "extendReservation", "releaseReservation", "getReservation", "listReservations", "createVariantGroup", "updateVariantGroup", "getVariantGroup", "listVariantGroups", "addVariant", "createStocktake", "listStocktakes", "getStocktake", "listStocktakeItems", "recordStocktakeCount", "voidStocktakeCount", "listStocktakeCounts", "reviewStocktake", "recountStocktake", "closeStocktake", "cancelStocktake", "getStocktakePdf", "orderSignatureCard", "getSignatureCardOrder", "listMyStocktakes", "listMyStocktakeItems", "listMyStocktakeCounts", "recordMyStocktakeCount", "voidMyStocktakeCount", "checkVoucher", "reprintVoucherLabel", "getMyDrawerState", "openMyShift", "recordMyCashMovement", "logMyDrawerOpenings", "getMyShiftReport", "closeMyShift", "logReceiptOutputs"];
16
+ export declare const ALL_CALLS: readonly ["activateCashregister", "cancelInvoice", "cancelReceipt", "createCreditNote", "createCustomer", "createCustomerCashregister", "createPartnerCustomer", "checkPartnerCustomerEmail", "createPartnerWebhook", "createPaymentLinkStripe", "createPrintJob", "createReceipt", "deletePartnerWebhook", "downloadDailyReport", "downloadReport", "endRegisterSession", "financeWebService", "generateFullReceiptId", "getCashregisterReport", "getCustomer", "getCustomerCredentials", "getCustomerSignatureStatus", "getFirstReceiptDate", "getInvoice", "getInvoicePdf", "getInvoiceSetupStatus", "getInvoiceXml", "getKasseSettings", "getPartnerCustomer", "getPartnerInfo", "getPrintJob", "getReceipt", "getReportV2", "hobexPayApi", "hobexRefundApi", "issueInvoice", "listCustomerCashregisters", "listInvoices", "listBrands", "listMyArticleGroups", "listMyArticles", "listMyCashregisters", "listMyPrinters", "listMyReceipts", "listMyStock", "listMyStockLocations", "listMyTipRecipients", "listPartnerCustomers", "listPartnerWebhookDeliveries", "listPartnerWebhooks", "listReceipts", "listRegisterUsersForDevice", "listRegisterSessionsForDevice", "pairRegisterDevice", "recordInvoicePayment", "registerPinLogin", "registerUserLogin", "renewRegisterSession", "reportCustomerContract", "requestCustomerSignature", "searchCustomers", "sendPartnerCustomerFonLink", "sendPartnerWebhookTest", "sendReceiptEmail", "setMyCashregisterStockLocation", "setMyKasseLogo", "setMyKasseSettings", "setMyRegisterDeviceSettings", "stripeCaptureIntent", "unpairRegisterDevice", "rotatePartnerWebhookSecret", "updateCustomer", "updatePartnerWebhook", "getArticle", "listArticles", "lookupArticleByCode", "listLocations", "getStock", "listStock", "listStockMovements", "createWebhook", "updateWebhook", "deleteWebhook", "listWebhooks", "sendWebhookTest", "rotateWebhookSecret", "listWebhookDeliveries", "createArticle", "updateArticle", "deactivateArticle", "receiveGoods", "transferStock", "recordStockLoss", "changeStockCondition", "reverseStockMovement", "createReservation", "extendReservation", "releaseReservation", "getReservation", "listReservations", "createVariantGroup", "updateVariantGroup", "getVariantGroup", "listVariantGroups", "addVariant", "createStocktake", "listStocktakes", "getStocktake", "listStocktakeItems", "recordStocktakeCount", "voidStocktakeCount", "listStocktakeCounts", "reviewStocktake", "recountStocktake", "closeStocktake", "cancelStocktake", "getStocktakePdf", "orderSignatureCard", "getSignatureCardOrder", "listMyStocktakes", "listMyStocktakeItems", "listMyStocktakeCounts", "recordMyStocktakeCount", "voidMyStocktakeCount", "checkVoucher", "reprintVoucherLabel", "getMyDrawerState", "openMyShift", "recordMyCashMovement", "logMyDrawerOpenings", "getMyShiftReport", "closeMyShift", "logReceiptOutputs"];
17
17
  export type ApiCall = typeof ALL_CALLS[number];
18
18
  /**
19
19
  * Die oeffentlichen Endpunkte unter `/v3` (`https://api.kasseneck.at/v3/<name>`),
@@ -21,7 +21,7 @@ export type ApiCall = typeof ALL_CALLS[number];
21
21
  * (`fixtures/v3/v3-vokabular.json`, `endpoints.public`, umbenannt nach
22
22
  * `names`). Ein Test haelt beide Listen deckungsgleich.
23
23
  */
24
- export declare const PUBLIC_CALLS: readonly ["createReceipt", "getReceipt", "cancelReceipt", "sendReceiptEmail", "generateFullReceiptId", "downloadReceipt", "getFirstReceiptDate", "getReportV2", "downloadReport", "downloadDailyReport", "getCashregisterReport", "createPaymentLinkStripe", "stripeCaptureIntent", "hobexPayApi", "hobexRefundApi", "hobexGetStatus", "financeWebService", "listMyTipRecipients", "getPartnerInfo", "createPartnerCustomer", "checkPartnerCustomerEmail", "listPartnerCustomers", "getPartnerCustomer", "sendPartnerCustomerFonLink", "createPartnerWebhook", "updatePartnerWebhook", "deletePartnerWebhook", "listPartnerWebhooks", "sendPartnerWebhookTest", "rotatePartnerWebhookSecret", "listPartnerWebhookDeliveries", "requestCustomerSignature", "getCustomerSignatureStatus", "createCustomerCashregister", "activateCashregister", "listCustomerCashregisters", "getCustomerCredentials", "reportCustomerContract", "getPartnerBilling", "getPartnerBillingMonth", "createCustomer", "getCustomer", "updateCustomer", "searchCustomers", "issueInvoice", "cancelInvoice", "createCreditNote", "getInvoice", "listInvoices", "getInvoicePdf", "getInvoiceXml", "getInvoiceSetupStatus", "listBrands", "recordInvoicePayment", "createInvoiceItem", "updateInvoiceItem", "withdrawInvoiceItem", "getInvoiceItem", "listInvoiceItems", "setCustomerMandate", "revokeCustomerMandate", "getArticle", "listArticles", "lookupArticleByCode", "listLocations", "getStock", "listStock", "listStockMovements", "createWebhook", "updateWebhook", "deleteWebhook", "listWebhooks", "sendWebhookTest", "rotateWebhookSecret", "listWebhookDeliveries", "createArticle", "updateArticle", "deactivateArticle", "receiveGoods", "transferStock", "recordStockLoss", "changeStockCondition", "reverseStockMovement", "createReservation", "extendReservation", "releaseReservation", "getReservation", "listReservations", "createVariantGroup", "updateVariantGroup", "getVariantGroup", "listVariantGroups", "addVariant", "createStocktake", "listStocktakes", "getStocktake", "listStocktakeItems", "recordStocktakeCount", "voidStocktakeCount", "listStocktakeCounts", "reviewStocktake", "recountStocktake", "closeStocktake", "cancelStocktake", "getStocktakePdf", "orderSignatureCard", "getSignatureCardOrder"];
24
+ export declare const PUBLIC_CALLS: readonly ["createReceipt", "getReceipt", "cancelReceipt", "sendReceiptEmail", "generateFullReceiptId", "downloadReceipt", "getFirstReceiptDate", "getReportV2", "downloadReport", "downloadDailyReport", "getCashregisterReport", "createPaymentLinkStripe", "stripeCaptureIntent", "hobexPayApi", "hobexRefundApi", "hobexGetStatus", "financeWebService", "listMyTipRecipients", "getPartnerInfo", "createPartnerCustomer", "checkPartnerCustomerEmail", "listPartnerCustomers", "getPartnerCustomer", "sendPartnerCustomerFonLink", "createPartnerWebhook", "updatePartnerWebhook", "deletePartnerWebhook", "listPartnerWebhooks", "sendPartnerWebhookTest", "rotatePartnerWebhookSecret", "listPartnerWebhookDeliveries", "requestCustomerSignature", "getCustomerSignatureStatus", "createCustomerCashregister", "activateCashregister", "listCustomerCashregisters", "getCustomerCredentials", "reportCustomerContract", "getPartnerBilling", "getPartnerBillingMonth", "createCustomer", "getCustomer", "updateCustomer", "searchCustomers", "issueInvoice", "cancelInvoice", "createCreditNote", "getInvoice", "listInvoices", "getInvoicePdf", "getInvoiceXml", "getInvoiceSetupStatus", "listBrands", "recordInvoicePayment", "createInvoiceItem", "updateInvoiceItem", "withdrawInvoiceItem", "getInvoiceItem", "listInvoiceItems", "setCustomerMandate", "revokeCustomerMandate", "getArticle", "listArticles", "lookupArticleByCode", "listLocations", "getStock", "listStock", "listStockMovements", "createWebhook", "updateWebhook", "deleteWebhook", "listWebhooks", "sendWebhookTest", "rotateWebhookSecret", "listWebhookDeliveries", "createArticle", "updateArticle", "deactivateArticle", "receiveGoods", "transferStock", "recordStockLoss", "changeStockCondition", "reverseStockMovement", "createReservation", "extendReservation", "releaseReservation", "getReservation", "listReservations", "createVariantGroup", "updateVariantGroup", "getVariantGroup", "listVariantGroups", "addVariant", "createStocktake", "listStocktakes", "getStocktake", "listStocktakeItems", "recordStocktakeCount", "voidStocktakeCount", "listStocktakeCounts", "reviewStocktake", "recountStocktake", "closeStocktake", "cancelStocktake", "getStocktakePdf", "orderSignatureCard", "getSignatureCardOrder", "listReceipts"];
25
25
  /**
26
26
  * Die Endpunkte des Kassenwegs (`https://kasse.kasseneck.at/api/v3/<name>`,
27
27
  * Web-Kasse: gleicher Ursprung `/api/v3`), in der Reihenfolge von
@@ -55,6 +55,7 @@ exports.ALL_CALLS = [
55
55
  'listPartnerCustomers',
56
56
  'listPartnerWebhookDeliveries',
57
57
  'listPartnerWebhooks',
58
+ 'listReceipts',
58
59
  'listRegisterUsersForDevice',
59
60
  'listRegisterSessionsForDevice',
60
61
  'pairRegisterDevice',
@@ -268,6 +269,8 @@ exports.PUBLIC_CALLS = [
268
269
  'getStocktakePdf',
269
270
  'orderSignatureCard',
270
271
  'getSignatureCardOrder',
272
+ // Belege einer Kasse auflisten, nur unter /v3 (Nachfolger von getReportV2 fuer Listen).
273
+ 'listReceipts',
271
274
  ];
272
275
  /**
273
276
  * Die Endpunkte des Kassenwegs (`https://kasse.kasseneck.at/api/v3/<name>`,
@@ -495,6 +498,7 @@ exports.CALLS_WITHOUT_EFFECT = Object.freeze({
495
498
  listPartnerCustomers: 'read',
496
499
  listPartnerWebhookDeliveries: 'read',
497
500
  listPartnerWebhooks: 'read',
501
+ listReceipts: 'read',
498
502
  listRegisterSessionsForDevice: 'read',
499
503
  listRegisterUsersForDevice: 'read',
500
504
  listReservations: 'read',
@@ -4,6 +4,7 @@ export { ALL_CALLS, type ApiCall, PUBLIC_CALLS, POS_CALLS, UNKNOWN_OUTCOME_CALLS
4
4
  export { KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNetworkError, KasseneckValidationError, type ValidationScope, type KasseneckError, type HttpFailureReason, type CauseDigest, type ErrorOutcome, CLIENT_ERROR_CODES, type ClientErrorCode, isKasseneckApiError, isKasseneckAuthError, isKasseneckHttpError, isKasseneckNetworkError, isKasseneckValidationError, isOutcomeUnknown, } from './errors.js';
5
5
  export { type ReceiptCommonOptions, type SellReceiptOptions, type TipOptions, type TipRecipientShare, type CancelReceiptOptions, type ReceiptWithCompany, sellReceipt, sellReceiptWithCompany, paymentsExpectedCents, cardRefundReference, receiptLayoutFromResult, cancelReceipt, type CancelReceiptResult, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, type ListMyReceiptsOptions, type ReceiptList, type ReceiptListStats, checkVoucherCombinationError, type SendReceiptEmailOptions, type SendReceiptEmailResult, sendReceiptEmail, type ReceiptOutputEntry, type LogReceiptOutputsOptions, type LogReceiptOutputsResult, type RejectedReceiptOutput, logReceiptOutputs, } from './receipts.js';
6
6
  export { listMyCashregisters } from './cashregisters.js';
7
+ export { listReceipts, listAllReceipts, fromListReceiptsSummaryPayload, LIST_RECEIPTS_VIEWS, LIST_RECEIPTS_ORDERS, LIST_RECEIPTS_LIMIT_MAX, LIST_RECEIPTS_DAYS_MAX, LIST_ALL_RECEIPTS_MAX_PAGES, LIST_RECEIPTS_ERROR_CODES, type ListReceiptsErrorCode, type ListReceiptsView, type ListReceiptsOrder, type ListReceiptsOptions, type ListReceiptsWindow, type ListReceiptsGrossByRate, type ListReceiptsSummary, type ListReceiptsDaySummary, type ListReceiptsPage, type ListedReceipt, } from './list-receipts.js';
7
8
  export { downloadDailyReport, downloadMonthlyReport, getCashregisterReport, getReportV2, type CashregisterReportPeriod, type ReportV2, type ReportV2Metadata, type ReportV2Options } from './reports.js';
8
9
  export { type CashboxStatus, type SignatureStatus, getCashboxStatus, getSignatureStatus, } from './status.js';
9
10
  export { type KasseneckApi, createKasseneckApi } from './api.js';
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createKasseneckApi = exports.getSignatureStatus = exports.getCashboxStatus = exports.getReportV2 = exports.getCashregisterReport = exports.downloadMonthlyReport = exports.downloadDailyReport = exports.listMyCashregisters = exports.logReceiptOutputs = exports.sendReceiptEmail = exports.checkVoucherCombinationError = exports.listMyReceipts = exports.getFirstReceiptDate = exports.generateFullReceiptId = exports.getReceiptWithCompany = exports.getReceipt = exports.zeroReceipt = exports.cancelReceipt = exports.receiptLayoutFromResult = exports.cardRefundReference = exports.paymentsExpectedCents = exports.sellReceiptWithCompany = exports.sellReceipt = exports.isOutcomeUnknown = exports.isKasseneckValidationError = exports.isKasseneckNetworkError = exports.isKasseneckHttpError = exports.isKasseneckAuthError = exports.isKasseneckApiError = exports.CLIENT_ERROR_CODES = exports.KasseneckValidationError = exports.KasseneckNetworkError = exports.KasseneckHttpError = exports.KasseneckAuthError = exports.KasseneckApiError = exports.UNKNOWN_OUTCOME_CALLS = exports.POS_CALLS = exports.PUBLIC_CALLS = exports.ALL_CALLS = exports.createPdfOrDataTransport = exports.createBinaryTransport = exports.createTransport = exports.DEFAULT_TIMEOUT_MS = exports.POS_BASE_URL = exports.DEFAULT_BASE_URL = exports.registerUserAuth = exports.apiKeyAuth = void 0;
3
+ exports.downloadDailyReport = 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 = exports.fromListReceiptsSummaryPayload = exports.listAllReceipts = exports.listReceipts = exports.listMyCashregisters = exports.logReceiptOutputs = exports.sendReceiptEmail = exports.checkVoucherCombinationError = exports.listMyReceipts = exports.getFirstReceiptDate = exports.generateFullReceiptId = exports.getReceiptWithCompany = exports.getReceipt = exports.zeroReceipt = exports.cancelReceipt = exports.receiptLayoutFromResult = exports.cardRefundReference = exports.paymentsExpectedCents = exports.sellReceiptWithCompany = exports.sellReceipt = exports.isOutcomeUnknown = exports.isKasseneckValidationError = exports.isKasseneckNetworkError = exports.isKasseneckHttpError = exports.isKasseneckAuthError = exports.isKasseneckApiError = exports.CLIENT_ERROR_CODES = exports.KasseneckValidationError = exports.KasseneckNetworkError = exports.KasseneckHttpError = exports.KasseneckAuthError = exports.KasseneckApiError = exports.UNKNOWN_OUTCOME_CALLS = exports.POS_CALLS = exports.PUBLIC_CALLS = exports.ALL_CALLS = exports.createPdfOrDataTransport = exports.createBinaryTransport = exports.createTransport = exports.DEFAULT_TIMEOUT_MS = exports.POS_BASE_URL = exports.DEFAULT_BASE_URL = exports.registerUserAuth = exports.apiKeyAuth = void 0;
4
+ exports.createKasseneckApi = exports.getSignatureStatus = exports.getCashboxStatus = exports.getReportV2 = exports.getCashregisterReport = exports.downloadMonthlyReport = void 0;
4
5
  var auth_js_1 = require("./auth.js");
5
6
  Object.defineProperty(exports, "apiKeyAuth", { enumerable: true, get: function () { return auth_js_1.apiKeyAuth; } });
6
7
  Object.defineProperty(exports, "registerUserAuth", { enumerable: true, get: function () { return auth_js_1.registerUserAuth; } });
@@ -47,6 +48,16 @@ Object.defineProperty(exports, "sendReceiptEmail", { enumerable: true, get: func
47
48
  Object.defineProperty(exports, "logReceiptOutputs", { enumerable: true, get: function () { return receipts_js_1.logReceiptOutputs; } });
48
49
  var cashregisters_js_1 = require("./cashregisters.js");
49
50
  Object.defineProperty(exports, "listMyCashregisters", { enumerable: true, get: function () { return cashregisters_js_1.listMyCashregisters; } });
51
+ var list_receipts_js_1 = require("./list-receipts.js");
52
+ Object.defineProperty(exports, "listReceipts", { enumerable: true, get: function () { return list_receipts_js_1.listReceipts; } });
53
+ Object.defineProperty(exports, "listAllReceipts", { enumerable: true, get: function () { return list_receipts_js_1.listAllReceipts; } });
54
+ Object.defineProperty(exports, "fromListReceiptsSummaryPayload", { enumerable: true, get: function () { return list_receipts_js_1.fromListReceiptsSummaryPayload; } });
55
+ Object.defineProperty(exports, "LIST_RECEIPTS_VIEWS", { enumerable: true, get: function () { return list_receipts_js_1.LIST_RECEIPTS_VIEWS; } });
56
+ Object.defineProperty(exports, "LIST_RECEIPTS_ORDERS", { enumerable: true, get: function () { return list_receipts_js_1.LIST_RECEIPTS_ORDERS; } });
57
+ Object.defineProperty(exports, "LIST_RECEIPTS_LIMIT_MAX", { enumerable: true, get: function () { return list_receipts_js_1.LIST_RECEIPTS_LIMIT_MAX; } });
58
+ Object.defineProperty(exports, "LIST_RECEIPTS_DAYS_MAX", { enumerable: true, get: function () { return list_receipts_js_1.LIST_RECEIPTS_DAYS_MAX; } });
59
+ Object.defineProperty(exports, "LIST_ALL_RECEIPTS_MAX_PAGES", { enumerable: true, get: function () { return list_receipts_js_1.LIST_ALL_RECEIPTS_MAX_PAGES; } });
60
+ Object.defineProperty(exports, "LIST_RECEIPTS_ERROR_CODES", { enumerable: true, get: function () { return list_receipts_js_1.LIST_RECEIPTS_ERROR_CODES; } });
50
61
  var reports_js_1 = require("./reports.js");
51
62
  Object.defineProperty(exports, "downloadDailyReport", { enumerable: true, get: function () { return reports_js_1.downloadDailyReport; } });
52
63
  Object.defineProperty(exports, "downloadMonthlyReport", { enumerable: true, get: function () { return reports_js_1.downloadMonthlyReport; } });
@@ -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>;