@kreiseck/kasseneck-api 0.30.0 → 1.0.0-rc.1
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 +433 -0
- package/README.de.md +11 -7
- package/README.md +486 -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 +78 -19
- package/dist/cjs/client/errors.js +107 -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 +214 -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 +222 -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/{esm/rechnung → cjs/invoice}/vertrag.d.ts +97 -71
- package/dist/cjs/{rechnung → invoice}/vertrag.js +144 -82
- package/dist/cjs/models/cancellation.d.ts +53 -21
- package/dist/cjs/models/cancellation.js +94 -42
- 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-payment.d.ts +2 -1
- 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 +28 -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-hps/transaction-response.js +28 -28
- package/dist/cjs/payments/hobex.d.ts +2 -2
- package/dist/cjs/payments/hobex.js +4 -4
- package/dist/cjs/payments/stripe.d.ts +2 -2
- package/dist/cjs/payments/stripe.js +4 -4
- 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 +78 -19
- package/dist/esm/client/errors.js +105 -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 +213 -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 +221 -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/{cjs/rechnung → esm/invoice}/vertrag.d.ts +97 -71
- package/dist/esm/{rechnung → invoice}/vertrag.js +143 -81
- package/dist/esm/models/cancellation.d.ts +53 -21
- package/dist/esm/models/cancellation.js +90 -41
- 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-payment.d.ts +2 -1
- 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 +28 -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-hps/transaction-response.js +28 -28
- package/dist/esm/payments/hobex.d.ts +2 -2
- package/dist/esm/payments/hobex.js +4 -4
- package/dist/esm/payments/stripe.d.ts +2 -2
- package/dist/esm/payments/stripe.js +4 -4
- 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 +40 -40
- 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/pos-texts.json +957 -0
- 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} +10 -8
- 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 -79
- package/dist/cjs/kasse/settings.d.ts +0 -227
- package/dist/cjs/kasse/settings.js +0 -169
- package/dist/cjs/kasse/texte.d.ts +0 -458
- package/dist/cjs/kasse/texte.js +0 -244
- 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 -227
- package/dist/esm/kasse/settings.js +0 -165
- package/dist/esm/kasse/texte.d.ts +0 -458
- package/dist/esm/kasse/texte.js +0 -238
- 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/kasse-texte.json +0 -513
- package/fixtures/oberflaeche.json +0 -557
- 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,90 @@
|
|
|
1
|
+
import type { InternerTransport } from '../client/aufrufe.js';
|
|
2
|
+
/**
|
|
3
|
+
* Artikelgruppen (Kategorien der Kachel-Kasse) und Artikel in der Form, die
|
|
4
|
+
* die Kacheln brauchen, Backend: `article-endpoints.js`
|
|
5
|
+
* (`listMyArticleGroups`, `listMyArticles` mit `groupId`/`tile`).
|
|
6
|
+
*/
|
|
7
|
+
export interface ArticleGroup {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
/** #RRGGBB */
|
|
11
|
+
color: string;
|
|
12
|
+
/** Kategorie-Symbol (Emoji, hoechstens zwei Zeichen) oder null. */
|
|
13
|
+
symbol: string | null;
|
|
14
|
+
sort: number;
|
|
15
|
+
vatRate: number | null;
|
|
16
|
+
}
|
|
17
|
+
export interface ArticleGroupPayload {
|
|
18
|
+
id?: string | null;
|
|
19
|
+
name?: string | null;
|
|
20
|
+
color?: string | null;
|
|
21
|
+
symbol?: string | null;
|
|
22
|
+
sort?: number | null;
|
|
23
|
+
vatRate?: number | null;
|
|
24
|
+
}
|
|
25
|
+
export declare function fromArticleGroupPayload(p: ArticleGroupPayload): ArticleGroup;
|
|
26
|
+
/**
|
|
27
|
+
* Mengenregel eines Artikels (Draht `quantityRule`): `piece` = ganze Stueck
|
|
28
|
+
* (1, 2, 3 ...), `decimal` = Kommamenge in der Einheit (0,250 kg, 1,5 m).
|
|
29
|
+
* Beleg und DEP bleiben ganzzahlig: eine Kommamenge wird an der Kasse als EINE
|
|
30
|
+
* Position mit ausgerechnetem Betrag gebucht, die Bezeichnung traegt die Menge
|
|
31
|
+
* („Wurst 0,250 kg“). Siehe [quantityRuleForUnit] fuer die Vorgabe je Einheit.
|
|
32
|
+
*/
|
|
33
|
+
export declare const QUANTITY_RULES: readonly ["piece", "decimal"];
|
|
34
|
+
export type QuantityRule = typeof QUANTITY_RULES[number];
|
|
35
|
+
export interface QuantityDefaults {
|
|
36
|
+
rule: QuantityRule;
|
|
37
|
+
/** Kasse fragt beim Antippen nach der Menge (Wurst nach Gewicht: ja; Semmel: nein). */
|
|
38
|
+
ask: boolean;
|
|
39
|
+
/** Nachkommastellen bei `decimal`. */
|
|
40
|
+
decimals: number;
|
|
41
|
+
}
|
|
42
|
+
/** Vorgabe je Einheit: was der Betrieb bei einem neuen Artikel bekommt und aendern darf. */
|
|
43
|
+
export declare function quantityRuleForUnit(unit: string | null | undefined): QuantityDefaults;
|
|
44
|
+
/** Wirksame Regel eines Artikels: gespeicherte Angabe schlaegt die Vorgabe der Einheit. */
|
|
45
|
+
export declare function quantityDefaults(a: Pick<PosArticle, 'unit' | 'quantityRule' | 'askQuantity'>): QuantityDefaults;
|
|
46
|
+
/** Artikel, wie ihn die Kasse fuer Kacheln und Belegpositionen braucht. */
|
|
47
|
+
export interface PosArticle {
|
|
48
|
+
id: string;
|
|
49
|
+
name: string;
|
|
50
|
+
unitPriceCents: number | null;
|
|
51
|
+
vatRate: number | null;
|
|
52
|
+
unit: string;
|
|
53
|
+
groupId: string | null;
|
|
54
|
+
/** Erloesgruppe (Buchhaltung); null = keine. */
|
|
55
|
+
revenueGroupId: string | null;
|
|
56
|
+
/** Kachel sichtbar (Draht `tile.visible`, fehlt = sichtbar). */
|
|
57
|
+
visible: boolean;
|
|
58
|
+
/** Reihenfolge der Kachel (Draht `tile.sort`). */
|
|
59
|
+
sort: number;
|
|
60
|
+
active: boolean;
|
|
61
|
+
/** Gespeicherte Mengenregel; null = Vorgabe der Einheit. */
|
|
62
|
+
quantityRule: QuantityRule | null;
|
|
63
|
+
/** Gespeichert: Kasse fragt nach der Menge; null = Vorgabe der Einheit. */
|
|
64
|
+
askQuantity: boolean | null;
|
|
65
|
+
/** Hoechstmenge je Beleg (bei kg/l/m auch Kommazahl); null = keine Grenze. */
|
|
66
|
+
maxQuantity: number | null;
|
|
67
|
+
}
|
|
68
|
+
/** Deckelt eine gewuenschte Menge an der Hoechstmenge des Artikels (null = keine Grenze). */
|
|
69
|
+
export declare function allowedQuantity(a: Pick<PosArticle, 'maxQuantity'>, wanted: number): number;
|
|
70
|
+
/** Ein Artikel am Draht `/api/v3` (`listMyArticles`), soweit dieses Paket ihn liest. */
|
|
71
|
+
export interface PosArticlePayload {
|
|
72
|
+
id?: string | null;
|
|
73
|
+
name?: string | null;
|
|
74
|
+
unitPriceCents?: number | null;
|
|
75
|
+
vatRate?: number | null;
|
|
76
|
+
unit?: string | null;
|
|
77
|
+
groupId?: string | null;
|
|
78
|
+
revenueGroupId?: string | null;
|
|
79
|
+
tile?: {
|
|
80
|
+
visible?: boolean | null;
|
|
81
|
+
sort?: number | null;
|
|
82
|
+
} | null;
|
|
83
|
+
active?: boolean | null;
|
|
84
|
+
quantityRule?: string | null;
|
|
85
|
+
askQuantity?: boolean | null;
|
|
86
|
+
maxQuantity?: number | null;
|
|
87
|
+
}
|
|
88
|
+
export declare function fromPosArticlePayload(p: PosArticlePayload): PosArticle;
|
|
89
|
+
export declare function listMyArticleGroups(transport: InternerTransport): Promise<ArticleGroup[]>;
|
|
90
|
+
export declare function listMyArticles(transport: InternerTransport): Promise<PosArticle[]>;
|
|
@@ -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
|
+
}
|