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