@kreiseck/kasseneck-api 0.31.0 → 1.0.0-rc.2
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 +317 -0
- package/README.de.md +11 -7
- package/README.md +509 -126
- package/dist/cjs/client/api.d.ts +7 -6
- package/dist/cjs/client/api.js +2 -2
- package/dist/cjs/client/aufrufe.d.ts +29 -5
- package/dist/cjs/client/aufrufe.js +114 -2
- package/dist/cjs/client/auth.d.ts +2 -0
- package/dist/cjs/client/auth.js +17 -1
- package/dist/cjs/client/cashregisters.d.ts +1 -1
- package/dist/cjs/client/cashregisters.js +2 -2
- package/dist/cjs/client/errors.d.ts +94 -19
- package/dist/cjs/client/errors.js +132 -28
- package/dist/cjs/client/fehlercodes.d.ts +9 -0
- package/dist/cjs/client/fehlercodes.js +36 -0
- package/dist/cjs/client/index.d.ts +5 -5
- package/dist/cjs/client/index.js +11 -3
- package/dist/cjs/client/receipts.d.ts +131 -124
- package/dist/cjs/client/receipts.js +196 -137
- package/dist/cjs/client/reports.d.ts +26 -4
- package/dist/cjs/client/reports.js +37 -4
- package/dist/cjs/client/status.d.ts +3 -3
- package/dist/cjs/client/status.js +7 -7
- package/dist/cjs/client/transport.d.ts +56 -4
- package/dist/cjs/client/transport.js +234 -25
- package/dist/cjs/enums/vat-rate.d.ts +2 -2
- package/dist/cjs/enums/vat-rate.js +1 -1
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.js +42 -13
- package/dist/{esm/rechnung → cjs/invoice}/api.d.ts +18 -17
- package/dist/cjs/{rechnung → invoice}/api.js +6 -6
- package/dist/{esm/rechnung → cjs/invoice}/auth.d.ts +2 -2
- package/dist/cjs/{rechnung → invoice}/auth.js +5 -5
- package/dist/{esm/rechnung/rechnen.d.ts → cjs/invoice/calc.d.ts} +27 -27
- package/dist/cjs/{rechnung/rechnen.js → invoice/calc.js} +54 -54
- package/dist/{esm/rechnung → cjs/invoice}/endpunkte.d.ts +23 -21
- package/dist/cjs/{rechnung → invoice}/endpunkte.js +52 -42
- package/dist/cjs/invoice/fehler.d.ts +31 -0
- package/dist/cjs/invoice/fehler.js +39 -0
- package/dist/cjs/invoice/index.d.ts +21 -0
- package/dist/cjs/invoice/index.js +86 -0
- package/dist/cjs/{rechnung → invoice}/summen.d.ts +12 -12
- package/dist/cjs/{rechnung → invoice}/summen.js +14 -14
- package/dist/cjs/invoice/texte.d.ts +224 -0
- package/dist/cjs/invoice/texte.js +425 -0
- package/dist/{esm/rechnung → cjs/invoice}/typen.d.ts +32 -11
- package/dist/cjs/{rechnung → invoice}/vertrag.d.ts +97 -71
- package/dist/cjs/{rechnung → invoice}/vertrag.js +144 -82
- package/dist/cjs/models/cancellation.d.ts +43 -24
- package/dist/cjs/models/cancellation.js +94 -46
- package/dist/cjs/models/hobex-receipt.d.ts +3 -3
- package/dist/cjs/models/hobex-receipt.js +35 -35
- package/dist/cjs/models/index.d.ts +6 -5
- package/dist/cjs/models/index.js +22 -2
- package/dist/cjs/models/payment-errors.d.ts +32 -15
- package/dist/cjs/models/payment-errors.js +80 -32
- package/dist/cjs/models/receipt-company.d.ts +6 -5
- package/dist/cjs/models/receipt-company.js +4 -4
- package/dist/cjs/models/receipt-email.d.ts +32 -18
- package/dist/cjs/models/receipt-email.js +69 -24
- package/dist/cjs/models/receipt-errors.d.ts +39 -0
- package/dist/cjs/models/receipt-errors.js +94 -0
- package/dist/cjs/models/receipt-item.d.ts +9 -1
- package/dist/cjs/models/receipt-item.js +3 -0
- package/dist/cjs/models/receipt-summary.d.ts +10 -4
- package/dist/cjs/models/receipt-summary.js +10 -4
- package/dist/cjs/models/receipt.d.ts +31 -2
- package/dist/cjs/models/receipt.js +12 -1
- package/dist/cjs/models/voucher.d.ts +7 -6
- package/dist/cjs/models/voucher.js +2 -7
- package/dist/cjs/partner/ablauf.d.ts +10 -10
- package/dist/cjs/partner/ablauf.js +29 -29
- package/dist/cjs/partner/api.d.ts +26 -23
- package/dist/cjs/partner/api.js +11 -13
- package/dist/cjs/partner/auth.d.ts +1 -1
- package/dist/cjs/partner/auth.js +2 -2
- package/dist/cjs/partner/betrieb.d.ts +7 -7
- package/dist/cjs/partner/betrieb.js +10 -10
- package/dist/cjs/partner/endpunkte.d.ts +27 -14
- package/dist/cjs/partner/endpunkte.js +80 -39
- package/dist/cjs/partner/fehler.d.ts +60 -30
- package/dist/cjs/partner/fehler.js +99 -43
- package/dist/cjs/partner/index.d.ts +13 -12
- package/dist/cjs/partner/index.js +35 -22
- package/dist/cjs/partner/secret.d.ts +3 -3
- package/dist/cjs/partner/secret.js +6 -6
- package/dist/cjs/partner/typen.d.ts +129 -71
- package/dist/cjs/partner/typen.js +76 -3
- package/dist/cjs/partner/webhook-signatur.d.ts +2 -2
- package/dist/cjs/partner/webhook-signatur.js +12 -12
- package/dist/cjs/partner/webhooks.d.ts +60 -32
- package/dist/cjs/partner/webhooks.js +40 -34
- package/dist/cjs/payments/hobex.d.ts +11 -3
- package/dist/cjs/payments/hobex.js +17 -5
- package/dist/cjs/payments/stripe.d.ts +5 -2
- package/dist/cjs/payments/stripe.js +10 -5
- package/dist/cjs/pos/artikel.d.ts +90 -0
- package/dist/cjs/pos/artikel.js +89 -0
- package/dist/cjs/pos/client.d.ts +27 -0
- package/dist/cjs/pos/client.js +144 -0
- package/dist/cjs/pos/drucker.d.ts +86 -0
- package/dist/cjs/pos/drucker.js +78 -0
- package/dist/cjs/pos/errors.d.ts +36 -0
- package/dist/cjs/pos/errors.js +95 -0
- package/dist/cjs/pos/index.d.ts +15 -0
- package/dist/cjs/pos/index.js +102 -0
- package/dist/cjs/pos/settings.d.ts +313 -0
- package/dist/cjs/pos/settings.js +376 -0
- package/dist/cjs/pos/texte.d.ts +883 -0
- package/dist/cjs/pos/texte.js +489 -0
- package/dist/cjs/{kasse → pos}/trinkgeld.d.ts +1 -1
- package/dist/cjs/{kasse → pos}/trinkgeld.js +2 -2
- package/dist/cjs/printing/escpos.d.ts +29 -29
- package/dist/cjs/printing/escpos.js +61 -61
- package/dist/cjs/printing/index.d.ts +2 -2
- package/dist/cjs/printing/index.js +17 -17
- package/dist/cjs/printing/qr-groesse.d.ts +38 -38
- package/dist/cjs/printing/qr-groesse.js +47 -47
- package/dist/cjs/printing/webusb.d.ts +2 -2
- package/dist/cjs/printing/webusb.js +4 -4
- package/dist/cjs/react/index.d.ts +21 -21
- package/dist/cjs/react/index.js +40 -30
- package/dist/cjs/receipt/bild.d.ts +4 -4
- package/dist/cjs/receipt/bild.js +11 -11
- package/dist/cjs/receipt/blatt.d.ts +46 -46
- package/dist/cjs/receipt/blatt.js +59 -59
- package/dist/cjs/receipt/discount.d.ts +1 -1
- package/dist/cjs/receipt/discount.js +8 -8
- package/dist/cjs/receipt/due.d.ts +86 -0
- package/dist/cjs/receipt/due.js +261 -0
- package/dist/cjs/receipt/epos.d.ts +22 -22
- package/dist/cjs/receipt/epos.js +45 -45
- package/dist/cjs/receipt/grid.d.ts +10 -10
- package/dist/cjs/receipt/grid.js +20 -20
- package/dist/cjs/receipt/index.d.ts +9 -8
- package/dist/cjs/receipt/index.js +26 -23
- package/dist/cjs/receipt/layout-escpos.d.ts +24 -24
- package/dist/cjs/receipt/layout-escpos.js +49 -49
- package/dist/cjs/receipt/layout.d.ts +28 -23
- package/dist/cjs/receipt/layout.js +45 -21
- package/dist/cjs/receipt/marke-daten.d.ts +8 -8
- package/dist/cjs/receipt/marke-daten.js +8 -8
- package/dist/cjs/receipt/marke.d.ts +7 -7
- package/dist/cjs/receipt/marke.js +10 -10
- package/dist/cjs/register/errors.d.ts +61 -0
- package/dist/cjs/register/errors.js +112 -0
- package/dist/cjs/register/index.d.ts +14 -1
- package/dist/cjs/register/index.js +20 -1
- package/dist/cjs/register/pairing.d.ts +55 -36
- package/dist/cjs/register/pairing.js +33 -29
- package/dist/cjs/register/session.d.ts +5 -5
- package/dist/cjs/register/session.js +7 -7
- package/dist/cjs/stored/draht.d.ts +45 -0
- package/dist/cjs/stored/draht.js +220 -0
- package/dist/cjs/stored/einstellungen.d.ts +23 -0
- package/dist/cjs/stored/einstellungen.js +200 -0
- package/dist/cjs/stored/index.d.ts +109 -0
- package/dist/cjs/stored/index.js +225 -0
- package/dist/cjs/stored/vokabular.d.ts +18 -0
- package/dist/cjs/stored/vokabular.js +389 -0
- package/dist/cjs/version.d.ts +7 -0
- package/dist/cjs/version.js +10 -0
- package/dist/cjs/vienna-time.d.ts +1 -1
- package/dist/cjs/vienna-time.js +2 -2
- package/dist/esm/client/api.d.ts +7 -6
- package/dist/esm/client/api.js +4 -4
- package/dist/esm/client/aufrufe.d.ts +29 -5
- package/dist/esm/client/aufrufe.js +111 -1
- package/dist/esm/client/auth.d.ts +2 -0
- package/dist/esm/client/auth.js +16 -1
- package/dist/esm/client/cashregisters.d.ts +1 -1
- package/dist/esm/client/cashregisters.js +2 -2
- package/dist/esm/client/errors.d.ts +94 -19
- package/dist/esm/client/errors.js +129 -27
- package/dist/esm/client/fehlercodes.d.ts +9 -0
- package/dist/esm/client/fehlercodes.js +32 -0
- package/dist/esm/client/index.d.ts +5 -5
- package/dist/esm/client/index.js +5 -5
- package/dist/esm/client/receipts.d.ts +131 -124
- package/dist/esm/client/receipts.js +195 -140
- package/dist/esm/client/reports.d.ts +26 -4
- package/dist/esm/client/reports.js +36 -4
- package/dist/esm/client/status.d.ts +3 -3
- package/dist/esm/client/status.js +7 -7
- package/dist/esm/client/transport.d.ts +56 -4
- package/dist/esm/client/transport.js +233 -24
- package/dist/esm/enums/vat-rate.d.ts +2 -2
- package/dist/esm/enums/vat-rate.js +1 -1
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +4 -3
- package/dist/{cjs/rechnung → esm/invoice}/api.d.ts +18 -17
- package/dist/esm/{rechnung → invoice}/api.js +6 -6
- package/dist/{cjs/rechnung → esm/invoice}/auth.d.ts +2 -2
- package/dist/esm/{rechnung → invoice}/auth.js +4 -4
- package/dist/{cjs/rechnung/rechnen.d.ts → esm/invoice/calc.d.ts} +27 -27
- package/dist/esm/{rechnung/rechnen.js → invoice/calc.js} +45 -45
- package/dist/{cjs/rechnung → esm/invoice}/endpunkte.d.ts +23 -21
- package/dist/esm/{rechnung → invoice}/endpunkte.js +52 -42
- package/dist/esm/invoice/fehler.d.ts +31 -0
- package/dist/esm/invoice/fehler.js +33 -0
- package/dist/esm/invoice/index.d.ts +21 -0
- package/dist/esm/invoice/index.js +20 -0
- package/dist/esm/{rechnung → invoice}/summen.d.ts +12 -12
- package/dist/esm/{rechnung → invoice}/summen.js +12 -12
- package/dist/esm/invoice/texte.d.ts +224 -0
- package/dist/esm/invoice/texte.js +421 -0
- package/dist/{cjs/rechnung → esm/invoice}/typen.d.ts +32 -11
- package/dist/esm/{rechnung → invoice}/vertrag.d.ts +97 -71
- package/dist/esm/{rechnung → invoice}/vertrag.js +143 -81
- package/dist/esm/models/cancellation.d.ts +43 -24
- package/dist/esm/models/cancellation.js +90 -45
- package/dist/esm/models/hobex-receipt.d.ts +3 -3
- package/dist/esm/models/hobex-receipt.js +35 -35
- package/dist/esm/models/index.d.ts +6 -5
- package/dist/esm/models/index.js +6 -5
- package/dist/esm/models/payment-errors.d.ts +32 -15
- package/dist/esm/models/payment-errors.js +77 -32
- package/dist/esm/models/receipt-company.d.ts +6 -5
- package/dist/esm/models/receipt-company.js +4 -4
- package/dist/esm/models/receipt-email.d.ts +32 -18
- package/dist/esm/models/receipt-email.js +65 -23
- package/dist/esm/models/receipt-errors.d.ts +39 -0
- package/dist/esm/models/receipt-errors.js +87 -0
- package/dist/esm/models/receipt-item.d.ts +9 -1
- package/dist/esm/models/receipt-item.js +3 -0
- package/dist/esm/models/receipt-summary.d.ts +10 -4
- package/dist/esm/models/receipt-summary.js +9 -3
- package/dist/esm/models/receipt.d.ts +31 -2
- package/dist/esm/models/receipt.js +12 -2
- package/dist/esm/models/voucher.d.ts +7 -6
- package/dist/esm/models/voucher.js +2 -7
- package/dist/esm/partner/ablauf.d.ts +10 -10
- package/dist/esm/partner/ablauf.js +27 -27
- package/dist/esm/partner/api.d.ts +26 -23
- package/dist/esm/partner/api.js +13 -15
- package/dist/esm/partner/auth.d.ts +1 -1
- package/dist/esm/partner/auth.js +2 -2
- package/dist/esm/partner/betrieb.d.ts +7 -7
- package/dist/esm/partner/betrieb.js +8 -8
- package/dist/esm/partner/endpunkte.d.ts +27 -14
- package/dist/esm/partner/endpunkte.js +79 -39
- package/dist/esm/partner/fehler.d.ts +60 -30
- package/dist/esm/partner/fehler.js +91 -35
- package/dist/esm/partner/index.d.ts +13 -12
- package/dist/esm/partner/index.js +12 -11
- package/dist/esm/partner/secret.d.ts +3 -3
- package/dist/esm/partner/secret.js +5 -5
- package/dist/esm/partner/typen.d.ts +129 -71
- package/dist/esm/partner/typen.js +75 -2
- package/dist/esm/partner/webhook-signatur.d.ts +2 -2
- package/dist/esm/partner/webhook-signatur.js +12 -12
- package/dist/esm/partner/webhooks.d.ts +60 -32
- package/dist/esm/partner/webhooks.js +38 -32
- package/dist/esm/payments/hobex.d.ts +11 -3
- package/dist/esm/payments/hobex.js +18 -6
- package/dist/esm/payments/stripe.d.ts +5 -2
- package/dist/esm/payments/stripe.js +11 -6
- package/dist/esm/pos/artikel.d.ts +90 -0
- package/dist/esm/pos/artikel.js +79 -0
- package/dist/esm/pos/client.d.ts +27 -0
- package/dist/esm/pos/client.js +137 -0
- package/dist/esm/pos/drucker.d.ts +86 -0
- package/dist/esm/pos/drucker.js +71 -0
- package/dist/esm/pos/errors.d.ts +36 -0
- package/dist/esm/pos/errors.js +88 -0
- package/dist/esm/pos/index.d.ts +15 -0
- package/dist/esm/pos/index.js +20 -0
- package/dist/esm/pos/settings.d.ts +313 -0
- package/dist/esm/pos/settings.js +367 -0
- package/dist/esm/pos/texte.d.ts +883 -0
- package/dist/esm/pos/texte.js +481 -0
- package/dist/esm/{kasse → pos}/trinkgeld.d.ts +1 -1
- package/dist/esm/{kasse → pos}/trinkgeld.js +2 -2
- package/dist/esm/printing/escpos.d.ts +29 -29
- package/dist/esm/printing/escpos.js +56 -56
- package/dist/esm/printing/index.d.ts +2 -2
- package/dist/esm/printing/index.js +2 -2
- package/dist/esm/printing/qr-groesse.d.ts +38 -38
- package/dist/esm/printing/qr-groesse.js +42 -42
- package/dist/esm/printing/webusb.d.ts +2 -2
- package/dist/esm/printing/webusb.js +4 -4
- package/dist/esm/react/index.d.ts +21 -21
- package/dist/esm/react/index.js +39 -29
- package/dist/esm/receipt/bild.d.ts +4 -4
- package/dist/esm/receipt/bild.js +11 -11
- package/dist/esm/receipt/blatt.d.ts +46 -46
- package/dist/esm/receipt/blatt.js +55 -55
- package/dist/esm/receipt/discount.d.ts +1 -1
- package/dist/esm/receipt/discount.js +7 -7
- package/dist/esm/receipt/due.d.ts +86 -0
- package/dist/esm/receipt/due.js +257 -0
- package/dist/esm/receipt/epos.d.ts +22 -22
- package/dist/esm/receipt/epos.js +47 -47
- package/dist/esm/receipt/grid.d.ts +10 -10
- package/dist/esm/receipt/grid.js +18 -18
- package/dist/esm/receipt/index.d.ts +9 -8
- package/dist/esm/receipt/index.js +9 -8
- package/dist/esm/receipt/layout-escpos.d.ts +24 -24
- package/dist/esm/receipt/layout-escpos.js +51 -51
- package/dist/esm/receipt/layout.d.ts +28 -23
- package/dist/esm/receipt/layout.js +44 -20
- package/dist/esm/receipt/marke-daten.d.ts +8 -8
- package/dist/esm/receipt/marke-daten.js +7 -7
- package/dist/esm/receipt/marke.d.ts +7 -7
- package/dist/esm/receipt/marke.js +10 -10
- package/dist/esm/register/errors.d.ts +61 -0
- package/dist/esm/register/errors.js +104 -0
- package/dist/esm/register/index.d.ts +14 -1
- package/dist/esm/register/index.js +13 -0
- package/dist/esm/register/pairing.d.ts +55 -36
- package/dist/esm/register/pairing.js +33 -29
- package/dist/esm/register/session.d.ts +5 -5
- package/dist/esm/register/session.js +7 -7
- package/dist/esm/stored/draht.d.ts +45 -0
- package/dist/esm/stored/draht.js +208 -0
- package/dist/esm/stored/einstellungen.d.ts +23 -0
- package/dist/esm/stored/einstellungen.js +196 -0
- package/dist/esm/stored/index.d.ts +109 -0
- package/dist/esm/stored/index.js +217 -0
- package/dist/esm/stored/vokabular.d.ts +18 -0
- package/dist/esm/stored/vokabular.js +386 -0
- package/dist/esm/version.d.ts +7 -0
- package/dist/esm/version.js +7 -0
- package/dist/esm/vienna-time.d.ts +1 -1
- package/dist/esm/vienna-time.js +2 -2
- package/fixtures/{erwartet/storno-rabatt.lines.json → expected/cancellation-discount.lines.json} +2 -2
- package/fixtures/expected/cancellation-discount.sheet32.json +248 -0
- package/fixtures/{erwartet/storno-rabatt.blatt48.json → expected/cancellation-discount.sheet48.json} +119 -119
- package/fixtures/{erwartet/storno-voll.lines.json → expected/cancellation-full.lines.json} +2 -2
- package/fixtures/expected/cancellation-full.sheet32.json +218 -0
- package/fixtures/{erwartet/storno-voll.blatt48.json → expected/cancellation-full.sheet48.json} +107 -107
- package/fixtures/{erwartet/storno-teil.lines.json → expected/cancellation-partial.lines.json} +2 -2
- package/fixtures/expected/cancellation-partial.sheet32.json +206 -0
- package/fixtures/{erwartet/storno-teil.blatt48.json → expected/cancellation-partial.sheet48.json} +101 -101
- package/fixtures/{erwartet/storno-split-voll.lines.json → expected/cancellation-split-full.lines.json} +2 -2
- package/fixtures/expected/cancellation-split-full.sheet32.json +320 -0
- package/fixtures/{erwartet/storno-split-voll.blatt48.json → expected/cancellation-split-full.sheet48.json} +158 -158
- package/fixtures/{erwartet/storno-split-teil.lines.json → expected/cancellation-split-partial.lines.json} +2 -2
- package/fixtures/expected/cancellation-split-partial.sheet32.json +230 -0
- package/fixtures/{erwartet/storno-split-teil.blatt48.json → expected/cancellation-split-partial.sheet48.json} +113 -113
- package/fixtures/{erwartet/karte-eigener.lines.json → expected/card-custom.lines.json} +1 -1
- package/fixtures/expected/card-custom.sheet32.json +158 -0
- package/fixtures/{erwartet/karte-eigener.blatt48.json → expected/card-custom.sheet48.json} +80 -80
- package/fixtures/{erwartet/karte-gptom-ios.lines.json → expected/card-gptom-ios.lines.json} +1 -1
- package/fixtures/expected/card-gptom-ios.sheet32.json +230 -0
- package/fixtures/{erwartet/karte-gptom-ios.blatt48.json → expected/card-gptom-ios.sheet48.json} +116 -116
- package/fixtures/{erwartet/karte-gptom.lines.json → expected/card-gptom.lines.json} +1 -1
- package/fixtures/expected/card-gptom.sheet32.json +230 -0
- package/fixtures/{erwartet/karte-gptom.blatt48.json → expected/card-gptom.sheet48.json} +116 -116
- package/fixtures/{erwartet/karte-hobex-cloud.lines.json → expected/card-hobex-cloud.lines.json} +1 -1
- package/fixtures/expected/card-hobex-cloud.sheet32.json +200 -0
- package/fixtures/{erwartet/karte-hobex-cloud.blatt48.json → expected/card-hobex-cloud.sheet48.json} +101 -101
- package/fixtures/{erwartet/karte-hobex-hps.lines.json → expected/card-hobex-hps.lines.json} +1 -1
- package/fixtures/expected/card-hobex-hps.sheet32.json +224 -0
- package/fixtures/{erwartet/karte-hobex-hps.blatt48.json → expected/card-hobex-hps.sheet48.json} +113 -113
- package/fixtures/{erwartet/karte-mypos.lines.json → expected/card-mypos.lines.json} +1 -1
- package/fixtures/expected/card-mypos.sheet32.json +254 -0
- package/fixtures/{erwartet/karte-mypos.blatt48.json → expected/card-mypos.sheet48.json} +122 -122
- package/fixtures/{erwartet/karte-stripe-eps.lines.json → expected/card-stripe-eps.lines.json} +1 -1
- package/fixtures/expected/card-stripe-eps.sheet32.json +194 -0
- package/fixtures/{erwartet/karte-stripe-eps.blatt48.json → expected/card-stripe-eps.sheet48.json} +98 -98
- package/fixtures/{erwartet/karte-stripe.lines.json → expected/card-stripe.lines.json} +1 -1
- package/fixtures/expected/card-stripe.sheet32.json +212 -0
- package/fixtures/{erwartet/karte-stripe.blatt48.json → expected/card-stripe.sheet48.json} +107 -107
- package/fixtures/{erwartet/karte-sumup.lines.json → expected/card-sumup.lines.json} +1 -1
- package/fixtures/expected/card-sumup.sheet32.json +218 -0
- package/fixtures/{erwartet/karte-sumup.blatt48.json → expected/card-sumup.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabattzeilen.lines.json → expected/discount-lines.lines.json} +1 -1
- package/fixtures/expected/discount-lines.sheet32.json +200 -0
- package/fixtures/{erwartet/rabattzeilen.blatt48.json → expected/discount-lines.sheet48.json} +98 -98
- package/fixtures/{erwartet/rabatt-chef-trinkgeld.lines.json → expected/discount-owner-tip.lines.json} +1 -1
- package/fixtures/expected/discount-owner-tip.sheet32.json +212 -0
- package/fixtures/{erwartet/rabatt-chef-trinkgeld.blatt48.json → expected/discount-owner-tip.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabatt-einfach.lines.json → expected/discount-simple.lines.json} +1 -1
- package/fixtures/expected/discount-simple.sheet32.json +182 -0
- package/fixtures/{erwartet/rabatt-einfach.blatt48.json → expected/discount-simple.sheet48.json} +89 -89
- package/fixtures/{erwartet/rabatt-trinkgeld.lines.json → expected/discount-tip.lines.json} +1 -1
- package/fixtures/expected/discount-tip.sheet32.json +212 -0
- package/fixtures/{erwartet/rabatt-trinkgeld.blatt48.json → expected/discount-tip.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabatt-wertgutschein.lines.json → expected/discount-value-voucher.lines.json} +1 -1
- package/fixtures/expected/discount-value-voucher.sheet32.json +218 -0
- package/fixtures/{erwartet/rabatt-wertgutschein.blatt48.json → expected/discount-value-voucher.sheet48.json} +107 -107
- package/fixtures/{erwartet/langer-artikelname.lines.json → expected/long-item-name.lines.json} +1 -1
- package/fixtures/expected/long-item-name.sheet32.json +176 -0
- package/fixtures/{erwartet/langer-artikelname.blatt48.json → expected/long-item-name.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-karte.lines.json → expected/sale-card.lines.json} +1 -1
- package/fixtures/expected/sale-card.sheet32.json +176 -0
- package/fixtures/{erwartet/verkauf-karte.blatt48.json → expected/sale-card.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-bar.lines.json → expected/sale-cash.lines.json} +1 -1
- package/fixtures/expected/sale-cash.sheet32.json +176 -0
- package/fixtures/{erwartet/verkauf-bar.blatt48.json → expected/sale-cash.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-kleinunternehmer.lines.json → expected/sale-small-business.lines.json} +1 -1
- package/fixtures/expected/sale-small-business.sheet32.json +182 -0
- package/fixtures/{erwartet/verkauf-kleinunternehmer.blatt48.json → expected/sale-small-business.sheet48.json} +89 -89
- package/fixtures/{erwartet/signaturausfall-verkauf.lines.json → expected/signature-outage-sale.lines.json} +1 -1
- package/fixtures/expected/signature-outage-sale.sheet32.json +194 -0
- package/fixtures/{erwartet/signaturausfall-verkauf.blatt48.json → expected/signature-outage-sale.sheet48.json} +92 -92
- package/fixtures/{erwartet/split-karte-karte-bar.lines.json → expected/split-card-card-cash.lines.json} +1 -1
- package/fixtures/expected/split-card-card-cash.sheet32.json +356 -0
- package/fixtures/{erwartet/split-karte-karte-bar.blatt48.json → expected/split-card-card-cash.sheet48.json} +170 -170
- package/fixtures/{erwartet/split-bar-rueckgeld.lines.json → expected/split-cash-change.lines.json} +1 -1
- package/fixtures/expected/split-cash-change.sheet32.json +194 -0
- package/fixtures/{erwartet/split-bar-rueckgeld.blatt48.json → expected/split-cash-change.sheet48.json} +92 -92
- package/fixtures/{erwartet/split-langer-betrag.lines.json → expected/split-long-amount.lines.json} +1 -1
- package/fixtures/expected/split-long-amount.sheet32.json +266 -0
- package/fixtures/{erwartet/split-langer-betrag.blatt48.json → expected/split-long-amount.sheet48.json} +131 -131
- package/fixtures/{erwartet/split-eine-karte-trinkgeld.lines.json → expected/split-one-card-tip.lines.json} +1 -1
- package/fixtures/expected/split-one-card-tip.sheet32.json +242 -0
- package/fixtures/{erwartet/split-eine-karte-trinkgeld.blatt48.json → expected/split-one-card-tip.sheet48.json} +113 -113
- package/fixtures/{erwartet/split-tischrunde-trinkgeld.lines.json → expected/split-table-round-tip.lines.json} +1 -1
- package/fixtures/expected/split-table-round-tip.sheet32.json +470 -0
- package/fixtures/{erwartet/split-tischrunde-trinkgeld.blatt48.json → expected/split-table-round-tip.sheet48.json} +218 -218
- package/fixtures/{erwartet/split-trinkgeld-karte.lines.json → expected/split-tip-card.lines.json} +1 -1
- package/fixtures/expected/split-tip-card.sheet32.json +272 -0
- package/fixtures/{erwartet/split-trinkgeld-karte.blatt48.json → expected/split-tip-card.sheet48.json} +128 -128
- package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.lines.json → expected/split-two-cards-same-provider.lines.json} +1 -1
- package/fixtures/expected/split-two-cards-same-provider.sheet32.json +326 -0
- package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.blatt48.json → expected/split-two-cards-same-provider.sheet48.json} +149 -149
- package/fixtures/{erwartet/testkasse-verkauf.lines.json → expected/test-cashregister-sale.lines.json} +3 -3
- package/fixtures/expected/test-cashregister-sale.sheet32.json +224 -0
- package/fixtures/{erwartet/testkasse-verkauf.blatt48.json → expected/test-cashregister-sale.sheet48.json} +110 -110
- package/fixtures/{erwartet/testsignatur-verkauf.lines.json → expected/test-signature-sale.lines.json} +3 -3
- package/fixtures/expected/test-signature-sale.sheet32.json +236 -0
- package/fixtures/{erwartet/testsignatur-verkauf.blatt48.json → expected/test-signature-sale.sheet48.json} +110 -110
- package/fixtures/{erwartet → expected}/training.lines.json +2 -2
- package/fixtures/expected/training.sheet32.json +236 -0
- package/fixtures/{erwartet/training.blatt48.json → expected/training.sheet48.json} +110 -110
- package/fixtures/{erwartet/null-jahr.lines.json → expected/zero-annual.lines.json} +2 -2
- package/fixtures/expected/zero-annual.sheet32.json +212 -0
- package/fixtures/{erwartet/null-jahr.blatt48.json → expected/zero-annual.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-schluss.lines.json → expected/zero-final.lines.json} +2 -2
- package/fixtures/expected/zero-final.sheet32.json +206 -0
- package/fixtures/{erwartet/null-schluss.blatt48.json → expected/zero-final.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-pruef.lines.json → expected/zero-manual.lines.json} +2 -2
- package/fixtures/expected/zero-manual.sheet32.json +206 -0
- package/fixtures/{erwartet/null-pruef.blatt48.json → expected/zero-manual.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-monat.lines.json → expected/zero-monthly.lines.json} +2 -2
- package/fixtures/expected/zero-monthly.sheet32.json +206 -0
- package/fixtures/{erwartet/null-monat.blatt48.json → expected/zero-monthly.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-ausfall.lines.json → expected/zero-outage-end.lines.json} +2 -2
- package/fixtures/expected/zero-outage-end.sheet32.json +206 -0
- package/fixtures/{erwartet/null-ausfall.blatt48.json → expected/zero-outage-end.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-start.lines.json → expected/zero-start.lines.json} +2 -2
- package/fixtures/expected/zero-start.sheet32.json +206 -0
- package/fixtures/{erwartet/null-start.blatt48.json → expected/zero-start.sheet48.json} +95 -95
- package/fixtures/hobex-hps-codes.json +12 -12
- package/fixtures/invoice-api-examples/brands-ok.json +8 -0
- package/fixtures/{rechnung-api-beispiele/credit-fehler-grund.json → invoice-api-examples/credit-error-reason.json} +6 -6
- package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/credit-ok.json +6 -6
- package/fixtures/{rechnung-api-beispiele/customer-fehler-uid.json → invoice-api-examples/customer-error-vat-id.json} +4 -4
- package/fixtures/invoice-api-examples/customer-get-error-both.json +15 -0
- package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/customer-ok.json +4 -4
- package/fixtures/{rechnung-api-beispiele/customer-search-fehler-leer.json → invoice-api-examples/customer-search-error-empty.json} +4 -4
- package/fixtures/{rechnung-api-beispiele/issue-rabatt.json → invoice-api-examples/issue-discount.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-englisch.json → invoice-api-examples/issue-english.json} +7 -7
- package/fixtures/{rechnung-api-beispiele/issue-fehler-cent.json → invoice-api-examples/issue-error-cent.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-sprache.json → invoice-api-examples/issue-error-language.json} +5 -5
- package/fixtures/{rechnung-api-beispiele/issue-fehler-negativ.json → invoice-api-examples/issue-error-negative.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-zahlungsart.json → invoice-api-examples/issue-error-payment-method.json} +8 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-beide.json → invoice-api-examples/issue-error-price-both.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-fehlt.json → invoice-api-examples/issue-error-price-missing.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-menge.json → invoice-api-examples/issue-error-quantity.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-satz.json → invoice-api-examples/issue-error-rate.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-einheit.json → invoice-api-examples/issue-error-unit.json} +5 -5
- package/fixtures/{rechnung-api-beispiele/issue-fehler-unbekannt.json → invoice-api-examples/issue-error-unknown.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-brutto-20.json → invoice-api-examples/issue-gross-20.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-mikropreis.json → invoice-api-examples/issue-micro-price.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-gemischt.json → invoice-api-examples/issue-mixed.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-netto-20.json → invoice-api-examples/issue-net-20.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-bezahlt.json → invoice-api-examples/issue-paid.json} +7 -7
- package/fixtures/{rechnung-api-beispiele/issue-kleinunternehmer.json → invoice-api-examples/issue-small-business.json} +6 -6
- package/fixtures/invoice-api-examples/payment-error-on-site.json +17 -0
- package/fixtures/invoice-api-examples/payment-error-without-key.json +16 -0
- package/fixtures/invoice-api-examples/payment-recorded-later.json +14 -0
- package/fixtures/{rechnung-api-beispiele/setup-status-fehler-feld.json → invoice-api-examples/setup-status-error-field.json} +4 -4
- package/fixtures/invoice-api-examples/setup-status-ok.json +8 -0
- package/fixtures/{rechnung-api.schema.json → invoice-api.schema.json} +24 -24
- package/fixtures/{rechnung-rechnen-zufall.json → invoice-calc-random.json} +828 -828
- package/fixtures/{rechnung-rechnen.json → invoice-calc.json} +47 -47
- package/fixtures/invoice-texts.json +464 -0
- package/fixtures/{rechnung-summen.json → invoice-totals.json} +25 -25
- package/fixtures/{position-aus-euro.json → item-from-euro.json} +26 -26
- package/fixtures/manifest.json +252 -252
- package/fixtures/pos-message-cases.json +32 -0
- package/fixtures/pos-settings-defaults.json +149 -0
- package/fixtures/{kasse-texte.json → pos-texts.json} +416 -416
- package/fixtures/receipt-due-generated.json +1218 -0
- package/fixtures/{belege/storno-rabatt.json → receipts/cancellation-discount.json} +3 -3
- package/fixtures/{belege/storno-voll.json → receipts/cancellation-full.json} +3 -3
- package/fixtures/{belege/storno-teil.json → receipts/cancellation-partial.json} +3 -3
- package/fixtures/{belege/storno-split-voll.json → receipts/cancellation-split-full.json} +3 -3
- package/fixtures/{belege/storno-split-teil.json → receipts/cancellation-split-partial.json} +3 -3
- package/fixtures/{belege/karte-eigener.json → receipts/card-custom.json} +2 -2
- package/fixtures/{belege/karte-gptom-ios.json → receipts/card-gptom-ios.json} +2 -2
- package/fixtures/{belege/karte-gptom.json → receipts/card-gptom.json} +2 -2
- package/fixtures/{belege/karte-hobex-cloud.json → receipts/card-hobex-cloud.json} +2 -2
- package/fixtures/{belege/karte-hobex-hps.json → receipts/card-hobex-hps.json} +2 -2
- package/fixtures/{belege/karte-mypos.json → receipts/card-mypos.json} +2 -2
- package/fixtures/{belege/karte-stripe-eps.json → receipts/card-stripe-eps.json} +2 -2
- package/fixtures/{belege/karte-stripe.json → receipts/card-stripe.json} +2 -2
- package/fixtures/{belege/karte-sumup.json → receipts/card-sumup.json} +2 -2
- package/fixtures/{belege/rabattzeilen.json → receipts/discount-lines.json} +2 -2
- package/fixtures/{belege/rabatt-chef-trinkgeld.json → receipts/discount-owner-tip.json} +2 -2
- package/fixtures/{belege/rabatt-einfach.json → receipts/discount-simple.json} +2 -2
- package/fixtures/{belege/rabatt-trinkgeld.json → receipts/discount-tip.json} +2 -2
- package/fixtures/{belege/rabatt-wertgutschein.json → receipts/discount-value-voucher.json} +2 -2
- package/fixtures/{belege/langer-artikelname.json → receipts/long-item-name.json} +2 -2
- package/fixtures/{belege/verkauf-karte.json → receipts/sale-card.json} +2 -2
- package/fixtures/{belege/verkauf-bar.json → receipts/sale-cash.json} +2 -2
- package/fixtures/{belege/verkauf-kleinunternehmer.json → receipts/sale-small-business.json} +1 -1
- package/fixtures/{belege/signaturausfall-verkauf.json → receipts/signature-outage-sale.json} +2 -2
- package/fixtures/{belege/split-karte-karte-bar.json → receipts/split-card-card-cash.json} +2 -2
- package/fixtures/{belege/split-bar-rueckgeld.json → receipts/split-cash-change.json} +2 -2
- package/fixtures/{belege/split-langer-betrag.json → receipts/split-long-amount.json} +2 -2
- package/fixtures/{belege/split-eine-karte-trinkgeld.json → receipts/split-one-card-tip.json} +2 -2
- package/fixtures/{belege/split-tischrunde-trinkgeld.json → receipts/split-table-round-tip.json} +2 -2
- package/fixtures/{belege/split-trinkgeld-karte.json → receipts/split-tip-card.json} +2 -2
- package/fixtures/{belege/split-zwei-karten-gleicher-anbieter.json → receipts/split-two-cards-same-provider.json} +2 -2
- package/fixtures/{belege/testsignatur-verkauf.json → receipts/test-cashregister-sale.json} +3 -3
- package/fixtures/{belege/testkasse-verkauf.json → receipts/test-signature-sale.json} +3 -3
- package/fixtures/{belege → receipts}/training.json +2 -2
- package/fixtures/{belege/null-jahr.json → receipts/zero-annual.json} +5 -5
- package/fixtures/{belege/null-schluss.json → receipts/zero-final.json} +5 -5
- package/fixtures/{belege/null-pruef.json → receipts/zero-manual.json} +5 -5
- package/fixtures/{belege/null-monat.json → receipts/zero-monthly.json} +5 -5
- package/fixtures/{belege/null-ausfall.json → receipts/zero-outage-end.json} +5 -5
- package/fixtures/{belege/null-start.json → receipts/zero-start.json} +5 -5
- package/fixtures/renames-1.0.json +1490 -0
- package/fixtures/{kasse-settings-standard.json → stored/pos-settings-defaults.json} +7 -7
- package/fixtures/surface.json +877 -0
- package/fixtures/v3/README.md +125 -0
- package/fixtures/v3/antworten/belege.json +4738 -0
- package/fixtures/v3/antworten/belegmail.json +154 -0
- package/fixtures/v3/antworten/kasse-belege.json +4304 -0
- package/fixtures/v3/antworten/kasse.json +12716 -0
- package/fixtures/v3/antworten/rechnungen.json +1712 -0
- package/fixtures/v3/antworten/storno.json +737 -0
- package/fixtures/v3/stored/belege.json +502 -0
- package/fixtures/v3/stored/kasse.json +3461 -0
- package/fixtures/v3/stored/rechnungen.json +750 -0
- package/fixtures/v3/v3-vokabular.json +3375 -0
- package/fixtures/v3/zahlbetrag-faelle.json +794 -0
- package/package.json +32 -18
- package/dist/cjs/kasse/artikel.d.ts +0 -83
- package/dist/cjs/kasse/artikel.js +0 -79
- package/dist/cjs/kasse/client.d.ts +0 -10
- package/dist/cjs/kasse/client.js +0 -38
- package/dist/cjs/kasse/drucker.d.ts +0 -59
- package/dist/cjs/kasse/drucker.js +0 -50
- package/dist/cjs/kasse/index.d.ts +0 -13
- package/dist/cjs/kasse/index.js +0 -83
- package/dist/cjs/kasse/settings.d.ts +0 -229
- package/dist/cjs/kasse/settings.js +0 -172
- package/dist/cjs/kasse/texte.d.ts +0 -868
- package/dist/cjs/kasse/texte.js +0 -474
- package/dist/cjs/rechnung/fehler.d.ts +0 -21
- package/dist/cjs/rechnung/fehler.js +0 -44
- package/dist/cjs/rechnung/index.d.ts +0 -21
- package/dist/cjs/rechnung/index.js +0 -82
- package/dist/cjs/rechnung/texte.d.ts +0 -222
- package/dist/cjs/rechnung/texte.js +0 -425
- package/dist/esm/kasse/artikel.d.ts +0 -83
- package/dist/esm/kasse/artikel.js +0 -70
- package/dist/esm/kasse/client.d.ts +0 -10
- package/dist/esm/kasse/client.js +0 -33
- package/dist/esm/kasse/drucker.d.ts +0 -59
- package/dist/esm/kasse/drucker.js +0 -45
- package/dist/esm/kasse/index.d.ts +0 -13
- package/dist/esm/kasse/index.js +0 -18
- package/dist/esm/kasse/settings.d.ts +0 -229
- package/dist/esm/kasse/settings.js +0 -168
- package/dist/esm/kasse/texte.d.ts +0 -868
- package/dist/esm/kasse/texte.js +0 -466
- package/dist/esm/rechnung/fehler.d.ts +0 -21
- package/dist/esm/rechnung/fehler.js +0 -39
- package/dist/esm/rechnung/index.d.ts +0 -21
- package/dist/esm/rechnung/index.js +0 -20
- package/dist/esm/rechnung/texte.d.ts +0 -222
- package/dist/esm/rechnung/texte.js +0 -421
- package/fixtures/erwartet/karte-eigener.blatt32.json +0 -158
- package/fixtures/erwartet/karte-gptom-ios.blatt32.json +0 -230
- package/fixtures/erwartet/karte-gptom.blatt32.json +0 -230
- package/fixtures/erwartet/karte-hobex-cloud.blatt32.json +0 -200
- package/fixtures/erwartet/karte-hobex-hps.blatt32.json +0 -224
- package/fixtures/erwartet/karte-mypos.blatt32.json +0 -254
- package/fixtures/erwartet/karte-stripe-eps.blatt32.json +0 -194
- package/fixtures/erwartet/karte-stripe.blatt32.json +0 -212
- package/fixtures/erwartet/karte-sumup.blatt32.json +0 -218
- package/fixtures/erwartet/langer-artikelname.blatt32.json +0 -176
- package/fixtures/erwartet/null-ausfall.blatt32.json +0 -206
- package/fixtures/erwartet/null-jahr.blatt32.json +0 -212
- package/fixtures/erwartet/null-monat.blatt32.json +0 -206
- package/fixtures/erwartet/null-pruef.blatt32.json +0 -206
- package/fixtures/erwartet/null-schluss.blatt32.json +0 -206
- package/fixtures/erwartet/null-start.blatt32.json +0 -206
- package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt32.json +0 -212
- package/fixtures/erwartet/rabatt-einfach.blatt32.json +0 -182
- package/fixtures/erwartet/rabatt-trinkgeld.blatt32.json +0 -212
- package/fixtures/erwartet/rabatt-wertgutschein.blatt32.json +0 -218
- package/fixtures/erwartet/rabattzeilen.blatt32.json +0 -200
- package/fixtures/erwartet/signaturausfall-verkauf.blatt32.json +0 -194
- package/fixtures/erwartet/split-bar-rueckgeld.blatt32.json +0 -194
- package/fixtures/erwartet/split-eine-karte-trinkgeld.blatt32.json +0 -242
- package/fixtures/erwartet/split-karte-karte-bar.blatt32.json +0 -356
- package/fixtures/erwartet/split-langer-betrag.blatt32.json +0 -266
- package/fixtures/erwartet/split-tischrunde-trinkgeld.blatt32.json +0 -470
- package/fixtures/erwartet/split-trinkgeld-karte.blatt32.json +0 -272
- package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.blatt32.json +0 -326
- package/fixtures/erwartet/storno-rabatt.blatt32.json +0 -248
- package/fixtures/erwartet/storno-split-teil.blatt32.json +0 -230
- package/fixtures/erwartet/storno-split-voll.blatt32.json +0 -320
- package/fixtures/erwartet/storno-teil.blatt32.json +0 -206
- package/fixtures/erwartet/storno-voll.blatt32.json +0 -218
- package/fixtures/erwartet/testkasse-verkauf.blatt32.json +0 -224
- package/fixtures/erwartet/testsignatur-verkauf.blatt32.json +0 -236
- package/fixtures/erwartet/training.blatt32.json +0 -236
- package/fixtures/erwartet/verkauf-bar.blatt32.json +0 -176
- package/fixtures/erwartet/verkauf-karte.blatt32.json +0 -176
- package/fixtures/erwartet/verkauf-kleinunternehmer.blatt32.json +0 -182
- package/fixtures/kasse-meldungen-faelle.json +0 -32
- package/fixtures/oberflaeche.json +0 -558
- package/fixtures/rechnung-api-beispiele/brands-ok.json +0 -8
- package/fixtures/rechnung-api-beispiele/customer-get-fehler-beide.json +0 -15
- package/fixtures/rechnung-api-beispiele/setup-status-ok.json +0 -8
- package/fixtures/rechnung-api-beispiele/zahlung-fehler-ohne-schluessel.json +0 -14
- package/fixtures/rechnung-api-beispiele/zahlung-fehler-vor-ort.json +0 -15
- package/fixtures/rechnung-api-beispiele/zahlung-nachtrag.json +0 -14
- package/fixtures/rechnung-texte.json +0 -464
- /package/dist/cjs/{rechnung → invoice}/typen.js +0 -0
- /package/dist/esm/{rechnung → invoice}/typen.js +0 -0
- /package/fixtures/{erwartet/storno-rabatt.grid32.txt → expected/cancellation-discount.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-rabatt.grid48.txt → expected/cancellation-discount.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-voll.grid32.txt → expected/cancellation-full.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-voll.grid48.txt → expected/cancellation-full.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-teil.grid32.txt → expected/cancellation-partial.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-teil.grid48.txt → expected/cancellation-partial.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-voll.grid32.txt → expected/cancellation-split-full.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-voll.grid48.txt → expected/cancellation-split-full.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-teil.grid32.txt → expected/cancellation-split-partial.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-teil.grid48.txt → expected/cancellation-split-partial.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-eigener.grid32.txt → expected/card-custom.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-eigener.grid48.txt → expected/card-custom.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom-ios.grid32.txt → expected/card-gptom-ios.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom-ios.grid48.txt → expected/card-gptom-ios.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom.grid32.txt → expected/card-gptom.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom.grid48.txt → expected/card-gptom.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-cloud.grid32.txt → expected/card-hobex-cloud.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-cloud.grid48.txt → expected/card-hobex-cloud.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-hps.grid32.txt → expected/card-hobex-hps.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-hps.grid48.txt → expected/card-hobex-hps.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-mypos.grid32.txt → expected/card-mypos.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-mypos.grid48.txt → expected/card-mypos.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe-eps.grid32.txt → expected/card-stripe-eps.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe-eps.grid48.txt → expected/card-stripe-eps.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe.grid32.txt → expected/card-stripe.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe.grid48.txt → expected/card-stripe.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-sumup.grid32.txt → expected/card-sumup.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-sumup.grid48.txt → expected/card-sumup.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabattzeilen.grid32.txt → expected/discount-lines.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabattzeilen.grid48.txt → expected/discount-lines.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid32.txt → expected/discount-owner-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid48.txt → expected/discount-owner-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-einfach.grid32.txt → expected/discount-simple.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-einfach.grid48.txt → expected/discount-simple.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-trinkgeld.grid32.txt → expected/discount-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-trinkgeld.grid48.txt → expected/discount-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-wertgutschein.grid32.txt → expected/discount-value-voucher.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-wertgutschein.grid48.txt → expected/discount-value-voucher.grid48.txt} +0 -0
- /package/fixtures/{erwartet/logo-probe-hoch.raster32.txt → expected/logo-sample-tall.raster32.txt} +0 -0
- /package/fixtures/{erwartet/logo-probe.raster32.txt → expected/logo-sample.raster32.txt} +0 -0
- /package/fixtures/{erwartet/langer-artikelname.grid32.txt → expected/long-item-name.grid32.txt} +0 -0
- /package/fixtures/{erwartet/langer-artikelname.grid48.txt → expected/long-item-name.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-karte.grid32.txt → expected/sale-card.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-karte.grid48.txt → expected/sale-card.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-bar.grid32.txt → expected/sale-cash.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-bar.grid48.txt → expected/sale-cash.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid32.txt → expected/sale-small-business.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid48.txt → expected/sale-small-business.grid48.txt} +0 -0
- /package/fixtures/{erwartet/signaturausfall-verkauf.grid32.txt → expected/signature-outage-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/signaturausfall-verkauf.grid48.txt → expected/signature-outage-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-karte-karte-bar.grid32.txt → expected/split-card-card-cash.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-karte-karte-bar.grid48.txt → expected/split-card-card-cash.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-bar-rueckgeld.grid32.txt → expected/split-cash-change.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-bar-rueckgeld.grid48.txt → expected/split-cash-change.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-langer-betrag.grid32.txt → expected/split-long-amount.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-langer-betrag.grid48.txt → expected/split-long-amount.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid32.txt → expected/split-one-card-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid48.txt → expected/split-one-card-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid32.txt → expected/split-table-round-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid48.txt → expected/split-table-round-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-trinkgeld-karte.grid32.txt → expected/split-tip-card.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-trinkgeld-karte.grid48.txt → expected/split-tip-card.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid32.txt → expected/split-two-cards-same-provider.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid48.txt → expected/split-two-cards-same-provider.grid48.txt} +0 -0
- /package/fixtures/{erwartet/testkasse-verkauf.grid32.txt → expected/test-cashregister-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/testkasse-verkauf.grid48.txt → expected/test-cashregister-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet/testsignatur-verkauf.grid32.txt → expected/test-signature-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/testsignatur-verkauf.grid48.txt → expected/test-signature-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet → expected}/training.grid32.txt +0 -0
- /package/fixtures/{erwartet → expected}/training.grid48.txt +0 -0
- /package/fixtures/{erwartet/null-jahr.grid32.txt → expected/zero-annual.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-jahr.grid48.txt → expected/zero-annual.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-schluss.grid32.txt → expected/zero-final.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-schluss.grid48.txt → expected/zero-final.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-pruef.grid32.txt → expected/zero-manual.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-pruef.grid48.txt → expected/zero-manual.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-monat.grid32.txt → expected/zero-monthly.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-monat.grid48.txt → expected/zero-monthly.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-ausfall.grid32.txt → expected/zero-outage-end.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-ausfall.grid48.txt → expected/zero-outage-end.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-start.grid32.txt → expected/zero-start.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-start.grid48.txt → expected/zero-start.grid48.txt} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.receiptLayoutFromResult = receiptLayoutFromResult;
|
|
3
4
|
exports.createReceipt = createReceipt;
|
|
4
5
|
exports.sellReceipt = sellReceipt;
|
|
5
6
|
exports.sellReceiptWithCompany = sellReceiptWithCompany;
|
|
6
7
|
exports.cancelReceipt = cancelReceipt;
|
|
7
|
-
exports.createCancelReceipt = createCancelReceipt;
|
|
8
8
|
exports.zeroReceipt = zeroReceipt;
|
|
9
9
|
exports.listMyReceipts = listMyReceipts;
|
|
10
10
|
exports.getReceipt = getReceipt;
|
|
@@ -13,22 +13,57 @@ exports.generateFullReceiptId = generateFullReceiptId;
|
|
|
13
13
|
exports.getFirstReceiptDate = getFirstReceiptDate;
|
|
14
14
|
exports.sendReceiptEmail = sendReceiptEmail;
|
|
15
15
|
exports.checkVoucherCombinationError = checkVoucherCombinationError;
|
|
16
|
+
exports.cardRefundReference = cardRefundReference;
|
|
17
|
+
exports.belegAusHuelle = belegAusHuelle;
|
|
18
|
+
exports.belegMitFirmaAusHuelle = belegMitFirmaAusHuelle;
|
|
19
|
+
exports.paymentsExpectedCents = paymentsExpectedCents;
|
|
16
20
|
const index_js_1 = require("../enums/index.js");
|
|
17
21
|
const index_js_2 = require("../models/index.js");
|
|
18
22
|
const vienna_time_js_1 = require("../vienna-time.js");
|
|
19
23
|
const money_js_1 = require("../money.js");
|
|
20
24
|
const errors_js_1 = require("./errors.js");
|
|
25
|
+
const layout_js_1 = require("../receipt/layout.js");
|
|
26
|
+
/**
|
|
27
|
+
* Das Zeilenmodell zum Drucken und Anzeigen eines Belegs aus einer Antwort.
|
|
28
|
+
*
|
|
29
|
+
* **Ein Server-Layout gewinnt immer.** Liefert der Server `data.layout`, gilt
|
|
30
|
+
* genau dieses, in seiner Breite (80 mm): im oeffentlichen Kanal traegt nur
|
|
31
|
+
* es den Kartenblock (der Beleg selbst kommt dort ohne Anbieterdaten), und
|
|
32
|
+
* Bildschirm, Bon und PDF zeigen so denselben Beleg. Fehlt es, wird das
|
|
33
|
+
* Layout hier gebaut, mit den Angaben derselben Antwort (`testCashregister`,
|
|
34
|
+
* `testSignature`, `registrationInfo`) und in `fallbackPaperSize` (Vorgabe
|
|
35
|
+
* `mm58` wie in 0.x). Die Druckbreite waehlt allein der Druckweg
|
|
36
|
+
* (`paperSize` bei `escPosLayoutBytes`, `charsPerLine` bei ePOS und Blatt), nie
|
|
37
|
+
* dieser Helfer.
|
|
38
|
+
*/
|
|
39
|
+
function receiptLayoutFromResult(result, options = {}) {
|
|
40
|
+
for (const name of Object.keys(options)) {
|
|
41
|
+
if (name !== 'fallbackPaperSize') {
|
|
42
|
+
throw new errors_js_1.KasseneckValidationError('receiptLayoutFromResult', `Unbekannte Option "${name}" (die Druckbreite waehlt der Druckweg)`, 'request');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (result.layout != null)
|
|
46
|
+
return result.layout;
|
|
47
|
+
return (0, layout_js_1.buildReceiptLayout)(result.receipt, result.company, {
|
|
48
|
+
paperSize: options.fallbackPaperSize ?? 'mm58',
|
|
49
|
+
testCashregister: result.testCashregister,
|
|
50
|
+
testSignature: result.testSignature,
|
|
51
|
+
registrationInfo: result.registrationInfo,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
21
54
|
/**
|
|
22
55
|
* Gemeinsame Umsetzung aller Belegarten (Zwilling von `_createReceipt`).
|
|
23
56
|
* Bewusst **nicht** Teil der Paketoberflaeche: der Belegtyp gehoert nicht in
|
|
24
57
|
* die Hand des Aufrufers, sondern zu einem der benannten Aufrufe darunter.
|
|
25
58
|
*/
|
|
26
59
|
async function createReceipt(rufen, options) {
|
|
27
|
-
|
|
60
|
+
const daten = await rufen('createReceipt', createReceiptParams(options));
|
|
61
|
+
return (0, errors_js_1.signiertGelesen)('createReceipt', () => belegAusHuelle(daten, 'createReceipt'));
|
|
28
62
|
}
|
|
29
63
|
/** Wie [createReceipt], liest aus derselben Antwort zusaetzlich die Firmendaten. */
|
|
30
64
|
async function createReceiptWithCompany(rufen, options) {
|
|
31
|
-
|
|
65
|
+
const daten = await rufen('createReceipt', createReceiptParams(options));
|
|
66
|
+
return (0, errors_js_1.signiertGelesen)('createReceipt', () => belegMitFirmaAusHuelle(daten, 'createReceipt'));
|
|
32
67
|
}
|
|
33
68
|
/**
|
|
34
69
|
* Baut die Nutzlast von `createReceipt` und prueft die Eingabe. Wirft, bevor
|
|
@@ -37,8 +72,17 @@ async function createReceiptWithCompany(rufen, options) {
|
|
|
37
72
|
function createReceiptParams(options) {
|
|
38
73
|
const typ = belegtyp(options.receiptType);
|
|
39
74
|
const { items, vouchers } = options;
|
|
75
|
+
// Unter /v3 weist der Server diese Felder ab (payment_method_not_supported);
|
|
76
|
+
// ein Aufrufer ohne Typen erfaehrt es hier, bevor etwas hinausgeht.
|
|
77
|
+
const altfeld = ALTE_ZAHLFELDER.find((feld) => options[feld] != null);
|
|
78
|
+
if (altfeld != null) {
|
|
79
|
+
throw eingabefehler(`${altfeld} gibt es unter /v3 nicht mehr: Zahlungen und Kartenangaben gehen als payments hinaus.`);
|
|
80
|
+
}
|
|
81
|
+
if (typ.value === index_js_1.ReceiptType.cancellation.value) {
|
|
82
|
+
throw eingabefehler('Ein Storno geht nur ueber cancelReceipt (Bezug, Grund, Restmengen).');
|
|
83
|
+
}
|
|
40
84
|
if (typ.needsItems) {
|
|
41
|
-
// Ein reiner Gutscheinverkauf ist ein Umsatz ohne Positionen
|
|
85
|
+
// Ein reiner Gutscheinverkauf ist ein Umsatz ohne Positionen, deshalb
|
|
42
86
|
// zaehlt er hier wie eine Position (wie im Flutter-Vorbild).
|
|
43
87
|
const hatVerkaufsgutschein = vouchers?.some((v) => v.action === index_js_1.VoucherAction.sell) ?? false;
|
|
44
88
|
if ((items == null || items.length === 0) && !hatVerkaufsgutschein) {
|
|
@@ -65,47 +109,20 @@ function createReceiptParams(options) {
|
|
|
65
109
|
if (items != null && items.length > 0) {
|
|
66
110
|
params['items'] = alsNutzlast(items, index_js_2.toReceiptItemPayload);
|
|
67
111
|
}
|
|
68
|
-
|
|
69
|
-
if (
|
|
70
|
-
//
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
throw eingabefehler('payments am Storno gehen nur ueber cancelReceipt.');
|
|
75
|
-
}
|
|
76
|
-
if (typ.value !== index_js_1.ReceiptType.standard.value && typ.value !== index_js_1.ReceiptType.training.value) {
|
|
77
|
-
throw eingabefehler(`payments sind bei receiptType "${typ.value}" nicht erlaubt.`);
|
|
112
|
+
const umsatz = typ.value === index_js_1.ReceiptType.standard.value || typ.value === index_js_1.ReceiptType.training.value;
|
|
113
|
+
if (umsatz) {
|
|
114
|
+
// Pflicht unter /v3 (payments_required); eine leere Liste ist erlaubt,
|
|
115
|
+
// wenn nichts zu zahlen ist (Rabatt deckt alles).
|
|
116
|
+
if (options.payments == null) {
|
|
117
|
+
throw eingabefehler('payments fehlt: unter /v3 ist die Zahlungsliste Pflicht (Summe = receiptDueCents).');
|
|
78
118
|
}
|
|
79
|
-
const konflikt = zahlungsKonflikt(options);
|
|
80
|
-
if (konflikt != null)
|
|
81
|
-
throw eingabefehler(konflikt);
|
|
82
119
|
params['payments'] = gepruefteZahlungen(options.payments, false, 'createReceipt');
|
|
83
120
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
// Verbraucher ohne Typen faellt durch dieses Netz, und ein Tippfehler in der
|
|
87
|
-
// Zahlungsart faellt sonst erst am Server auf.
|
|
88
|
-
const zahlungsart = options.paymentMethod != null ? gepruefteZahlungsart(options.paymentMethod) : options.paymentMethodFromServer;
|
|
89
|
-
if (zahlungsart != null) {
|
|
90
|
-
params['paymentMethod'] = zahlungsart;
|
|
91
|
-
const anbieter = options.creditCardProvider ?? index_js_1.CreditCardProvider.custom;
|
|
92
|
-
if (zahlungsart === index_js_1.KeckPaymentMethod.creditCard.value) {
|
|
93
|
-
if (options.cardPaymentId != null) {
|
|
94
|
-
params['cardPaymentId'] = options.cardPaymentId;
|
|
95
|
-
// Der Kartenanbieter kommt dagegen vom Aufrufer, nicht vom Server —
|
|
96
|
-
// hier bleibt der Schreibpfad streng.
|
|
97
|
-
params['creditCardProvider'] = kartenanbieter(anbieter);
|
|
98
|
-
// Bewusst auch als `null`, wenn der Anbieter keine Rohdaten liefert:
|
|
99
|
-
// das Feld gehoert zur Kartenzahlung und das Backend nimmt null an.
|
|
100
|
-
params['cardPaymentData'] = options.cardPaymentData ?? null;
|
|
101
|
-
}
|
|
102
|
-
else if (anbieter !== index_js_1.CreditCardProvider.custom) {
|
|
103
|
-
throw eingabefehler(`cardPaymentId ist Pflicht bei creditCardProvider "${anbieter}".`);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
121
|
+
else if (options.payments != null) {
|
|
122
|
+
throw eingabefehler(`payments sind bei receiptType "${typ.value}" nicht erlaubt.`);
|
|
106
123
|
}
|
|
107
124
|
if (options.tip != null) {
|
|
108
|
-
if (
|
|
125
|
+
if (!umsatz) {
|
|
109
126
|
throw eingabefehler(`Trinkgeld ist nur bei receiptType standard oder training moeglich, nicht bei "${typ.value}".`);
|
|
110
127
|
}
|
|
111
128
|
params['tip'] = gepruefterTip(options.tip);
|
|
@@ -121,16 +138,18 @@ function createReceiptParams(options) {
|
|
|
121
138
|
}
|
|
122
139
|
return params;
|
|
123
140
|
}
|
|
141
|
+
/** Felder des alten Einzel-Zahlungswegs; unter /v3 abgewiesen. */
|
|
142
|
+
const ALTE_ZAHLFELDER = ['paymentMethod', 'paymentMethodFromServer', 'creditCardProvider', 'cardPaymentId', 'cardPaymentData'];
|
|
124
143
|
/** Normalbeleg (Verkauf) nach RKSV. */
|
|
125
|
-
function sellReceipt(
|
|
126
|
-
return createReceipt(
|
|
144
|
+
function sellReceipt(transport, options) {
|
|
145
|
+
return createReceipt(transport, { ...options, receiptType: index_js_1.ReceiptType.standard });
|
|
127
146
|
}
|
|
128
147
|
/**
|
|
129
148
|
* Normalbeleg wie [sellReceipt], liefert zusaetzlich die Firmen-/Druckdaten
|
|
130
149
|
* aus derselben Antwort — alles, was ein Belegdruck braucht, in einem Aufruf.
|
|
131
150
|
*/
|
|
132
|
-
function sellReceiptWithCompany(
|
|
133
|
-
return createReceiptWithCompany(
|
|
151
|
+
function sellReceiptWithCompany(transport, options) {
|
|
152
|
+
return createReceiptWithCompany(transport, { ...options, receiptType: index_js_1.ReceiptType.standard });
|
|
134
153
|
}
|
|
135
154
|
const NOTE_MAX = 200;
|
|
136
155
|
/**
|
|
@@ -139,7 +158,7 @@ const NOTE_MAX = 200;
|
|
|
139
158
|
* Reichweite des Rechts (eigene/alle) und antwortet mit dem fertigen,
|
|
140
159
|
* signierten Storno-Beleg. Gutscheine des Originals wandern nicht mit.
|
|
141
160
|
*/
|
|
142
|
-
async function cancelReceipt(
|
|
161
|
+
async function cancelReceipt(transport, options) {
|
|
143
162
|
const cashregisterId = options.receipt?.cashregisterId ?? options.cashregisterId;
|
|
144
163
|
const originalReceiptId = options.receipt?.receiptId ?? options.originalReceiptId;
|
|
145
164
|
if (typeof cashregisterId !== 'string' || cashregisterId.trim() === '') {
|
|
@@ -164,8 +183,14 @@ async function cancelReceipt(rufen, options) {
|
|
|
164
183
|
if (options.note !== undefined && options.note.length > NOTE_MAX) {
|
|
165
184
|
throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Anmerkung ist zu lang (hoechstens ${NOTE_MAX} Zeichen)`, 'request');
|
|
166
185
|
}
|
|
186
|
+
const altfeld = ALTE_ZAHLFELDER.find((feld) => options[feld] != null);
|
|
187
|
+
if (altfeld != null) {
|
|
188
|
+
throw new errors_js_1.KasseneckValidationError('cancelReceipt', `${altfeld} gibt es unter /v3 nicht mehr: Rueckzahlungen gehen als payments hinaus.`, 'request');
|
|
189
|
+
}
|
|
167
190
|
// `payments: null` gilt wie im Backend als nicht angegeben.
|
|
168
|
-
const zahlungen = options.payments != null ?
|
|
191
|
+
const zahlungen = options.payments != null ? gepruefteZahlungen(options.payments, true, 'cancelReceipt') : undefined;
|
|
192
|
+
if (zahlungen !== undefined)
|
|
193
|
+
pruefeKartenRueckbuchung(zahlungen, options.receipt);
|
|
169
194
|
const params = { cashregisterId, originalReceiptId, reason: options.reason };
|
|
170
195
|
if (options.items !== undefined)
|
|
171
196
|
params.items = options.items.map((p) => ({ index: p.index, quantity: p.quantity }));
|
|
@@ -173,27 +198,11 @@ async function cancelReceipt(rufen, options) {
|
|
|
173
198
|
params.note = options.note;
|
|
174
199
|
if (zahlungen !== undefined)
|
|
175
200
|
params.payments = zahlungen;
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
// Originals; ein ausdruecklich anderer Rueckzahlweg ist hier schon falsch.
|
|
182
|
-
if (params.paymentMethod != null && params.paymentMethod !== index_js_1.KeckPaymentMethod.creditCard.value) {
|
|
183
|
-
throw new errors_js_1.KasseneckValidationError('cancelReceipt', 'Kartendaten gibt es nur bei paymentMethod creditCard', 'request');
|
|
184
|
-
}
|
|
185
|
-
if (options.creditCardProvider != null) {
|
|
186
|
-
if (!Object.prototype.hasOwnProperty.call(index_js_1.CreditCardProvider, options.creditCardProvider)) {
|
|
187
|
-
throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Kartenanbieter: unbekannter Schluessel "${options.creditCardProvider}"`, 'request');
|
|
188
|
-
}
|
|
189
|
-
params.creditCardProvider = options.creditCardProvider;
|
|
190
|
-
}
|
|
191
|
-
if (options.cardPaymentId != null && options.cardPaymentId !== '')
|
|
192
|
-
params.cardPaymentId = options.cardPaymentId;
|
|
193
|
-
if (options.cardPaymentData != null)
|
|
194
|
-
params.cardPaymentData = options.cardPaymentData;
|
|
195
|
-
}
|
|
196
|
-
const daten = await rufen('cancelReceipt', params);
|
|
201
|
+
const daten = await transport('cancelReceipt', params);
|
|
202
|
+
return (0, errors_js_1.signiertGelesen)('cancelReceipt', () => stornoAusHuelle(daten));
|
|
203
|
+
}
|
|
204
|
+
/** Liest die Storno-Antwort `{ receipt, cancellationOf, remaining }`. */
|
|
205
|
+
function stornoAusHuelle(daten) {
|
|
197
206
|
const receipt = belegAusHuelle(daten, 'cancelReceipt');
|
|
198
207
|
const huelle = daten;
|
|
199
208
|
const bezug = huelle.cancellationOf;
|
|
@@ -205,27 +214,17 @@ async function cancelReceipt(rufen, options) {
|
|
|
205
214
|
}
|
|
206
215
|
return {
|
|
207
216
|
receipt,
|
|
208
|
-
cancellationOf: {
|
|
217
|
+
cancellationOf: {
|
|
218
|
+
receiptId: bezug.receiptId,
|
|
219
|
+
fullReceiptId: typeof bezug.fullReceiptId === 'string' ? bezug.fullReceiptId : null,
|
|
220
|
+
...(typeof bezug.timeStamp === 'string' && bezug.timeStamp !== '' ? { timeStamp: bezug.timeStamp } : {}),
|
|
221
|
+
},
|
|
209
222
|
remaining: huelle.remaining,
|
|
210
223
|
};
|
|
211
224
|
}
|
|
212
|
-
/**
|
|
213
|
-
* Stornobeleg aus frei uebergebenen Positionen — fuer den Fall, dass der
|
|
214
|
-
* Originalbeleg nicht als Objekt vorliegt. Die Positionen gehen **unveraendert**
|
|
215
|
-
* hinaus; das Vorzeichen setzt der Aufrufer.
|
|
216
|
-
*
|
|
217
|
-
* @deprecated Alter Storno-Weg ohne Bezug: kein Verweis auf das Original,
|
|
218
|
-
* keine Restmengen, kein Schutz vor doppeltem Storno, Gutscheine werden nicht
|
|
219
|
-
* zurueckgenommen. Das Backend nimmt ihn weiter an und legt `deprecation` in
|
|
220
|
-
* die Antwort. Stattdessen [cancelReceipt] (Endpunkt `cancelReceipt`): Bezug,
|
|
221
|
-
* Grund, Teilstorno, Fehlercodes.
|
|
222
|
-
*/
|
|
223
|
-
function createCancelReceipt(rufen, options) {
|
|
224
|
-
return createReceipt(rufen, { ...options, receiptType: index_js_1.ReceiptType.cancellation });
|
|
225
|
-
}
|
|
226
225
|
/** Nullbeleg (RKSV-Pruefbeleg) — ohne Positionen und ohne Zahlungsart. */
|
|
227
|
-
function zeroReceipt(
|
|
228
|
-
return createReceipt(
|
|
226
|
+
function zeroReceipt(transport) {
|
|
227
|
+
return createReceipt(transport, { receiptType: index_js_1.ReceiptType.zero });
|
|
229
228
|
}
|
|
230
229
|
/**
|
|
231
230
|
* Belege einer Kasse auflisten — die Grundlage jeder Belegliste in der
|
|
@@ -242,7 +241,7 @@ function zeroReceipt(rufen) {
|
|
|
242
241
|
* (der Endpunkt laeuft mit `checkCashRegister: false`), ein Kassen-Benutzer
|
|
243
242
|
* bekommt also nur die ihm zugewiesenen Kassen.
|
|
244
243
|
*/
|
|
245
|
-
async function listMyReceipts(
|
|
244
|
+
async function listMyReceipts(transport, options) {
|
|
246
245
|
if (typeof options.cashregisterId !== 'string' || options.cashregisterId.trim() === '') {
|
|
247
246
|
throw new errors_js_1.KasseneckValidationError('listMyReceipts', 'cashregisterId fehlt', 'request');
|
|
248
247
|
}
|
|
@@ -255,8 +254,8 @@ async function listMyReceipts(rufen, options) {
|
|
|
255
254
|
throw new errors_js_1.KasseneckValidationError('listMyReceipts', `${feld} muss mit YYYY-MM-DD beginnen, war "${wert}"`, 'request');
|
|
256
255
|
}
|
|
257
256
|
}
|
|
258
|
-
const daten = await
|
|
259
|
-
|
|
257
|
+
const daten = await transport('listMyReceipts', {
|
|
258
|
+
cashregisterId: options.cashregisterId,
|
|
260
259
|
limit: options.limit,
|
|
261
260
|
...(options.from !== undefined ? { from: options.from } : {}),
|
|
262
261
|
...(options.to !== undefined ? { to: options.to } : {}),
|
|
@@ -280,7 +279,7 @@ function kennzahlen(roh) {
|
|
|
280
279
|
const tage = Array.isArray(quelle.days) ? quelle.days : [];
|
|
281
280
|
return {
|
|
282
281
|
today: {
|
|
283
|
-
revenueCents: (0, money_js_1.euroToCents)(quelle.today?.
|
|
282
|
+
revenueCents: (0, money_js_1.euroToCents)(quelle.today?.revenue),
|
|
284
283
|
count: typeof quelle.today?.count === 'number' ? quelle.today.count : 0,
|
|
285
284
|
},
|
|
286
285
|
trendPercent: typeof quelle.trendPct === 'number' ? quelle.trendPct : null,
|
|
@@ -288,14 +287,14 @@ function kennzahlen(roh) {
|
|
|
288
287
|
const eintrag = (typeof tag === 'object' && tag !== null ? tag : {});
|
|
289
288
|
return {
|
|
290
289
|
date: typeof eintrag.date === 'string' ? eintrag.date : '',
|
|
291
|
-
revenueCents: (0, money_js_1.euroToCents)(eintrag.
|
|
290
|
+
revenueCents: (0, money_js_1.euroToCents)(eintrag.revenue),
|
|
292
291
|
};
|
|
293
292
|
}),
|
|
294
293
|
};
|
|
295
294
|
}
|
|
296
295
|
/** Einzelnen Beleg der angemeldeten Kasse holen. */
|
|
297
|
-
async function getReceipt(
|
|
298
|
-
return belegAusHuelle(await
|
|
296
|
+
async function getReceipt(transport, receiptId) {
|
|
297
|
+
return belegAusHuelle(await transport('getReceipt', { receiptId }), 'getReceipt');
|
|
299
298
|
}
|
|
300
299
|
/**
|
|
301
300
|
* Wie [getReceipt], liefert zusaetzlich die Firmen-/Druckdaten aus derselben
|
|
@@ -303,15 +302,15 @@ async function getReceipt(rufen, receiptId) {
|
|
|
303
302
|
* Kleinunternehmer-Kennzeichen) — die Angaben, die ein Beleg im Kopf und Fuss
|
|
304
303
|
* traegt (siehe models/receipt-company.ts).
|
|
305
304
|
*/
|
|
306
|
-
async function getReceiptWithCompany(
|
|
307
|
-
return belegMitFirmaAusHuelle(await
|
|
305
|
+
async function getReceiptWithCompany(transport, receiptId) {
|
|
306
|
+
return belegMitFirmaAusHuelle(await transport('getReceipt', { receiptId }), 'getReceipt');
|
|
308
307
|
}
|
|
309
308
|
/**
|
|
310
309
|
* Verschluesselte Volltext-Belegnummer erzeugen — der Bezeichner, unter dem der
|
|
311
310
|
* Beleg oeffentlich abrufbar ist (Beleg-Download, Pruefportal).
|
|
312
311
|
*/
|
|
313
|
-
async function generateFullReceiptId(
|
|
314
|
-
const daten = await
|
|
312
|
+
async function generateFullReceiptId(transport, receiptId) {
|
|
313
|
+
const daten = await transport('generateFullReceiptId', { receiptId });
|
|
315
314
|
const id = daten?.fullReceiptId;
|
|
316
315
|
if (typeof id !== 'string') {
|
|
317
316
|
throw antwortfehler('generateFullReceiptId', 'Antwort enthaelt keine fullReceiptId');
|
|
@@ -326,8 +325,8 @@ async function generateFullReceiptId(rufen, receiptId) {
|
|
|
326
325
|
* fuehrt kein `allowRegisterUser`, das Backend weist die Browser-Kasse hier ab
|
|
327
326
|
* (siehe Modulkommentar oben). Mit `apiKeyAuth` ist er offen.
|
|
328
327
|
*/
|
|
329
|
-
async function getFirstReceiptDate(
|
|
330
|
-
const roh = await
|
|
328
|
+
async function getFirstReceiptDate(transport) {
|
|
329
|
+
const roh = await transport('getFirstReceiptDate');
|
|
331
330
|
if (typeof roh !== 'string') {
|
|
332
331
|
throw antwortfehler('getFirstReceiptDate', 'Antwort enthaelt keinen Zeitstempel');
|
|
333
332
|
}
|
|
@@ -348,6 +347,8 @@ async function getFirstReceiptDate(rufen) {
|
|
|
348
347
|
throw antwortfehler('getFirstReceiptDate', 'Antwort enthaelt keinen lesbaren Zeitstempel');
|
|
349
348
|
}
|
|
350
349
|
}
|
|
350
|
+
/** Felder von [SendReceiptEmailOptions]; jedes andere wirft vor dem Senden. */
|
|
351
|
+
const MAIL_FELDER = ['fullReceiptId', 'to', 'language'];
|
|
351
352
|
/**
|
|
352
353
|
* Schickt einen bereits ausgestellten Beleg als **Link auf die oeffentliche
|
|
353
354
|
* Belegseite** an eine Adresse (Endpunkt `sendReceiptEmail`, Backend
|
|
@@ -358,17 +359,23 @@ async function getFirstReceiptDate(rufen) {
|
|
|
358
359
|
* das Backend in einer Unter-Sammlung neben dem Beleg.
|
|
359
360
|
*
|
|
360
361
|
* **Am Code entscheiden, nie am Text:** fachliche Fehler kommen als
|
|
361
|
-
* [KasseneckApiError] mit `code` aus [RECEIPT_EMAIL_ERROR_CODES] heraus
|
|
362
|
-
* `
|
|
363
|
-
* fremden Kasse: das Backend gibt darueber bewusst keine Auskunft),
|
|
364
|
-
* (5 Mails je Beleg in 24 Stunden, 30 je Kasse und
|
|
365
|
-
* `
|
|
362
|
+
* [KasseneckApiError] mit `code` aus [RECEIPT_EMAIL_ERROR_CODES] heraus:
|
|
363
|
+
* `invalid_address`, `receipt_not_found` (auch fuer einen Beleg einer
|
|
364
|
+
* fremden Kasse: das Backend gibt darueber bewusst keine Auskunft),
|
|
365
|
+
* `too_many_requests` (5 Mails je Beleg in 24 Stunden, 30 je Kasse und
|
|
366
|
+
* Stunde) und `send_failed`. Dieses Paket reicht sie unveraendert durch und
|
|
366
367
|
* legt keine eigenen Codes an.
|
|
367
368
|
*
|
|
368
369
|
* **Kein Wiederholen ohne Zutun des Bedieners:** ein zweiter Versuch schickt
|
|
369
370
|
* eine zweite Mail und zaehlt auf die Schleuse.
|
|
370
371
|
*/
|
|
371
|
-
async function sendReceiptEmail(
|
|
372
|
+
async function sendReceiptEmail(transport, options) {
|
|
373
|
+
// Ein unbekanntes Feld (etwa das alte `sprache`) ginge sonst still verloren,
|
|
374
|
+
// und die Mail kaeme in der falschen Sprache.
|
|
375
|
+
const fremd = Object.keys(options ?? {}).find((k) => !MAIL_FELDER.includes(k));
|
|
376
|
+
if (fremd != null) {
|
|
377
|
+
throw new errors_js_1.KasseneckValidationError('sendReceiptEmail', `unbekanntes Feld "${fremd}"`, 'request');
|
|
378
|
+
}
|
|
372
379
|
// Getrimmt, weil beides von Hand oder per Scanner ins Feld kommt und ein
|
|
373
380
|
// angehaengtes Leerzeichen sonst als ungueltige Adresse zurueckkaeme --
|
|
374
381
|
// nach einem Aufruf, der schon eine Zeile im Protokoll gekostet hat.
|
|
@@ -381,20 +388,21 @@ async function sendReceiptEmail(rufen, options) {
|
|
|
381
388
|
throw new errors_js_1.KasseneckValidationError('sendReceiptEmail', 'to fehlt (Empfaengeradresse)', 'request');
|
|
382
389
|
}
|
|
383
390
|
// Die Adresse selbst wird hier NICHT geprueft: das Backend prueft sie mit
|
|
384
|
-
// kreiseck_validator und antwortet mit `
|
|
391
|
+
// kreiseck_validator und antwortet mit `invalid_address`. Eine zweite,
|
|
385
392
|
// eigene Regel im Paket koennte strenger sein als die des Backends und eine
|
|
386
393
|
// gueltige Adresse abweisen, ohne dass jemand die Abweichung bemerkt.
|
|
387
394
|
const params = { fullReceiptId, to };
|
|
388
|
-
if (options.
|
|
389
|
-
params.
|
|
390
|
-
const daten = await
|
|
395
|
+
if (options.language !== undefined && options.language !== '')
|
|
396
|
+
params.language = options.language;
|
|
397
|
+
const daten = await transport('sendReceiptEmail', params);
|
|
391
398
|
if (typeof daten?.to !== 'string' || daten.to === '') {
|
|
392
399
|
throw antwortfehler('sendReceiptEmail', 'Antwort nennt keine Empfaengeradresse (data.to fehlt)');
|
|
393
400
|
}
|
|
394
401
|
if (typeof daten.at !== 'string' || daten.at === '') {
|
|
395
402
|
throw antwortfehler('sendReceiptEmail', 'Antwort nennt keinen Zeitpunkt (data.at fehlt)');
|
|
396
403
|
}
|
|
397
|
-
|
|
404
|
+
const via = index_js_2.RECEIPT_EMAIL_VIAS.includes(daten.via) ? daten.via : null;
|
|
405
|
+
return { to: daten.to, at: daten.at, via };
|
|
398
406
|
}
|
|
399
407
|
/**
|
|
400
408
|
* Prueft die Gutschein-Kombination eines Belegs und liefert den ersten
|
|
@@ -489,6 +497,11 @@ function gepruefterTip(tip) {
|
|
|
489
497
|
if (tip == null || typeof tip !== 'object' || !istCentBetrag(tip.cents)) {
|
|
490
498
|
throw eingabefehler('Trinkgeld: Betrag muss eine ganze Zahl in Cent > 0 sein.');
|
|
491
499
|
}
|
|
500
|
+
// Ein unbekannter Schluessel (etwa das alte `sofortErhalten`) weist der
|
|
501
|
+
// Server unter /v3 ab; hier faellt er vor dem Senden.
|
|
502
|
+
const fremd = Object.keys(tip).find((k) => !TIP_FELDER.includes(k));
|
|
503
|
+
if (fremd != null)
|
|
504
|
+
throw eingabefehler(`Trinkgeld: unbekanntes Feld "${fremd}".`);
|
|
492
505
|
const nutzlast = { cents: tip.cents };
|
|
493
506
|
if (tip.paymentMethod != null)
|
|
494
507
|
nutzlast['paymentMethod'] = gepruefteZahlungsart(tip.paymentMethod);
|
|
@@ -496,11 +509,11 @@ function gepruefterTip(tip) {
|
|
|
496
509
|
// Voreinstellung des Betriebs. Ein `false` waere dort eine Aussage, kein
|
|
497
510
|
// Weglassen. Der Wortlaut des Fehlers ist der des Backends
|
|
498
511
|
// (tip-core.normalizeTip) -- wer ihn hier sieht, sieht denselben Satz.
|
|
499
|
-
if (tip.
|
|
500
|
-
if (typeof tip.
|
|
501
|
-
throw eingabefehler('Trinkgeld:
|
|
512
|
+
if (tip.receivedImmediately != null) {
|
|
513
|
+
if (typeof tip.receivedImmediately !== 'boolean') {
|
|
514
|
+
throw eingabefehler('Trinkgeld: receivedImmediately muss true oder false sein.');
|
|
502
515
|
}
|
|
503
|
-
nutzlast['
|
|
516
|
+
nutzlast['receivedImmediately'] = tip.receivedImmediately;
|
|
504
517
|
}
|
|
505
518
|
if (tip.recipients != null) {
|
|
506
519
|
if (!Array.isArray(tip.recipients) || tip.recipients.length === 0) {
|
|
@@ -526,6 +539,7 @@ function gepruefterTip(tip) {
|
|
|
526
539
|
}
|
|
527
540
|
return nutzlast;
|
|
528
541
|
}
|
|
542
|
+
const TIP_FELDER = ['cents', 'paymentMethod', 'recipients', 'receivedImmediately'];
|
|
529
543
|
/**
|
|
530
544
|
* Zahlungsart des Aufrufers pruefen — unbekannt wirft, bevor etwas rausgeht.
|
|
531
545
|
* `mixed` wirft ebenfalls: den Wert vergibt nur der Server (Beleg mit
|
|
@@ -549,18 +563,6 @@ function gepruefteZahlungsart(wert) {
|
|
|
549
563
|
}
|
|
550
564
|
/** Hoechstzahl der Zahlungen je Beleg (Backend: MAX_ZAHLUNGEN). */
|
|
551
565
|
const MAX_ZAHLUNGEN = 20;
|
|
552
|
-
/**
|
|
553
|
-
* `payments` neben einer Einzel-Zahlungsart oder Kartenfeldern? Liefert den
|
|
554
|
-
* Grund (Backend: PAYMENTS_CONFLICT), sonst null. Nie still eines bevorzugen.
|
|
555
|
-
*/
|
|
556
|
-
function zahlungsKonflikt(options) {
|
|
557
|
-
for (const feld of ['paymentMethod', 'paymentMethodFromServer', 'creditCardProvider', 'cardPaymentId', 'cardPaymentData']) {
|
|
558
|
-
if (options[feld] != null) {
|
|
559
|
-
return `payments und ${feld} duerfen nicht gemeinsam gesendet werden – Kartenangaben gehoeren in die Zahlung.`;
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
return null;
|
|
563
|
-
}
|
|
564
566
|
/**
|
|
565
567
|
* Zahlungsliste pruefen und in Nutzlast-Form bringen — Formpruefung wie
|
|
566
568
|
* `pruefeZahlungen` im Backend, soweit sie ohne Beleg und Zahlbetrag geht
|
|
@@ -624,12 +626,53 @@ function gepruefteZahlungen(roh, storno, functionName) {
|
|
|
624
626
|
return aus;
|
|
625
627
|
});
|
|
626
628
|
}
|
|
627
|
-
/**
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
629
|
+
/** Zahlarten mit Kartenterminal (Backend: KARTEN_ZAHLARTEN). */
|
|
630
|
+
const KARTEN_ZAHLARTEN = new Set(['creditCard', 'uberCard', 'boltCard']);
|
|
631
|
+
/**
|
|
632
|
+
* Kennung der Originalzahlung fuer die Rueckbuchung am Terminal (Hobex
|
|
633
|
+
* `originalTransactionId`, SumUp-Transaktion, ...): `providerPaymentId` der
|
|
634
|
+
* Zahlung `paymentId` des Originals. Die liefert nur der Kassenweg (Kanal
|
|
635
|
+
* `app`, `registerUserAuth`); am oeffentlichen Weg fehlt sie, und dann wirft
|
|
636
|
+
* dieser Aufruf, statt `undefined` an ein Terminal weiterzugeben.
|
|
637
|
+
*/
|
|
638
|
+
function cardRefundReference(receipt, paymentId) {
|
|
639
|
+
const zahlung = receipt.payments?.find((z) => z.id === paymentId);
|
|
640
|
+
if (zahlung == null) {
|
|
641
|
+
throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Zahlung "${paymentId}" gibt es am Beleg nicht`, 'request');
|
|
642
|
+
}
|
|
643
|
+
const methode = typeof zahlung.method === 'object' ? zahlung.method.value : zahlung.method;
|
|
644
|
+
if (!KARTEN_ZAHLARTEN.has(methode)) {
|
|
645
|
+
throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Zahlung "${paymentId}" ist keine Kartenzahlung`, 'request');
|
|
646
|
+
}
|
|
647
|
+
if (typeof zahlung.providerPaymentId !== 'string' || zahlung.providerPaymentId === '') {
|
|
648
|
+
throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Kennung der Kartenzahlung "${paymentId}" fehlt: sie kommt nur ueber den Kassenweg (registerUserAuth, kasse.kasseneck.at/api/v3), nicht ueber den oeffentlichen Weg`, 'request');
|
|
649
|
+
}
|
|
650
|
+
return zahlung.providerPaymentId;
|
|
651
|
+
}
|
|
652
|
+
/**
|
|
653
|
+
* Karten-Rueckbuchung am Storno, geprueft vor dem Senden:
|
|
654
|
+
* - Sie nennt ihren Anbieter (`provider`; `custom` fuer eine Erstattung
|
|
655
|
+
* ohne angebundenes Terminal). Ganz ohne Anbieterfelder faellt sie.
|
|
656
|
+
* - Ueber einen Anbieter (nicht `custom`) braucht sie einen Bezug: ihre eigene
|
|
657
|
+
* Terminal-Kennung (`providerPaymentId` der Erstattung) oder, liegt das
|
|
658
|
+
* Original vor, die Kennung der erstatteten Kartenzahlung dort. Erst wenn
|
|
659
|
+
* beides fehlt, wirft sie.
|
|
660
|
+
*/
|
|
661
|
+
function pruefeKartenRueckbuchung(zahlungen, original) {
|
|
662
|
+
zahlungen.forEach((z, i) => {
|
|
663
|
+
if (!KARTEN_ZAHLARTEN.has(String(z['method'])))
|
|
664
|
+
return;
|
|
665
|
+
const anbieter = z['provider'];
|
|
666
|
+
if (anbieter == null && z['providerPaymentId'] == null) {
|
|
667
|
+
throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Zahlung ${i + 1}: Karten-Rueckbuchung ohne Anbieter und ohne Kennung (provider angeben, custom fuer eine Erstattung ohne angebundenes Terminal)`, 'request');
|
|
668
|
+
}
|
|
669
|
+
if (anbieter === index_js_1.CreditCardProvider.custom || z['providerPaymentId'] != null)
|
|
670
|
+
return;
|
|
671
|
+
const orig = original != null && typeof z['refundOf'] === 'string' ? original.payments?.find((o) => o.id === z['refundOf']) : undefined;
|
|
672
|
+
if (typeof orig?.providerPaymentId === 'string' && orig.providerPaymentId !== '')
|
|
673
|
+
return;
|
|
674
|
+
throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Zahlung ${i + 1}: Karten-Rueckbuchung ohne Bezug: providerPaymentId der Erstattung am Terminal angeben (oder das Original ueber den Kassenweg lesen, dort traegt es die Kennung der Kartenzahlung)`, 'request');
|
|
675
|
+
});
|
|
633
676
|
}
|
|
634
677
|
/** Kartenanbieter pruefen — er stammt vom Aufrufer, nicht aus Serverdaten. */
|
|
635
678
|
function kartenanbieter(wert) {
|
|
@@ -653,6 +696,9 @@ function antwortfehler(functionName, grund) {
|
|
|
653
696
|
* models/receipt.ts), und die bestehenden Aufrufe sollen ihre Zusage behalten.
|
|
654
697
|
* Wer beides braucht, nimmt [belegMitFirmaAusHuelle] ueber die
|
|
655
698
|
* `…WithCompany`-Varianten.
|
|
699
|
+
*
|
|
700
|
+
* Paketintern exportiert, damit `./stored` gespeicherte Belege mit demselben
|
|
701
|
+
* Leser liest; nicht Teil der Paketoberflaeche.
|
|
656
702
|
*/
|
|
657
703
|
function belegAusHuelle(daten, functionName) {
|
|
658
704
|
const huelle = daten;
|
|
@@ -682,21 +728,34 @@ function belegAusHuelle(daten, functionName) {
|
|
|
682
728
|
* fehlt er, ist die Antwort unbrauchbar. Die Firmendaten duerfen dagegen
|
|
683
729
|
* luecken haben — ein Kundendokument ohne gepflegte Fusszeile ist kein Grund,
|
|
684
730
|
* einen ausgestellten Beleg nicht anzuzeigen (siehe models/receipt-company.ts).
|
|
731
|
+
* Paketintern exportiert wie [belegAusHuelle].
|
|
685
732
|
*/
|
|
686
733
|
function belegMitFirmaAusHuelle(daten, functionName) {
|
|
687
734
|
const receipt = belegAusHuelle(daten, functionName);
|
|
688
735
|
const d = (daten ?? {});
|
|
689
736
|
const layout = d.layout && typeof d.layout === 'object' && Array.isArray(d.layout.lines) ? d.layout : null;
|
|
690
|
-
const
|
|
691
|
-
const text = (v) => (typeof v === 'string' && v ? v : null);
|
|
737
|
+
const angaben = d.registrationInfo && typeof d.registrationInfo === 'object' ? (0, index_js_2.readRegistrationInfo)(d.registrationInfo) : null;
|
|
692
738
|
return {
|
|
693
739
|
receipt,
|
|
694
740
|
company: (0, index_js_2.fromReceiptCompanyPayload)(daten),
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
741
|
+
testCashregister: d.testCashregister === true,
|
|
742
|
+
testSignature: d.testSignature === true,
|
|
743
|
+
headerVersionId: typeof d.headerVersionId === 'string' && d.headerVersionId !== '' ? d.headerVersionId : null,
|
|
698
744
|
layout,
|
|
699
|
-
|
|
700
|
-
|
|
745
|
+
registrationInfo: angaben,
|
|
746
|
+
logoScale: d.logo_scale === 'S' || d.logo_scale === 'M' || d.logo_scale === 'L' || d.logo_scale === 'XL' ? d.logo_scale : 'M',
|
|
701
747
|
};
|
|
702
748
|
}
|
|
749
|
+
/**
|
|
750
|
+
* Zahlbetrag des Servers aus einem `payments_sum_mismatch`
|
|
751
|
+
* (`details.expectedCents`), sonst `undefined`. Das Paket wiederholt nie
|
|
752
|
+
* selbst mit diesem Betrag: eine Kartenzahlung ist schon belastet. Die Kasse
|
|
753
|
+
* entscheidet (Differenz nachkassieren oder erstatten) und schickt dann einen
|
|
754
|
+
* neuen Verkauf.
|
|
755
|
+
*/
|
|
756
|
+
function paymentsExpectedCents(error) {
|
|
757
|
+
if (!(0, errors_js_1.isKasseneckApiError)(error) || error.code !== 'payments_sum_mismatch')
|
|
758
|
+
return undefined;
|
|
759
|
+
const wert = error.details['expectedCents'];
|
|
760
|
+
return Number.isSafeInteger(wert) ? wert : undefined;
|
|
761
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type { InternerBinaerTransport } from './aufrufe.js';
|
|
1
|
+
import { type Receipt, type ReceiptCompany, type ReportMonth } from '../models/index.js';
|
|
2
|
+
import type { InternerBinaerTransport, InternerTransport } from './aufrufe.js';
|
|
3
3
|
/**
|
|
4
4
|
* Bericht-Downloads — Zwilling von `downloadDailyReport`/`downloadMonthlyReport`
|
|
5
5
|
* in kasseneck_api/lib/kasseneck_api.dart (Zeilen 113-128).
|
|
@@ -29,7 +29,7 @@ import type { InternerBinaerTransport } from './aufrufe.js';
|
|
|
29
29
|
* Vortags holen (das Dart-Vorbild nimmt hier die Geraetezeit, was auf einer
|
|
30
30
|
* oesterreichischen Kasse zufaellig stimmt).
|
|
31
31
|
*/
|
|
32
|
-
export declare function downloadDailyReport(
|
|
32
|
+
export declare function downloadDailyReport(transport: InternerBinaerTransport, date: Date): Promise<Uint8Array>;
|
|
33
33
|
/**
|
|
34
34
|
* Monatsbericht als PDF.
|
|
35
35
|
*
|
|
@@ -40,4 +40,26 @@ export declare function downloadDailyReport(rufen: InternerBinaerTransport, date
|
|
|
40
40
|
* `month` geht als **Zahl 1-12** raus (im Flutter-Paket `reportMonth.month.id`,
|
|
41
41
|
* wo `KeckMonth.january.id === 1` ist) — kein Name, kein nullbasierter Index.
|
|
42
42
|
*/
|
|
43
|
-
export declare function downloadMonthlyReport(
|
|
43
|
+
export declare function downloadMonthlyReport(transport: InternerBinaerTransport, reportMonth: ReportMonth): Promise<Uint8Array>;
|
|
44
|
+
/** Zeitfenster von [getReportV2]: Wiener Wanduhr, `YYYY-MM-DD` oder voller Zeitstempel, `end` ausschliesslich. */
|
|
45
|
+
export interface ReportV2Options {
|
|
46
|
+
start: string;
|
|
47
|
+
end: string;
|
|
48
|
+
}
|
|
49
|
+
/** Firmendaten des Berichts: die Beleg-Firmendaten plus die Bezeichnung der Kasse. */
|
|
50
|
+
export interface ReportV2Metadata extends ReceiptCompany {
|
|
51
|
+
/** Bezeichnung der Kasse; leer, wenn keine gepflegt ist. */
|
|
52
|
+
label: string;
|
|
53
|
+
}
|
|
54
|
+
export interface ReportV2 {
|
|
55
|
+
/** Alle Belege der angemeldeten Kasse mit `start <= timeStamp < end`. */
|
|
56
|
+
receipts: Receipt[];
|
|
57
|
+
metadata: ReportV2Metadata;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Rohdaten eines Zeitraums (`getReportV2`): alle Belege der Kasse und die
|
|
61
|
+
* Firmendaten fuer Kopf und Fuss. Der Server vergleicht die Zeitstempel als
|
|
62
|
+
* Text (`start <= timeStamp < end`), darum Wiener Wanduhr im Serverformat.
|
|
63
|
+
* Nur ueber den API-Schluessel-Weg (Kasse aus dem `cashregister-token`).
|
|
64
|
+
*/
|
|
65
|
+
export declare function getReportV2(transport: InternerTransport, options: ReportV2Options): Promise<ReportV2>;
|