@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
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QUANTITY_RULES = void 0;
|
|
4
|
+
exports.fromArticleGroupPayload = fromArticleGroupPayload;
|
|
5
|
+
exports.quantityRuleForUnit = quantityRuleForUnit;
|
|
6
|
+
exports.quantityDefaults = quantityDefaults;
|
|
7
|
+
exports.allowedQuantity = allowedQuantity;
|
|
8
|
+
exports.fromPosArticlePayload = fromPosArticlePayload;
|
|
9
|
+
exports.listMyArticleGroups = listMyArticleGroups;
|
|
10
|
+
exports.listMyArticles = listMyArticles;
|
|
11
|
+
const errors_js_1 = require("../client/errors.js");
|
|
12
|
+
function fromArticleGroupPayload(p) {
|
|
13
|
+
return {
|
|
14
|
+
id: p.id ?? '',
|
|
15
|
+
name: p.name ?? '',
|
|
16
|
+
color: p.color ?? '#6B7280',
|
|
17
|
+
symbol: p.symbol ?? null,
|
|
18
|
+
sort: typeof p.sort === 'number' ? p.sort : 0,
|
|
19
|
+
vatRate: typeof p.vatRate === 'number' ? p.vatRate : null,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Mengenregel eines Artikels (Draht `quantityRule`): `piece` = ganze Stueck
|
|
24
|
+
* (1, 2, 3 ...), `decimal` = Kommamenge in der Einheit (0,250 kg, 1,5 m).
|
|
25
|
+
* Beleg und DEP bleiben ganzzahlig: eine Kommamenge wird an der Kasse als EINE
|
|
26
|
+
* Position mit ausgerechnetem Betrag gebucht, die Bezeichnung traegt die Menge
|
|
27
|
+
* („Wurst 0,250 kg“). Siehe [quantityRuleForUnit] fuer die Vorgabe je Einheit.
|
|
28
|
+
*/
|
|
29
|
+
exports.QUANTITY_RULES = ['piece', 'decimal'];
|
|
30
|
+
/** Einheiten, die nach Menge verkauft werden (Kommazahl, Kasse fragt). */
|
|
31
|
+
const DEZIMAL_EINHEITEN = {
|
|
32
|
+
kg: 3, g: 0, l: 2, ml: 0, m: 2, lfm: 2, km: 1, 'm²': 2, m2: 2, 'm³': 3, m3: 3, std: 2, h: 2, min: 0, t: 3,
|
|
33
|
+
};
|
|
34
|
+
/** Vorgabe je Einheit: was der Betrieb bei einem neuen Artikel bekommt und aendern darf. */
|
|
35
|
+
function quantityRuleForUnit(unit) {
|
|
36
|
+
const u = (unit ?? '').trim().toLowerCase();
|
|
37
|
+
if (u in DEZIMAL_EINHEITEN) {
|
|
38
|
+
const stellen = DEZIMAL_EINHEITEN[u];
|
|
39
|
+
return stellen === 0
|
|
40
|
+
? { rule: 'piece', ask: true, decimals: 0 } // g, ml, min: ganze Zahl, aber die Menge wird gefragt
|
|
41
|
+
: { rule: 'decimal', ask: true, decimals: stellen };
|
|
42
|
+
}
|
|
43
|
+
return { rule: 'piece', ask: false, decimals: 0 };
|
|
44
|
+
}
|
|
45
|
+
/** Wirksame Regel eines Artikels: gespeicherte Angabe schlaegt die Vorgabe der Einheit. */
|
|
46
|
+
function quantityDefaults(a) {
|
|
47
|
+
const v = quantityRuleForUnit(a.unit);
|
|
48
|
+
return {
|
|
49
|
+
rule: a.quantityRule ?? v.rule,
|
|
50
|
+
ask: a.askQuantity ?? v.ask,
|
|
51
|
+
decimals: (a.quantityRule ?? v.rule) === 'decimal' ? Math.max(1, v.decimals || 2) : 0,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/** Deckelt eine gewuenschte Menge an der Hoechstmenge des Artikels (null = keine Grenze). */
|
|
55
|
+
function allowedQuantity(a, wanted) {
|
|
56
|
+
return a.maxQuantity != null && a.maxQuantity > 0 ? Math.min(wanted, a.maxQuantity) : wanted;
|
|
57
|
+
}
|
|
58
|
+
function fromPosArticlePayload(p) {
|
|
59
|
+
return {
|
|
60
|
+
id: p.id ?? '',
|
|
61
|
+
name: p.name ?? '',
|
|
62
|
+
unitPriceCents: typeof p.unitPriceCents === 'number' ? p.unitPriceCents : null,
|
|
63
|
+
vatRate: typeof p.vatRate === 'number' ? p.vatRate : null,
|
|
64
|
+
unit: p.unit ?? '',
|
|
65
|
+
groupId: p.groupId ?? null,
|
|
66
|
+
revenueGroupId: typeof p.revenueGroupId === 'string' && p.revenueGroupId ? p.revenueGroupId : null,
|
|
67
|
+
visible: p.tile?.visible !== false,
|
|
68
|
+
sort: typeof p.tile?.sort === 'number' ? p.tile.sort : 0,
|
|
69
|
+
active: p.active !== false,
|
|
70
|
+
quantityRule: p.quantityRule === 'piece' || p.quantityRule === 'decimal' ? p.quantityRule : null,
|
|
71
|
+
askQuantity: typeof p.askQuantity === 'boolean' ? p.askQuantity : null,
|
|
72
|
+
maxQuantity: typeof p.maxQuantity === 'number' && Number.isFinite(p.maxQuantity) && p.maxQuantity > 0 ? p.maxQuantity : null,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function liste(daten, feld, name, lesen) {
|
|
76
|
+
const roh = daten?.[feld];
|
|
77
|
+
if (!Array.isArray(roh)) {
|
|
78
|
+
throw new errors_js_1.KasseneckValidationError(name, `Antwort enthaelt keine Liste (data.${feld} fehlt)`, 'response');
|
|
79
|
+
}
|
|
80
|
+
return roh.map((e) => lesen(typeof e === 'object' && e !== null ? e : {}));
|
|
81
|
+
}
|
|
82
|
+
async function listMyArticleGroups(transport) {
|
|
83
|
+
const daten = await transport('listMyArticleGroups');
|
|
84
|
+
return liste(daten, 'groups', 'listMyArticleGroups', (e) => fromArticleGroupPayload(e));
|
|
85
|
+
}
|
|
86
|
+
async function listMyArticles(transport) {
|
|
87
|
+
const daten = await transport('listMyArticles');
|
|
88
|
+
return liste(daten, 'articles', 'listMyArticles', (e) => fromPosArticlePayload(e));
|
|
89
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { InternerTransport } from '../client/aufrufe.js';
|
|
2
|
+
import { type PosSettings, type PosBusinessSettings, type PosDeviceSettings } from './settings.js';
|
|
3
|
+
/** Einstellungen lesen: Standard + gespeichert (Backend: `getKasseSettings`). */
|
|
4
|
+
export declare function getPosSettings(transport: InternerTransport, options?: {
|
|
5
|
+
deviceId?: string;
|
|
6
|
+
}): Promise<PosSettings>;
|
|
7
|
+
/** `{business, device}` einer Antwort, gemischt mit den Standardwerten. */
|
|
8
|
+
export declare function posSettingsFromWire(data: {
|
|
9
|
+
business?: unknown;
|
|
10
|
+
device?: unknown;
|
|
11
|
+
} | null | undefined): PosSettings;
|
|
12
|
+
/** Betriebsweite Einstellungen schreiben (Recht `layout`); liefert den gemischten Stand. */
|
|
13
|
+
export declare function setMyPosSettings(transport: InternerTransport, business: Partial<PosBusinessSettings>): Promise<PosBusinessSettings>;
|
|
14
|
+
/** Geraete-Einstellungen schreiben (Recht `layout`); liefert den gemischten Stand. */
|
|
15
|
+
export declare function setMyRegisterDeviceSettings(transport: InternerTransport, deviceId: string, device: Partial<PosDeviceSettings>): Promise<PosDeviceSettings>;
|
|
16
|
+
/** Eingabe von [setMyPosLogo]: ein Bild als Data-URL (PNG, JPEG, SVG) oder das Entfernen. */
|
|
17
|
+
export type SetMyPosLogoOptions = {
|
|
18
|
+
image: string;
|
|
19
|
+
} | {
|
|
20
|
+
remove: true;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Bild-Logo der Kasse hochladen oder entfernen (Recht `layout`). Liefert die
|
|
24
|
+
* neue `logoImage`-Adresse, nach dem Entfernen `''`. Formatfehler meldet der
|
|
25
|
+
* Server als `logo_invalid_type`, `logo_too_large` oder `logo_invalid`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function setMyPosLogo(transport: InternerTransport, options: SetMyPosLogoOptions): Promise<string>;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPosSettings = getPosSettings;
|
|
4
|
+
exports.posSettingsFromWire = posSettingsFromWire;
|
|
5
|
+
exports.setMyPosSettings = setMyPosSettings;
|
|
6
|
+
exports.setMyRegisterDeviceSettings = setMyRegisterDeviceSettings;
|
|
7
|
+
exports.setMyPosLogo = setMyPosLogo;
|
|
8
|
+
const errors_js_1 = require("../client/errors.js");
|
|
9
|
+
const settings_js_1 = require("./settings.js");
|
|
10
|
+
/*
|
|
11
|
+
* Die Einstellungs-Aufrufe am Draht `/api/v3`: Parameter und Antwort heissen
|
|
12
|
+
* `business`/`device`, Schluessel und Werte englisch (Nachtrag §11.7.2).
|
|
13
|
+
*
|
|
14
|
+
* **Nur geaenderte Felder senden** ([posSettingsChanges]), nie den ganzen
|
|
15
|
+
* gemischten Block: der Server mischt tief, ein nicht geaenderter Wert, den
|
|
16
|
+
* dieses Paket nicht kennt (`theme: 'sepia'`), bleibt so am Server stehen.
|
|
17
|
+
* Gelesen wird er unveraendert ([unknownPosSettingValues] nennt ihn).
|
|
18
|
+
*
|
|
19
|
+
* Vor dem Senden prueft dieser Weg nur die gesendeten Felder (ein Feld mit
|
|
20
|
+
* `undefined` geht nicht hinaus und wird nicht geprueft), und nur, was der
|
|
21
|
+
* Server sicher abweist: einen
|
|
22
|
+
* Schluessel, den es nicht gibt (auch einen deutschen aus 0.x wie `stil`),
|
|
23
|
+
* einen Wert ausserhalb der Wertemenge des Feldes (`'nacht'`), eine
|
|
24
|
+
* Steuersatz-Karte ohne einen Satz an und eine unbekannte Tasten-Aktion.
|
|
25
|
+
* Der Fehler nennt den aeusseren Pfad wie das Backend (`business.theme`).
|
|
26
|
+
* Alles Weitere (Bereiche, Chips, Farbformat) entscheidet der Server und
|
|
27
|
+
* meldet es als `validation` mit `data.errors[].field`.
|
|
28
|
+
*/
|
|
29
|
+
/** Einstellungen lesen: Standard + gespeichert (Backend: `getKasseSettings`). */
|
|
30
|
+
async function getPosSettings(transport, options = {}) {
|
|
31
|
+
const params = {};
|
|
32
|
+
if (options.deviceId)
|
|
33
|
+
params.deviceId = options.deviceId;
|
|
34
|
+
const daten = await transport('getKasseSettings', params);
|
|
35
|
+
return posSettingsFromWire(daten);
|
|
36
|
+
}
|
|
37
|
+
/** `{business, device}` einer Antwort, gemischt mit den Standardwerten. */
|
|
38
|
+
function posSettingsFromWire(data) {
|
|
39
|
+
return {
|
|
40
|
+
business: (0, settings_js_1.mergePosSettings)(settings_js_1.POS_BUSINESS_DEFAULTS, objekt(data?.business)),
|
|
41
|
+
device: (0, settings_js_1.mergePosSettings)(settings_js_1.POS_DEVICE_DEFAULTS, objekt(data?.device)),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** Betriebsweite Einstellungen schreiben (Recht `layout`); liefert den gemischten Stand. */
|
|
45
|
+
async function setMyPosSettings(transport, business) {
|
|
46
|
+
const name = 'setMyKasseSettings';
|
|
47
|
+
pruefeTeil(name, 'business', business, settings_js_1.POS_BUSINESS_DEFAULTS, settings_js_1.POS_BUSINESS_VALUES);
|
|
48
|
+
const saetze = eigenerWert(business, 'vatRates');
|
|
49
|
+
if (saetze !== undefined) {
|
|
50
|
+
const karte = objekt(saetze);
|
|
51
|
+
// Unter /v3 prueft der Server die uebergebene Karte fuer sich: ein
|
|
52
|
+
// einzelner Schalter wie {20: false} waere dort "kein Satz an".
|
|
53
|
+
if (!karte || !Object.values(karte).some((an) => an === true)) {
|
|
54
|
+
throw new errors_js_1.KasseneckValidationError(name, 'business.vatRates: mindestens ein Steuersatz muss an sein (immer die ganze Karte senden)', 'request');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const daten = await transport(name, { business });
|
|
58
|
+
return (0, settings_js_1.mergePosSettings)(settings_js_1.POS_BUSINESS_DEFAULTS, objekt(daten?.business));
|
|
59
|
+
}
|
|
60
|
+
/** Geraete-Einstellungen schreiben (Recht `layout`); liefert den gemischten Stand. */
|
|
61
|
+
async function setMyRegisterDeviceSettings(transport, deviceId, device) {
|
|
62
|
+
const name = 'setMyRegisterDeviceSettings';
|
|
63
|
+
if (typeof deviceId !== 'string' || deviceId.trim() === '') {
|
|
64
|
+
throw new errors_js_1.KasseneckValidationError(name, 'deviceId fehlt', 'request');
|
|
65
|
+
}
|
|
66
|
+
pruefeTeil(name, 'device', device, settings_js_1.POS_DEVICE_DEFAULTS, settings_js_1.POS_DEVICE_VALUES);
|
|
67
|
+
const tasten = eigenerWert(device, 'shortcuts');
|
|
68
|
+
if (tasten !== undefined) {
|
|
69
|
+
const karte = objekt(tasten);
|
|
70
|
+
if (!karte)
|
|
71
|
+
throw new errors_js_1.KasseneckValidationError(name, 'device.shortcuts: keine Tastenkarte', 'request');
|
|
72
|
+
const aktionen = new Set(settings_js_1.POS_SHORTCUT_ACTIONS);
|
|
73
|
+
for (const aktion of Object.keys(karte)) {
|
|
74
|
+
if (karte[aktion] === undefined)
|
|
75
|
+
continue;
|
|
76
|
+
if (!aktionen.has(aktion)) {
|
|
77
|
+
throw new errors_js_1.KasseneckValidationError(name, `device.shortcuts.${aktion}: unbekannte Aktion`, 'request');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Doppelbelegung innerhalb der gesendeten Karte; posSettingsChanges sendet
|
|
81
|
+
// bei jeder Tastenaenderung die ganze Karte, so ist das die ganze Belegung.
|
|
82
|
+
const konflikt = (0, settings_js_1.posShortcutConflict)(karte);
|
|
83
|
+
if (konflikt) {
|
|
84
|
+
throw new errors_js_1.KasseneckValidationError(name, `device.shortcuts.${konflikt.action}: Taste ${konflikt.key} schon belegt (${konflikt.heldBy})`, 'request');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const daten = await transport(name, { deviceId, device });
|
|
88
|
+
return (0, settings_js_1.mergePosSettings)(settings_js_1.POS_DEVICE_DEFAULTS, objekt(daten?.device));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Bild-Logo der Kasse hochladen oder entfernen (Recht `layout`). Liefert die
|
|
92
|
+
* neue `logoImage`-Adresse, nach dem Entfernen `''`. Formatfehler meldet der
|
|
93
|
+
* Server als `logo_invalid_type`, `logo_too_large` oder `logo_invalid`.
|
|
94
|
+
*/
|
|
95
|
+
async function setMyPosLogo(transport, options) {
|
|
96
|
+
const name = 'setMyKasseLogo';
|
|
97
|
+
const params = {};
|
|
98
|
+
if ('remove' in options && options.remove === true) {
|
|
99
|
+
params.remove = true;
|
|
100
|
+
}
|
|
101
|
+
else if ('image' in options && typeof options.image === 'string' && options.image !== '') {
|
|
102
|
+
params.image = options.image;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
throw new errors_js_1.KasseneckValidationError(name, 'image fehlt (oder remove: true)', 'request');
|
|
106
|
+
}
|
|
107
|
+
const daten = await transport(name, params);
|
|
108
|
+
const bild = daten?.logoImage;
|
|
109
|
+
if (typeof bild !== 'string') {
|
|
110
|
+
throw new errors_js_1.KasseneckValidationError(name, 'Antwort enthaelt kein Feld "logoImage"', 'response');
|
|
111
|
+
}
|
|
112
|
+
return bild;
|
|
113
|
+
}
|
|
114
|
+
/** Eigene Eigenschaft oder `undefined`, nie eine geerbte (`constructor`, `toString`). */
|
|
115
|
+
function eigenerWert(block, k) {
|
|
116
|
+
return Object.prototype.hasOwnProperty.call(block, k) ? block[k] : undefined;
|
|
117
|
+
}
|
|
118
|
+
function objekt(wert) {
|
|
119
|
+
return wert !== null && typeof wert === 'object' && !Array.isArray(wert) ? wert : null;
|
|
120
|
+
}
|
|
121
|
+
function pruefeTeil(name, teil, block, standard, werte) {
|
|
122
|
+
const karte = objekt(block);
|
|
123
|
+
// Ein Feld mit `undefined` sendet JSON gar nicht: es zaehlt weder als
|
|
124
|
+
// Einstellung noch wird es geprueft.
|
|
125
|
+
const gesendet = karte ? Object.entries(karte).filter(([, wert]) => wert !== undefined) : [];
|
|
126
|
+
if (gesendet.length === 0) {
|
|
127
|
+
throw new errors_js_1.KasseneckValidationError(name, `${teil}: keine Einstellungen uebergeben`, 'request');
|
|
128
|
+
}
|
|
129
|
+
for (const [schluessel, wert] of gesendet) {
|
|
130
|
+
if (!Object.prototype.hasOwnProperty.call(standard, schluessel)) {
|
|
131
|
+
throw new errors_js_1.KasseneckValidationError(name, `${teil}.${schluessel}: unbekanntes Feld`, 'request');
|
|
132
|
+
}
|
|
133
|
+
const erlaubt = Object.prototype.hasOwnProperty.call(werte, schluessel) ? werte[schluessel] : undefined;
|
|
134
|
+
if (erlaubt && !erlaubt.includes(wert)) {
|
|
135
|
+
// Kein Altwert: dann ein Wert, den der Server kennt und dieses Paket
|
|
136
|
+
// nicht. Er kam beim Lesen herein; wer den ganzen Block zurueckschickt,
|
|
137
|
+
// braucht den Hinweis auf den richtigen Weg.
|
|
138
|
+
const hinweis = (0, settings_js_1._istAltwert0x)(schluessel, wert)
|
|
139
|
+
? 'ungueltiger Wert (innere Form 0.x)'
|
|
140
|
+
: 'ungueltiger Wert (vom Server unbekannt? nur geaenderte Felder senden: posSettingsChanges)';
|
|
141
|
+
throw new errors_js_1.KasseneckValidationError(name, `${teil}.${schluessel}: ${hinweis}`, 'request');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { InternerTransport } from '../client/aufrufe.js';
|
|
2
|
+
import type { ReceiptLayout } from '../receipt/layout.js';
|
|
3
|
+
import type { PrintLogo } from '../receipt/layout-escpos.js';
|
|
4
|
+
/**
|
|
5
|
+
* Netzwerk-Bondrucker ueber Epson "Server Direct Print": das Backend fuehrt
|
|
6
|
+
* je Konto Drucker mit einer geheimen Abhol-URL; die Kasse legt Druckjobs
|
|
7
|
+
* aus einem Zeilenmodell an, der Drucker holt sie selbst ab (alle paar
|
|
8
|
+
* Sekunden) und meldet das Ergebnis. So druckt jeder Browser -- ohne lokale
|
|
9
|
+
* Software. Das ePOS-XML baut das Backend aus dem Zeichenraster (ein Setzweg).
|
|
10
|
+
*/
|
|
11
|
+
export interface NetworkPrinter {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
/** Art des Druckers; heute nur `epson-sdp`. */
|
|
15
|
+
kind: string;
|
|
16
|
+
paperSize: 'mm58' | 'mm80';
|
|
17
|
+
active: boolean;
|
|
18
|
+
createdAt: number | null;
|
|
19
|
+
/** Letzter Abruf des Druckers (ms); null = noch nie verbunden. */
|
|
20
|
+
lastSeenAt: number | null;
|
|
21
|
+
lastResult: {
|
|
22
|
+
success: boolean;
|
|
23
|
+
code: string | null;
|
|
24
|
+
at: number;
|
|
25
|
+
} | null;
|
|
26
|
+
/** Kennung, die der Drucker selbst schickt (Feld ID im Drucker-Menue). */
|
|
27
|
+
printerSerial: string | null;
|
|
28
|
+
/** Abhol-URL fuer das Drucker-Menue, nur fuer den Chef bzw. das Konto. */
|
|
29
|
+
sdpUrl?: string;
|
|
30
|
+
}
|
|
31
|
+
/** Stand eines Druckjobs (Katalog `DRUCKJOB`). */
|
|
32
|
+
export declare const PRINT_JOB_STATUSES: readonly ["pending", "sent", "printed", "failed", "expired"];
|
|
33
|
+
/**
|
|
34
|
+
* Stand eines Druckjobs; `'unknown'` = der Server nannte einen Stand, den dieses
|
|
35
|
+
* Paket nicht kennt (oder keinen). Er gilt als Ende der Abfrage (siehe
|
|
36
|
+
* [isPrintJobFinished]): nie als gedruckt, aber auch kein Abfragen bis zum
|
|
37
|
+
* Zeitlimit.
|
|
38
|
+
*/
|
|
39
|
+
export type PrintJobStatus = typeof PRINT_JOB_STATUSES[number] | 'unknown';
|
|
40
|
+
/** Endet die Abfrage bei diesem Stand? `printed`, `failed`, `expired` und `unknown`. */
|
|
41
|
+
export declare function isPrintJobFinished(status: PrintJobStatus): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Bekannte Werte fuer `source` (Katalog `DRUCK_QUELLE`): die Kasse oder das
|
|
44
|
+
* Panel. Der Server nimmt Freitext bis 40 Zeichen an und uebersetzt nur diese
|
|
45
|
+
* beiden.
|
|
46
|
+
*/
|
|
47
|
+
export declare const PRINT_JOB_SOURCES: readonly ["pos", "panel"];
|
|
48
|
+
export type PrintJobSource = typeof PRINT_JOB_SOURCES[number] | (string & {});
|
|
49
|
+
export interface PrintJob {
|
|
50
|
+
jobId: string;
|
|
51
|
+
status: PrintJobStatus;
|
|
52
|
+
createdAt?: number | null;
|
|
53
|
+
sentAt?: number | null;
|
|
54
|
+
result: {
|
|
55
|
+
success: boolean;
|
|
56
|
+
code: string | null;
|
|
57
|
+
status?: string | null;
|
|
58
|
+
at?: number;
|
|
59
|
+
} | null;
|
|
60
|
+
}
|
|
61
|
+
export declare function listMyPrinters(transport: InternerTransport): Promise<NetworkPrinter[]>;
|
|
62
|
+
export interface CreatePrintJobOptions {
|
|
63
|
+
printerId: string;
|
|
64
|
+
layout: ReceiptLayout;
|
|
65
|
+
receiptId?: string;
|
|
66
|
+
title?: string;
|
|
67
|
+
source?: PrintJobSource;
|
|
68
|
+
/** Firmenlogo als fertiges Rasterbild (`rasterizeLogo`); der Server dekodiert keine Bilder. */
|
|
69
|
+
logo?: PrintLogo | null;
|
|
70
|
+
/**
|
|
71
|
+
* Das Kasseneck-Logo am Ende (Konto-Flag `kreiseck_logo`). Heisst wie bei
|
|
72
|
+
* den Druckwegen (`escPosLayoutBytes`, `eposPrintXml`, `receiptSheet`), damit
|
|
73
|
+
* dieselben Optionen ueberall wirken; am Draht heisst der Wert `brand`.
|
|
74
|
+
*/
|
|
75
|
+
brandMark?: boolean;
|
|
76
|
+
}
|
|
77
|
+
export declare function createPrintJob(transport: InternerTransport, o: CreatePrintJobOptions): Promise<PrintJob>;
|
|
78
|
+
/**
|
|
79
|
+
* Stand eines Druckjobs abfragen. Der Aufrufer fragt, bis [isPrintJobFinished]
|
|
80
|
+
* wahr ist, und begrenzt die Abfrage trotzdem selbst (Anzahl oder Zeit): ein
|
|
81
|
+
* Drucker, der nie abholt, bleibt `pending`.
|
|
82
|
+
*/
|
|
83
|
+
export declare function getPrintJob(transport: InternerTransport, o: {
|
|
84
|
+
printerId: string;
|
|
85
|
+
jobId: string;
|
|
86
|
+
}): Promise<PrintJob>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PRINT_JOB_SOURCES = exports.PRINT_JOB_STATUSES = void 0;
|
|
4
|
+
exports.isPrintJobFinished = isPrintJobFinished;
|
|
5
|
+
exports.listMyPrinters = listMyPrinters;
|
|
6
|
+
exports.createPrintJob = createPrintJob;
|
|
7
|
+
exports.getPrintJob = getPrintJob;
|
|
8
|
+
const index_js_1 = require("../printing/index.js");
|
|
9
|
+
/** Stand eines Druckjobs (Katalog `DRUCKJOB`). */
|
|
10
|
+
exports.PRINT_JOB_STATUSES = ['pending', 'sent', 'printed', 'failed', 'expired'];
|
|
11
|
+
/** Endet die Abfrage bei diesem Stand? `printed`, `failed`, `expired` und `unknown`. */
|
|
12
|
+
function isPrintJobFinished(status) {
|
|
13
|
+
return status === 'printed' || status === 'failed' || status === 'expired' || status === 'unknown';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Bekannte Werte fuer `source` (Katalog `DRUCK_QUELLE`): die Kasse oder das
|
|
17
|
+
* Panel. Der Server nimmt Freitext bis 40 Zeichen an und uebersetzt nur diese
|
|
18
|
+
* beiden.
|
|
19
|
+
*/
|
|
20
|
+
exports.PRINT_JOB_SOURCES = ['pos', 'panel'];
|
|
21
|
+
const text = (v) => (typeof v === 'string' && v ? v : null);
|
|
22
|
+
const zahl = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : null);
|
|
23
|
+
const STATUS = new Set(exports.PRINT_JOB_STATUSES);
|
|
24
|
+
/**
|
|
25
|
+
* Stand eines Jobs aus der Antwort. Ein Wert ausserhalb des Katalogs (ein
|
|
26
|
+
* kuenftiger Endstand wie `cancelled`) oder gar keiner wird `'unknown'`:
|
|
27
|
+
* sichtbar, nie als gedruckt gewertet, und die Abfrage endet.
|
|
28
|
+
*/
|
|
29
|
+
function status(v) {
|
|
30
|
+
return typeof v === 'string' && STATUS.has(v) ? v : 'unknown';
|
|
31
|
+
}
|
|
32
|
+
async function listMyPrinters(transport) {
|
|
33
|
+
const daten = await transport('listMyPrinters', {});
|
|
34
|
+
return (Array.isArray(daten?.printers) ? daten.printers : []).map((r) => {
|
|
35
|
+
const d = (r ?? {});
|
|
36
|
+
const e = d.lastResult && typeof d.lastResult === 'object' ? d.lastResult : null;
|
|
37
|
+
return {
|
|
38
|
+
id: String(d.id ?? ''), name: String(d.name ?? ''), kind: String(d.kind ?? 'epson-sdp'), paperSize: d.paperSize === 'mm58' ? 'mm58' : 'mm80',
|
|
39
|
+
active: d.active !== false, createdAt: zahl(d.createdAt), lastSeenAt: zahl(d.lastSeenAt),
|
|
40
|
+
lastResult: e ? { success: e.success === true, code: text(e.code), at: zahl(e.at) ?? 0 } : null,
|
|
41
|
+
printerSerial: text(d.printerSerial),
|
|
42
|
+
...(text(d.sdpUrl) ? { sdpUrl: String(d.sdpUrl) } : {}),
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
async function createPrintJob(transport, o) {
|
|
47
|
+
const params = { printerId: o.printerId, layout: o.layout };
|
|
48
|
+
if (o.receiptId)
|
|
49
|
+
params.receiptId = o.receiptId;
|
|
50
|
+
if (o.title)
|
|
51
|
+
params.title = o.title;
|
|
52
|
+
if (o.source)
|
|
53
|
+
params.source = o.source;
|
|
54
|
+
if (o.logo) {
|
|
55
|
+
params.logo = {
|
|
56
|
+
scale: o.logo.size, pxWidth: o.logo.pixelWidth, pxHeight: o.logo.pixelHeight,
|
|
57
|
+
width: o.logo.raster.width, height: o.logo.raster.height, rows: (0, index_js_1.rasterRowsBase64)(o.logo.raster),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (o.brandMark === true)
|
|
61
|
+
params.brand = true;
|
|
62
|
+
const daten = await transport('createPrintJob', params);
|
|
63
|
+
return { jobId: String(daten?.jobId ?? ''), status: status(daten?.status), result: null };
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Stand eines Druckjobs abfragen. Der Aufrufer fragt, bis [isPrintJobFinished]
|
|
67
|
+
* wahr ist, und begrenzt die Abfrage trotzdem selbst (Anzahl oder Zeit): ein
|
|
68
|
+
* Drucker, der nie abholt, bleibt `pending`.
|
|
69
|
+
*/
|
|
70
|
+
async function getPrintJob(transport, o) {
|
|
71
|
+
const d = await transport('getPrintJob', { printerId: o.printerId, jobId: o.jobId });
|
|
72
|
+
const e = d?.result && typeof d.result === 'object' ? d.result : null;
|
|
73
|
+
return {
|
|
74
|
+
jobId: String(d?.jobId ?? o.jobId), status: status(d?.status),
|
|
75
|
+
createdAt: zahl(d?.createdAt), sentAt: zahl(d?.sentAt),
|
|
76
|
+
result: e ? { success: e.success === true, code: text(e.code), status: text(e.status), at: zahl(e.at) ?? undefined } : null,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { KasseneckApiError } from '../client/errors.js';
|
|
2
|
+
/**
|
|
3
|
+
* Fehler der Kassen-Aufrufe um den Verkauf herum (Einstellungen, Logo,
|
|
4
|
+
* Artikel, Drucker, Trinkgeld-Empfaenger) auswerten: am `code`, nie am Text.
|
|
5
|
+
* Belege, Storno und Belegmail haben eigene Listen (`RECEIPT_ERROR_CODES`,
|
|
6
|
+
* `CANCELLATION_ERROR_CODES`, `RECEIPT_EMAIL_ERROR_CODES`), die Anmeldung
|
|
7
|
+
* `REGISTER_ERROR_CODES` im Unterpfad `./register`.
|
|
8
|
+
*
|
|
9
|
+
* Abgeleitet aus dem Vertrags-Export (Fehlerfaelle dieser zehn Endpunkte in
|
|
10
|
+
* `fixtures/v3/antworten/kasse.json` und ihre Handler-Codes); ein Test haelt
|
|
11
|
+
* die Liste deckungsgleich. `validation` traegt `data.errors[]` mit dem
|
|
12
|
+
* aeusseren Feldpfad (`business.theme`, `device.shortcuts.splitPayment`).
|
|
13
|
+
* Dazu kommen die Codes, die der Rand auf jedem Kassen-Endpunkt erzeugen kann:
|
|
14
|
+
* die Anmelde- und Pruefcodes (`errorCodes.auth` ohne die sieben des
|
|
15
|
+
* Partner-Zugangs, z. B. `register_user_not_found`, wenn der Chef einen
|
|
16
|
+
* angemeldeten Benutzer loescht) und die des Rands selbst (`errorCodes.edge`:
|
|
17
|
+
* `validation`, `not_found`, `internal_translation_error`, `dialect_mismatch`,
|
|
18
|
+
* `response_translation_failed`). Ein Code, der in keiner Liste steht, bleibt
|
|
19
|
+
* ueber `KasseneckApiError.code` lesbar; die Kasse braucht dafuer einen
|
|
20
|
+
* Rueckfallzweig.
|
|
21
|
+
*/
|
|
22
|
+
export declare const POS_ERROR_CODES: readonly ["account_not_found", "admin_required", "cashregister_not_assigned", "cashregister_not_found", "cashregister_token_invalid", "cashregister_token_missing", "device_not_found", "dialect_mismatch", "internal_translation_error", "live_not_enabled", "logo_invalid", "logo_invalid_type", "logo_too_large", "method_not_allowed", "mfa_required", "module_inactive", "not_found", "not_permitted", "print_job_not_found", "print_layout_failed", "printer_not_found", "register_user_no_business", "register_user_not_allowed", "register_user_not_found", "response_translation_failed", "session_expired", "session_other_cashregister", "unauthorized", "user_disabled", "user_verification_failed", "validation", "route_missing"];
|
|
23
|
+
export type PosErrorCode = typeof POS_ERROR_CODES[number];
|
|
24
|
+
export declare function isPosErrorCode(value: unknown): value is PosErrorCode;
|
|
25
|
+
/** Der Code eines geworfenen Fehlers, wenn er in [POS_ERROR_CODES] steht; sonst `undefined`. */
|
|
26
|
+
export declare function posErrorCode(error: unknown): PosErrorCode | undefined;
|
|
27
|
+
/** Kurzform fuer `catch (e) { if (isPosError(e, 'logo_too_large')) … }`. */
|
|
28
|
+
export declare function isPosError(error: unknown, code?: PosErrorCode): error is KasseneckApiError;
|
|
29
|
+
/** Ein Feldfehler aus `data.errors[]` einer `validation`-Antwort. */
|
|
30
|
+
export interface PosFieldError {
|
|
31
|
+
/** Aeusserer Feldpfad, z. B. `business.vatRates` oder `device.shortcuts.cash`. */
|
|
32
|
+
field: string;
|
|
33
|
+
message: string;
|
|
34
|
+
}
|
|
35
|
+
/** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
|
|
36
|
+
export declare function posFieldErrors(error: unknown): PosFieldError[];
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POS_ERROR_CODES = void 0;
|
|
4
|
+
exports.isPosErrorCode = isPosErrorCode;
|
|
5
|
+
exports.posErrorCode = posErrorCode;
|
|
6
|
+
exports.isPosError = isPosError;
|
|
7
|
+
exports.posFieldErrors = posFieldErrors;
|
|
8
|
+
const errors_js_1 = require("../client/errors.js");
|
|
9
|
+
/**
|
|
10
|
+
* Fehler der Kassen-Aufrufe um den Verkauf herum (Einstellungen, Logo,
|
|
11
|
+
* Artikel, Drucker, Trinkgeld-Empfaenger) auswerten: am `code`, nie am Text.
|
|
12
|
+
* Belege, Storno und Belegmail haben eigene Listen (`RECEIPT_ERROR_CODES`,
|
|
13
|
+
* `CANCELLATION_ERROR_CODES`, `RECEIPT_EMAIL_ERROR_CODES`), die Anmeldung
|
|
14
|
+
* `REGISTER_ERROR_CODES` im Unterpfad `./register`.
|
|
15
|
+
*
|
|
16
|
+
* Abgeleitet aus dem Vertrags-Export (Fehlerfaelle dieser zehn Endpunkte in
|
|
17
|
+
* `fixtures/v3/antworten/kasse.json` und ihre Handler-Codes); ein Test haelt
|
|
18
|
+
* die Liste deckungsgleich. `validation` traegt `data.errors[]` mit dem
|
|
19
|
+
* aeusseren Feldpfad (`business.theme`, `device.shortcuts.splitPayment`).
|
|
20
|
+
* Dazu kommen die Codes, die der Rand auf jedem Kassen-Endpunkt erzeugen kann:
|
|
21
|
+
* die Anmelde- und Pruefcodes (`errorCodes.auth` ohne die sieben des
|
|
22
|
+
* Partner-Zugangs, z. B. `register_user_not_found`, wenn der Chef einen
|
|
23
|
+
* angemeldeten Benutzer loescht) und die des Rands selbst (`errorCodes.edge`:
|
|
24
|
+
* `validation`, `not_found`, `internal_translation_error`, `dialect_mismatch`,
|
|
25
|
+
* `response_translation_failed`). Ein Code, der in keiner Liste steht, bleibt
|
|
26
|
+
* ueber `KasseneckApiError.code` lesbar; die Kasse braucht dafuer einen
|
|
27
|
+
* Rueckfallzweig.
|
|
28
|
+
*/
|
|
29
|
+
exports.POS_ERROR_CODES = Object.freeze([
|
|
30
|
+
'account_not_found',
|
|
31
|
+
'admin_required',
|
|
32
|
+
'cashregister_not_assigned',
|
|
33
|
+
'cashregister_not_found',
|
|
34
|
+
'cashregister_token_invalid',
|
|
35
|
+
'cashregister_token_missing',
|
|
36
|
+
'device_not_found',
|
|
37
|
+
'dialect_mismatch',
|
|
38
|
+
'internal_translation_error',
|
|
39
|
+
'live_not_enabled',
|
|
40
|
+
'logo_invalid',
|
|
41
|
+
'logo_invalid_type',
|
|
42
|
+
'logo_too_large',
|
|
43
|
+
'method_not_allowed',
|
|
44
|
+
'mfa_required',
|
|
45
|
+
'module_inactive',
|
|
46
|
+
'not_found',
|
|
47
|
+
'not_permitted',
|
|
48
|
+
'print_job_not_found',
|
|
49
|
+
'print_layout_failed',
|
|
50
|
+
'printer_not_found',
|
|
51
|
+
'register_user_no_business',
|
|
52
|
+
'register_user_not_allowed',
|
|
53
|
+
'register_user_not_found',
|
|
54
|
+
'response_translation_failed',
|
|
55
|
+
'session_expired',
|
|
56
|
+
'session_other_cashregister',
|
|
57
|
+
'unauthorized',
|
|
58
|
+
'user_disabled',
|
|
59
|
+
'user_verification_failed',
|
|
60
|
+
'validation',
|
|
61
|
+
// Code des Pakets (CLIENT_ERROR_CODES): HTML statt Backend, der Aufruf kam nie an
|
|
62
|
+
'route_missing',
|
|
63
|
+
]);
|
|
64
|
+
const BEKANNT = new Set(exports.POS_ERROR_CODES);
|
|
65
|
+
function isPosErrorCode(value) {
|
|
66
|
+
return typeof value === 'string' && BEKANNT.has(value);
|
|
67
|
+
}
|
|
68
|
+
/** Der Code eines geworfenen Fehlers, wenn er in [POS_ERROR_CODES] steht; sonst `undefined`. */
|
|
69
|
+
function posErrorCode(error) {
|
|
70
|
+
if (!(error instanceof errors_js_1.KasseneckApiError))
|
|
71
|
+
return undefined;
|
|
72
|
+
return isPosErrorCode(error.code) ? error.code : undefined;
|
|
73
|
+
}
|
|
74
|
+
/** Kurzform fuer `catch (e) { if (isPosError(e, 'logo_too_large')) … }`. */
|
|
75
|
+
function isPosError(error, code) {
|
|
76
|
+
const gefunden = posErrorCode(error);
|
|
77
|
+
return gefunden !== undefined && (code === undefined || gefunden === code);
|
|
78
|
+
}
|
|
79
|
+
/** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
|
|
80
|
+
function posFieldErrors(error) {
|
|
81
|
+
if (!(error instanceof errors_js_1.KasseneckApiError))
|
|
82
|
+
return [];
|
|
83
|
+
const roh = error.details['errors'];
|
|
84
|
+
if (!Array.isArray(roh))
|
|
85
|
+
return [];
|
|
86
|
+
const raus = [];
|
|
87
|
+
for (const eintrag of roh) {
|
|
88
|
+
if (eintrag === null || typeof eintrag !== 'object')
|
|
89
|
+
continue;
|
|
90
|
+
const { field, message } = eintrag;
|
|
91
|
+
if (typeof field === 'string' && typeof message === 'string')
|
|
92
|
+
raus.push({ field, message });
|
|
93
|
+
}
|
|
94
|
+
return raus;
|
|
95
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kachel-Kasse: Einstellungen, Artikelgruppen/Artikel fuer Kacheln,
|
|
3
|
+
* Rabattverteilung, Drucker, Trinkgeld-Empfaenger. Die Aufrufe heissen 1:1 wie
|
|
4
|
+
* die Backend-Functions (die Rewrites-Waechter der Web-App leiten daraus ab)
|
|
5
|
+
* und sprechen den Kassenweg `/api/v3` (Schluessel und Werte englisch).
|
|
6
|
+
*/
|
|
7
|
+
export { type PosTheme, type PosFontSize, type PosWatermark, type PosQuantity, type PosTipMode, type PosCheckoutMode, type PosCardProvider, type PosReceiptOutput, type PosShortcutAction, type PosShortcutMap, POS_SHORTCUT_ACTIONS, POS_SHORTCUT_DEFAULTS, type PosLayout, type PosCategoryPosition, type PosTileHeight, type PosPrinterType, type PosTerminalVia, type PosTerminalType, type PosPaperSize, type PosCodePage, type PosCut, type PosDrawerAutoOpen, type PosQrMode, type PosLogoSize, type PosSettingsFontSize, type PosTileStyle, type PosAutoLogoutMinutes, type PosDiscount, type PosWatermarkSide, type PosWatermarkStrength, type PosLogoScale, type PosWatermarkScale, type PosDoneScreenSeconds, type PosToggleMap, type PosBusinessSettings, type PosDeviceSettings, type PosSettings, POS_BUSINESS_DEFAULTS, POS_DEVICE_DEFAULTS, POS_BUSINESS_VALUES, POS_DEVICE_VALUES, mergePosSettings, sanitizePosSettings, unknownPosSettingValues, posSettingsChanges, type PosOpen, POS_SHORTCUT_SHARED_PAIRS, posShortcutConflict, THEME, FONT_SIZE, WATERMARK, QUANTITY, TIP_MODE, CHECKOUT_MODE, CARD_PROVIDER, RECEIPT_OUTPUT, LAYOUT, CATEGORY_POSITION, TILE_HEIGHT, PRINTER_TYPE, TERMINAL_VIA, TERMINAL_TYPE, PAPER_SIZE, CODE_PAGE, CUT, DRAWER_AUTO_OPEN, QR_MODE, LOGO_SIZE, SETTINGS_FONT_SIZE, TILE_STYLE, AUTO_LOGOUT_MINUTES, DISCOUNT, WATERMARK_SIDE, WATERMARK_STRENGTH, LOGO_SCALE, WATERMARK_SCALE, DONE_SCREEN_SECONDS, } from './settings.js';
|
|
8
|
+
export { type ArticleGroup, type ArticleGroupPayload, fromArticleGroupPayload, type PosArticle, type PosArticlePayload, fromPosArticlePayload, listMyArticleGroups, listMyArticles, QUANTITY_RULES, type QuantityRule, type QuantityDefaults, quantityRuleForUnit, quantityDefaults, allowedQuantity, } from './artikel.js';
|
|
9
|
+
export { getPosSettings, setMyPosSettings, setMyRegisterDeviceSettings, setMyPosLogo, posSettingsFromWire, type SetMyPosLogoOptions, } from './client.js';
|
|
10
|
+
export { POS_ERROR_CODES, type PosErrorCode, isPosErrorCode, posErrorCode, isPosError, type PosFieldError, posFieldErrors, } from './errors.js';
|
|
11
|
+
export { distributeDiscount } from '../receipt/discount.js';
|
|
12
|
+
export { cancelScopeOf, receiptsScopeOf, type RegisterScope, type RegisterUserPerms } from '../register/pairing.js';
|
|
13
|
+
export { type NetworkPrinter, type PrintJob, type PrintJobStatus, PRINT_JOB_STATUSES, type PrintJobSource, PRINT_JOB_SOURCES, isPrintJobFinished, type CreatePrintJobOptions, listMyPrinters, createPrintJob, getPrintJob, } from './drucker.js';
|
|
14
|
+
export { listMyTipRecipients } from './trinkgeld.js';
|
|
15
|
+
export { MESSAGES, ERROR_RULES, messageText, messageAppliesTo, RECEIPT_EMAIL_ERROR_MESSAGES, receiptEmailErrorMessage, CANCELLATION_PAYMENT_ERROR_MESSAGES, cancellationPaymentErrorMessage, LABELS, labelText, type TextEntry, type MessageKey, type ErrorKind, type Surface, type ReceiptEmailMessageCode, type CancellationPaymentMessageCode, type LabelKey, } from './texte.js';
|