@kreiseck/kasseneck-api 0.31.0 → 1.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +317 -0
- package/README.de.md +11 -7
- package/README.md +509 -126
- package/dist/cjs/client/api.d.ts +7 -6
- package/dist/cjs/client/api.js +2 -2
- package/dist/cjs/client/aufrufe.d.ts +29 -5
- package/dist/cjs/client/aufrufe.js +114 -2
- package/dist/cjs/client/auth.d.ts +2 -0
- package/dist/cjs/client/auth.js +17 -1
- package/dist/cjs/client/cashregisters.d.ts +1 -1
- package/dist/cjs/client/cashregisters.js +2 -2
- package/dist/cjs/client/errors.d.ts +94 -19
- package/dist/cjs/client/errors.js +132 -28
- package/dist/cjs/client/fehlercodes.d.ts +9 -0
- package/dist/cjs/client/fehlercodes.js +36 -0
- package/dist/cjs/client/index.d.ts +5 -5
- package/dist/cjs/client/index.js +11 -3
- package/dist/cjs/client/receipts.d.ts +131 -124
- package/dist/cjs/client/receipts.js +196 -137
- package/dist/cjs/client/reports.d.ts +26 -4
- package/dist/cjs/client/reports.js +37 -4
- package/dist/cjs/client/status.d.ts +3 -3
- package/dist/cjs/client/status.js +7 -7
- package/dist/cjs/client/transport.d.ts +56 -4
- package/dist/cjs/client/transport.js +234 -25
- package/dist/cjs/enums/vat-rate.d.ts +2 -2
- package/dist/cjs/enums/vat-rate.js +1 -1
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.js +42 -13
- package/dist/{esm/rechnung → cjs/invoice}/api.d.ts +18 -17
- package/dist/cjs/{rechnung → invoice}/api.js +6 -6
- package/dist/{esm/rechnung → cjs/invoice}/auth.d.ts +2 -2
- package/dist/cjs/{rechnung → invoice}/auth.js +5 -5
- package/dist/{esm/rechnung/rechnen.d.ts → cjs/invoice/calc.d.ts} +27 -27
- package/dist/cjs/{rechnung/rechnen.js → invoice/calc.js} +54 -54
- package/dist/{esm/rechnung → cjs/invoice}/endpunkte.d.ts +23 -21
- package/dist/cjs/{rechnung → invoice}/endpunkte.js +52 -42
- package/dist/cjs/invoice/fehler.d.ts +31 -0
- package/dist/cjs/invoice/fehler.js +39 -0
- package/dist/cjs/invoice/index.d.ts +21 -0
- package/dist/cjs/invoice/index.js +86 -0
- package/dist/cjs/{rechnung → invoice}/summen.d.ts +12 -12
- package/dist/cjs/{rechnung → invoice}/summen.js +14 -14
- package/dist/cjs/invoice/texte.d.ts +224 -0
- package/dist/cjs/invoice/texte.js +425 -0
- package/dist/{esm/rechnung → cjs/invoice}/typen.d.ts +32 -11
- package/dist/cjs/{rechnung → invoice}/vertrag.d.ts +97 -71
- package/dist/cjs/{rechnung → invoice}/vertrag.js +144 -82
- package/dist/cjs/models/cancellation.d.ts +43 -24
- package/dist/cjs/models/cancellation.js +94 -46
- package/dist/cjs/models/hobex-receipt.d.ts +3 -3
- package/dist/cjs/models/hobex-receipt.js +35 -35
- package/dist/cjs/models/index.d.ts +6 -5
- package/dist/cjs/models/index.js +22 -2
- package/dist/cjs/models/payment-errors.d.ts +32 -15
- package/dist/cjs/models/payment-errors.js +80 -32
- package/dist/cjs/models/receipt-company.d.ts +6 -5
- package/dist/cjs/models/receipt-company.js +4 -4
- package/dist/cjs/models/receipt-email.d.ts +32 -18
- package/dist/cjs/models/receipt-email.js +69 -24
- package/dist/cjs/models/receipt-errors.d.ts +39 -0
- package/dist/cjs/models/receipt-errors.js +94 -0
- package/dist/cjs/models/receipt-item.d.ts +9 -1
- package/dist/cjs/models/receipt-item.js +3 -0
- package/dist/cjs/models/receipt-summary.d.ts +10 -4
- package/dist/cjs/models/receipt-summary.js +10 -4
- package/dist/cjs/models/receipt.d.ts +31 -2
- package/dist/cjs/models/receipt.js +12 -1
- package/dist/cjs/models/voucher.d.ts +7 -6
- package/dist/cjs/models/voucher.js +2 -7
- package/dist/cjs/partner/ablauf.d.ts +10 -10
- package/dist/cjs/partner/ablauf.js +29 -29
- package/dist/cjs/partner/api.d.ts +26 -23
- package/dist/cjs/partner/api.js +11 -13
- package/dist/cjs/partner/auth.d.ts +1 -1
- package/dist/cjs/partner/auth.js +2 -2
- package/dist/cjs/partner/betrieb.d.ts +7 -7
- package/dist/cjs/partner/betrieb.js +10 -10
- package/dist/cjs/partner/endpunkte.d.ts +27 -14
- package/dist/cjs/partner/endpunkte.js +80 -39
- package/dist/cjs/partner/fehler.d.ts +60 -30
- package/dist/cjs/partner/fehler.js +99 -43
- package/dist/cjs/partner/index.d.ts +13 -12
- package/dist/cjs/partner/index.js +35 -22
- package/dist/cjs/partner/secret.d.ts +3 -3
- package/dist/cjs/partner/secret.js +6 -6
- package/dist/cjs/partner/typen.d.ts +129 -71
- package/dist/cjs/partner/typen.js +76 -3
- package/dist/cjs/partner/webhook-signatur.d.ts +2 -2
- package/dist/cjs/partner/webhook-signatur.js +12 -12
- package/dist/cjs/partner/webhooks.d.ts +60 -32
- package/dist/cjs/partner/webhooks.js +40 -34
- package/dist/cjs/payments/hobex.d.ts +11 -3
- package/dist/cjs/payments/hobex.js +17 -5
- package/dist/cjs/payments/stripe.d.ts +5 -2
- package/dist/cjs/payments/stripe.js +10 -5
- package/dist/cjs/pos/artikel.d.ts +90 -0
- package/dist/cjs/pos/artikel.js +89 -0
- package/dist/cjs/pos/client.d.ts +27 -0
- package/dist/cjs/pos/client.js +144 -0
- package/dist/cjs/pos/drucker.d.ts +86 -0
- package/dist/cjs/pos/drucker.js +78 -0
- package/dist/cjs/pos/errors.d.ts +36 -0
- package/dist/cjs/pos/errors.js +95 -0
- package/dist/cjs/pos/index.d.ts +15 -0
- package/dist/cjs/pos/index.js +102 -0
- package/dist/cjs/pos/settings.d.ts +313 -0
- package/dist/cjs/pos/settings.js +376 -0
- package/dist/cjs/pos/texte.d.ts +883 -0
- package/dist/cjs/pos/texte.js +489 -0
- package/dist/cjs/{kasse → pos}/trinkgeld.d.ts +1 -1
- package/dist/cjs/{kasse → pos}/trinkgeld.js +2 -2
- package/dist/cjs/printing/escpos.d.ts +29 -29
- package/dist/cjs/printing/escpos.js +61 -61
- package/dist/cjs/printing/index.d.ts +2 -2
- package/dist/cjs/printing/index.js +17 -17
- package/dist/cjs/printing/qr-groesse.d.ts +38 -38
- package/dist/cjs/printing/qr-groesse.js +47 -47
- package/dist/cjs/printing/webusb.d.ts +2 -2
- package/dist/cjs/printing/webusb.js +4 -4
- package/dist/cjs/react/index.d.ts +21 -21
- package/dist/cjs/react/index.js +40 -30
- package/dist/cjs/receipt/bild.d.ts +4 -4
- package/dist/cjs/receipt/bild.js +11 -11
- package/dist/cjs/receipt/blatt.d.ts +46 -46
- package/dist/cjs/receipt/blatt.js +59 -59
- package/dist/cjs/receipt/discount.d.ts +1 -1
- package/dist/cjs/receipt/discount.js +8 -8
- package/dist/cjs/receipt/due.d.ts +86 -0
- package/dist/cjs/receipt/due.js +261 -0
- package/dist/cjs/receipt/epos.d.ts +22 -22
- package/dist/cjs/receipt/epos.js +45 -45
- package/dist/cjs/receipt/grid.d.ts +10 -10
- package/dist/cjs/receipt/grid.js +20 -20
- package/dist/cjs/receipt/index.d.ts +9 -8
- package/dist/cjs/receipt/index.js +26 -23
- package/dist/cjs/receipt/layout-escpos.d.ts +24 -24
- package/dist/cjs/receipt/layout-escpos.js +49 -49
- package/dist/cjs/receipt/layout.d.ts +28 -23
- package/dist/cjs/receipt/layout.js +45 -21
- package/dist/cjs/receipt/marke-daten.d.ts +8 -8
- package/dist/cjs/receipt/marke-daten.js +8 -8
- package/dist/cjs/receipt/marke.d.ts +7 -7
- package/dist/cjs/receipt/marke.js +10 -10
- package/dist/cjs/register/errors.d.ts +61 -0
- package/dist/cjs/register/errors.js +112 -0
- package/dist/cjs/register/index.d.ts +14 -1
- package/dist/cjs/register/index.js +20 -1
- package/dist/cjs/register/pairing.d.ts +55 -36
- package/dist/cjs/register/pairing.js +33 -29
- package/dist/cjs/register/session.d.ts +5 -5
- package/dist/cjs/register/session.js +7 -7
- package/dist/cjs/stored/draht.d.ts +45 -0
- package/dist/cjs/stored/draht.js +220 -0
- package/dist/cjs/stored/einstellungen.d.ts +23 -0
- package/dist/cjs/stored/einstellungen.js +200 -0
- package/dist/cjs/stored/index.d.ts +109 -0
- package/dist/cjs/stored/index.js +225 -0
- package/dist/cjs/stored/vokabular.d.ts +18 -0
- package/dist/cjs/stored/vokabular.js +389 -0
- package/dist/cjs/version.d.ts +7 -0
- package/dist/cjs/version.js +10 -0
- package/dist/cjs/vienna-time.d.ts +1 -1
- package/dist/cjs/vienna-time.js +2 -2
- package/dist/esm/client/api.d.ts +7 -6
- package/dist/esm/client/api.js +4 -4
- package/dist/esm/client/aufrufe.d.ts +29 -5
- package/dist/esm/client/aufrufe.js +111 -1
- package/dist/esm/client/auth.d.ts +2 -0
- package/dist/esm/client/auth.js +16 -1
- package/dist/esm/client/cashregisters.d.ts +1 -1
- package/dist/esm/client/cashregisters.js +2 -2
- package/dist/esm/client/errors.d.ts +94 -19
- package/dist/esm/client/errors.js +129 -27
- package/dist/esm/client/fehlercodes.d.ts +9 -0
- package/dist/esm/client/fehlercodes.js +32 -0
- package/dist/esm/client/index.d.ts +5 -5
- package/dist/esm/client/index.js +5 -5
- package/dist/esm/client/receipts.d.ts +131 -124
- package/dist/esm/client/receipts.js +195 -140
- package/dist/esm/client/reports.d.ts +26 -4
- package/dist/esm/client/reports.js +36 -4
- package/dist/esm/client/status.d.ts +3 -3
- package/dist/esm/client/status.js +7 -7
- package/dist/esm/client/transport.d.ts +56 -4
- package/dist/esm/client/transport.js +233 -24
- package/dist/esm/enums/vat-rate.d.ts +2 -2
- package/dist/esm/enums/vat-rate.js +1 -1
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +4 -3
- package/dist/{cjs/rechnung → esm/invoice}/api.d.ts +18 -17
- package/dist/esm/{rechnung → invoice}/api.js +6 -6
- package/dist/{cjs/rechnung → esm/invoice}/auth.d.ts +2 -2
- package/dist/esm/{rechnung → invoice}/auth.js +4 -4
- package/dist/{cjs/rechnung/rechnen.d.ts → esm/invoice/calc.d.ts} +27 -27
- package/dist/esm/{rechnung/rechnen.js → invoice/calc.js} +45 -45
- package/dist/{cjs/rechnung → esm/invoice}/endpunkte.d.ts +23 -21
- package/dist/esm/{rechnung → invoice}/endpunkte.js +52 -42
- package/dist/esm/invoice/fehler.d.ts +31 -0
- package/dist/esm/invoice/fehler.js +33 -0
- package/dist/esm/invoice/index.d.ts +21 -0
- package/dist/esm/invoice/index.js +20 -0
- package/dist/esm/{rechnung → invoice}/summen.d.ts +12 -12
- package/dist/esm/{rechnung → invoice}/summen.js +12 -12
- package/dist/esm/invoice/texte.d.ts +224 -0
- package/dist/esm/invoice/texte.js +421 -0
- package/dist/{cjs/rechnung → esm/invoice}/typen.d.ts +32 -11
- package/dist/esm/{rechnung → invoice}/vertrag.d.ts +97 -71
- package/dist/esm/{rechnung → invoice}/vertrag.js +143 -81
- package/dist/esm/models/cancellation.d.ts +43 -24
- package/dist/esm/models/cancellation.js +90 -45
- package/dist/esm/models/hobex-receipt.d.ts +3 -3
- package/dist/esm/models/hobex-receipt.js +35 -35
- package/dist/esm/models/index.d.ts +6 -5
- package/dist/esm/models/index.js +6 -5
- package/dist/esm/models/payment-errors.d.ts +32 -15
- package/dist/esm/models/payment-errors.js +77 -32
- package/dist/esm/models/receipt-company.d.ts +6 -5
- package/dist/esm/models/receipt-company.js +4 -4
- package/dist/esm/models/receipt-email.d.ts +32 -18
- package/dist/esm/models/receipt-email.js +65 -23
- package/dist/esm/models/receipt-errors.d.ts +39 -0
- package/dist/esm/models/receipt-errors.js +87 -0
- package/dist/esm/models/receipt-item.d.ts +9 -1
- package/dist/esm/models/receipt-item.js +3 -0
- package/dist/esm/models/receipt-summary.d.ts +10 -4
- package/dist/esm/models/receipt-summary.js +9 -3
- package/dist/esm/models/receipt.d.ts +31 -2
- package/dist/esm/models/receipt.js +12 -2
- package/dist/esm/models/voucher.d.ts +7 -6
- package/dist/esm/models/voucher.js +2 -7
- package/dist/esm/partner/ablauf.d.ts +10 -10
- package/dist/esm/partner/ablauf.js +27 -27
- package/dist/esm/partner/api.d.ts +26 -23
- package/dist/esm/partner/api.js +13 -15
- package/dist/esm/partner/auth.d.ts +1 -1
- package/dist/esm/partner/auth.js +2 -2
- package/dist/esm/partner/betrieb.d.ts +7 -7
- package/dist/esm/partner/betrieb.js +8 -8
- package/dist/esm/partner/endpunkte.d.ts +27 -14
- package/dist/esm/partner/endpunkte.js +79 -39
- package/dist/esm/partner/fehler.d.ts +60 -30
- package/dist/esm/partner/fehler.js +91 -35
- package/dist/esm/partner/index.d.ts +13 -12
- package/dist/esm/partner/index.js +12 -11
- package/dist/esm/partner/secret.d.ts +3 -3
- package/dist/esm/partner/secret.js +5 -5
- package/dist/esm/partner/typen.d.ts +129 -71
- package/dist/esm/partner/typen.js +75 -2
- package/dist/esm/partner/webhook-signatur.d.ts +2 -2
- package/dist/esm/partner/webhook-signatur.js +12 -12
- package/dist/esm/partner/webhooks.d.ts +60 -32
- package/dist/esm/partner/webhooks.js +38 -32
- package/dist/esm/payments/hobex.d.ts +11 -3
- package/dist/esm/payments/hobex.js +18 -6
- package/dist/esm/payments/stripe.d.ts +5 -2
- package/dist/esm/payments/stripe.js +11 -6
- package/dist/esm/pos/artikel.d.ts +90 -0
- package/dist/esm/pos/artikel.js +79 -0
- package/dist/esm/pos/client.d.ts +27 -0
- package/dist/esm/pos/client.js +137 -0
- package/dist/esm/pos/drucker.d.ts +86 -0
- package/dist/esm/pos/drucker.js +71 -0
- package/dist/esm/pos/errors.d.ts +36 -0
- package/dist/esm/pos/errors.js +88 -0
- package/dist/esm/pos/index.d.ts +15 -0
- package/dist/esm/pos/index.js +20 -0
- package/dist/esm/pos/settings.d.ts +313 -0
- package/dist/esm/pos/settings.js +367 -0
- package/dist/esm/pos/texte.d.ts +883 -0
- package/dist/esm/pos/texte.js +481 -0
- package/dist/esm/{kasse → pos}/trinkgeld.d.ts +1 -1
- package/dist/esm/{kasse → pos}/trinkgeld.js +2 -2
- package/dist/esm/printing/escpos.d.ts +29 -29
- package/dist/esm/printing/escpos.js +56 -56
- package/dist/esm/printing/index.d.ts +2 -2
- package/dist/esm/printing/index.js +2 -2
- package/dist/esm/printing/qr-groesse.d.ts +38 -38
- package/dist/esm/printing/qr-groesse.js +42 -42
- package/dist/esm/printing/webusb.d.ts +2 -2
- package/dist/esm/printing/webusb.js +4 -4
- package/dist/esm/react/index.d.ts +21 -21
- package/dist/esm/react/index.js +39 -29
- package/dist/esm/receipt/bild.d.ts +4 -4
- package/dist/esm/receipt/bild.js +11 -11
- package/dist/esm/receipt/blatt.d.ts +46 -46
- package/dist/esm/receipt/blatt.js +55 -55
- package/dist/esm/receipt/discount.d.ts +1 -1
- package/dist/esm/receipt/discount.js +7 -7
- package/dist/esm/receipt/due.d.ts +86 -0
- package/dist/esm/receipt/due.js +257 -0
- package/dist/esm/receipt/epos.d.ts +22 -22
- package/dist/esm/receipt/epos.js +47 -47
- package/dist/esm/receipt/grid.d.ts +10 -10
- package/dist/esm/receipt/grid.js +18 -18
- package/dist/esm/receipt/index.d.ts +9 -8
- package/dist/esm/receipt/index.js +9 -8
- package/dist/esm/receipt/layout-escpos.d.ts +24 -24
- package/dist/esm/receipt/layout-escpos.js +51 -51
- package/dist/esm/receipt/layout.d.ts +28 -23
- package/dist/esm/receipt/layout.js +44 -20
- package/dist/esm/receipt/marke-daten.d.ts +8 -8
- package/dist/esm/receipt/marke-daten.js +7 -7
- package/dist/esm/receipt/marke.d.ts +7 -7
- package/dist/esm/receipt/marke.js +10 -10
- package/dist/esm/register/errors.d.ts +61 -0
- package/dist/esm/register/errors.js +104 -0
- package/dist/esm/register/index.d.ts +14 -1
- package/dist/esm/register/index.js +13 -0
- package/dist/esm/register/pairing.d.ts +55 -36
- package/dist/esm/register/pairing.js +33 -29
- package/dist/esm/register/session.d.ts +5 -5
- package/dist/esm/register/session.js +7 -7
- package/dist/esm/stored/draht.d.ts +45 -0
- package/dist/esm/stored/draht.js +208 -0
- package/dist/esm/stored/einstellungen.d.ts +23 -0
- package/dist/esm/stored/einstellungen.js +196 -0
- package/dist/esm/stored/index.d.ts +109 -0
- package/dist/esm/stored/index.js +217 -0
- package/dist/esm/stored/vokabular.d.ts +18 -0
- package/dist/esm/stored/vokabular.js +386 -0
- package/dist/esm/version.d.ts +7 -0
- package/dist/esm/version.js +7 -0
- package/dist/esm/vienna-time.d.ts +1 -1
- package/dist/esm/vienna-time.js +2 -2
- package/fixtures/{erwartet/storno-rabatt.lines.json → expected/cancellation-discount.lines.json} +2 -2
- package/fixtures/expected/cancellation-discount.sheet32.json +248 -0
- package/fixtures/{erwartet/storno-rabatt.blatt48.json → expected/cancellation-discount.sheet48.json} +119 -119
- package/fixtures/{erwartet/storno-voll.lines.json → expected/cancellation-full.lines.json} +2 -2
- package/fixtures/expected/cancellation-full.sheet32.json +218 -0
- package/fixtures/{erwartet/storno-voll.blatt48.json → expected/cancellation-full.sheet48.json} +107 -107
- package/fixtures/{erwartet/storno-teil.lines.json → expected/cancellation-partial.lines.json} +2 -2
- package/fixtures/expected/cancellation-partial.sheet32.json +206 -0
- package/fixtures/{erwartet/storno-teil.blatt48.json → expected/cancellation-partial.sheet48.json} +101 -101
- package/fixtures/{erwartet/storno-split-voll.lines.json → expected/cancellation-split-full.lines.json} +2 -2
- package/fixtures/expected/cancellation-split-full.sheet32.json +320 -0
- package/fixtures/{erwartet/storno-split-voll.blatt48.json → expected/cancellation-split-full.sheet48.json} +158 -158
- package/fixtures/{erwartet/storno-split-teil.lines.json → expected/cancellation-split-partial.lines.json} +2 -2
- package/fixtures/expected/cancellation-split-partial.sheet32.json +230 -0
- package/fixtures/{erwartet/storno-split-teil.blatt48.json → expected/cancellation-split-partial.sheet48.json} +113 -113
- package/fixtures/{erwartet/karte-eigener.lines.json → expected/card-custom.lines.json} +1 -1
- package/fixtures/expected/card-custom.sheet32.json +158 -0
- package/fixtures/{erwartet/karte-eigener.blatt48.json → expected/card-custom.sheet48.json} +80 -80
- package/fixtures/{erwartet/karte-gptom-ios.lines.json → expected/card-gptom-ios.lines.json} +1 -1
- package/fixtures/expected/card-gptom-ios.sheet32.json +230 -0
- package/fixtures/{erwartet/karte-gptom-ios.blatt48.json → expected/card-gptom-ios.sheet48.json} +116 -116
- package/fixtures/{erwartet/karte-gptom.lines.json → expected/card-gptom.lines.json} +1 -1
- package/fixtures/expected/card-gptom.sheet32.json +230 -0
- package/fixtures/{erwartet/karte-gptom.blatt48.json → expected/card-gptom.sheet48.json} +116 -116
- package/fixtures/{erwartet/karte-hobex-cloud.lines.json → expected/card-hobex-cloud.lines.json} +1 -1
- package/fixtures/expected/card-hobex-cloud.sheet32.json +200 -0
- package/fixtures/{erwartet/karte-hobex-cloud.blatt48.json → expected/card-hobex-cloud.sheet48.json} +101 -101
- package/fixtures/{erwartet/karte-hobex-hps.lines.json → expected/card-hobex-hps.lines.json} +1 -1
- package/fixtures/expected/card-hobex-hps.sheet32.json +224 -0
- package/fixtures/{erwartet/karte-hobex-hps.blatt48.json → expected/card-hobex-hps.sheet48.json} +113 -113
- package/fixtures/{erwartet/karte-mypos.lines.json → expected/card-mypos.lines.json} +1 -1
- package/fixtures/expected/card-mypos.sheet32.json +254 -0
- package/fixtures/{erwartet/karte-mypos.blatt48.json → expected/card-mypos.sheet48.json} +122 -122
- package/fixtures/{erwartet/karte-stripe-eps.lines.json → expected/card-stripe-eps.lines.json} +1 -1
- package/fixtures/expected/card-stripe-eps.sheet32.json +194 -0
- package/fixtures/{erwartet/karte-stripe-eps.blatt48.json → expected/card-stripe-eps.sheet48.json} +98 -98
- package/fixtures/{erwartet/karte-stripe.lines.json → expected/card-stripe.lines.json} +1 -1
- package/fixtures/expected/card-stripe.sheet32.json +212 -0
- package/fixtures/{erwartet/karte-stripe.blatt48.json → expected/card-stripe.sheet48.json} +107 -107
- package/fixtures/{erwartet/karte-sumup.lines.json → expected/card-sumup.lines.json} +1 -1
- package/fixtures/expected/card-sumup.sheet32.json +218 -0
- package/fixtures/{erwartet/karte-sumup.blatt48.json → expected/card-sumup.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabattzeilen.lines.json → expected/discount-lines.lines.json} +1 -1
- package/fixtures/expected/discount-lines.sheet32.json +200 -0
- package/fixtures/{erwartet/rabattzeilen.blatt48.json → expected/discount-lines.sheet48.json} +98 -98
- package/fixtures/{erwartet/rabatt-chef-trinkgeld.lines.json → expected/discount-owner-tip.lines.json} +1 -1
- package/fixtures/expected/discount-owner-tip.sheet32.json +212 -0
- package/fixtures/{erwartet/rabatt-chef-trinkgeld.blatt48.json → expected/discount-owner-tip.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabatt-einfach.lines.json → expected/discount-simple.lines.json} +1 -1
- package/fixtures/expected/discount-simple.sheet32.json +182 -0
- package/fixtures/{erwartet/rabatt-einfach.blatt48.json → expected/discount-simple.sheet48.json} +89 -89
- package/fixtures/{erwartet/rabatt-trinkgeld.lines.json → expected/discount-tip.lines.json} +1 -1
- package/fixtures/expected/discount-tip.sheet32.json +212 -0
- package/fixtures/{erwartet/rabatt-trinkgeld.blatt48.json → expected/discount-tip.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabatt-wertgutschein.lines.json → expected/discount-value-voucher.lines.json} +1 -1
- package/fixtures/expected/discount-value-voucher.sheet32.json +218 -0
- package/fixtures/{erwartet/rabatt-wertgutschein.blatt48.json → expected/discount-value-voucher.sheet48.json} +107 -107
- package/fixtures/{erwartet/langer-artikelname.lines.json → expected/long-item-name.lines.json} +1 -1
- package/fixtures/expected/long-item-name.sheet32.json +176 -0
- package/fixtures/{erwartet/langer-artikelname.blatt48.json → expected/long-item-name.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-karte.lines.json → expected/sale-card.lines.json} +1 -1
- package/fixtures/expected/sale-card.sheet32.json +176 -0
- package/fixtures/{erwartet/verkauf-karte.blatt48.json → expected/sale-card.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-bar.lines.json → expected/sale-cash.lines.json} +1 -1
- package/fixtures/expected/sale-cash.sheet32.json +176 -0
- package/fixtures/{erwartet/verkauf-bar.blatt48.json → expected/sale-cash.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-kleinunternehmer.lines.json → expected/sale-small-business.lines.json} +1 -1
- package/fixtures/expected/sale-small-business.sheet32.json +182 -0
- package/fixtures/{erwartet/verkauf-kleinunternehmer.blatt48.json → expected/sale-small-business.sheet48.json} +89 -89
- package/fixtures/{erwartet/signaturausfall-verkauf.lines.json → expected/signature-outage-sale.lines.json} +1 -1
- package/fixtures/expected/signature-outage-sale.sheet32.json +194 -0
- package/fixtures/{erwartet/signaturausfall-verkauf.blatt48.json → expected/signature-outage-sale.sheet48.json} +92 -92
- package/fixtures/{erwartet/split-karte-karte-bar.lines.json → expected/split-card-card-cash.lines.json} +1 -1
- package/fixtures/expected/split-card-card-cash.sheet32.json +356 -0
- package/fixtures/{erwartet/split-karte-karte-bar.blatt48.json → expected/split-card-card-cash.sheet48.json} +170 -170
- package/fixtures/{erwartet/split-bar-rueckgeld.lines.json → expected/split-cash-change.lines.json} +1 -1
- package/fixtures/expected/split-cash-change.sheet32.json +194 -0
- package/fixtures/{erwartet/split-bar-rueckgeld.blatt48.json → expected/split-cash-change.sheet48.json} +92 -92
- package/fixtures/{erwartet/split-langer-betrag.lines.json → expected/split-long-amount.lines.json} +1 -1
- package/fixtures/expected/split-long-amount.sheet32.json +266 -0
- package/fixtures/{erwartet/split-langer-betrag.blatt48.json → expected/split-long-amount.sheet48.json} +131 -131
- package/fixtures/{erwartet/split-eine-karte-trinkgeld.lines.json → expected/split-one-card-tip.lines.json} +1 -1
- package/fixtures/expected/split-one-card-tip.sheet32.json +242 -0
- package/fixtures/{erwartet/split-eine-karte-trinkgeld.blatt48.json → expected/split-one-card-tip.sheet48.json} +113 -113
- package/fixtures/{erwartet/split-tischrunde-trinkgeld.lines.json → expected/split-table-round-tip.lines.json} +1 -1
- package/fixtures/expected/split-table-round-tip.sheet32.json +470 -0
- package/fixtures/{erwartet/split-tischrunde-trinkgeld.blatt48.json → expected/split-table-round-tip.sheet48.json} +218 -218
- package/fixtures/{erwartet/split-trinkgeld-karte.lines.json → expected/split-tip-card.lines.json} +1 -1
- package/fixtures/expected/split-tip-card.sheet32.json +272 -0
- package/fixtures/{erwartet/split-trinkgeld-karte.blatt48.json → expected/split-tip-card.sheet48.json} +128 -128
- package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.lines.json → expected/split-two-cards-same-provider.lines.json} +1 -1
- package/fixtures/expected/split-two-cards-same-provider.sheet32.json +326 -0
- package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.blatt48.json → expected/split-two-cards-same-provider.sheet48.json} +149 -149
- package/fixtures/{erwartet/testkasse-verkauf.lines.json → expected/test-cashregister-sale.lines.json} +3 -3
- package/fixtures/expected/test-cashregister-sale.sheet32.json +224 -0
- package/fixtures/{erwartet/testkasse-verkauf.blatt48.json → expected/test-cashregister-sale.sheet48.json} +110 -110
- package/fixtures/{erwartet/testsignatur-verkauf.lines.json → expected/test-signature-sale.lines.json} +3 -3
- package/fixtures/expected/test-signature-sale.sheet32.json +236 -0
- package/fixtures/{erwartet/testsignatur-verkauf.blatt48.json → expected/test-signature-sale.sheet48.json} +110 -110
- package/fixtures/{erwartet → expected}/training.lines.json +2 -2
- package/fixtures/expected/training.sheet32.json +236 -0
- package/fixtures/{erwartet/training.blatt48.json → expected/training.sheet48.json} +110 -110
- package/fixtures/{erwartet/null-jahr.lines.json → expected/zero-annual.lines.json} +2 -2
- package/fixtures/expected/zero-annual.sheet32.json +212 -0
- package/fixtures/{erwartet/null-jahr.blatt48.json → expected/zero-annual.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-schluss.lines.json → expected/zero-final.lines.json} +2 -2
- package/fixtures/expected/zero-final.sheet32.json +206 -0
- package/fixtures/{erwartet/null-schluss.blatt48.json → expected/zero-final.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-pruef.lines.json → expected/zero-manual.lines.json} +2 -2
- package/fixtures/expected/zero-manual.sheet32.json +206 -0
- package/fixtures/{erwartet/null-pruef.blatt48.json → expected/zero-manual.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-monat.lines.json → expected/zero-monthly.lines.json} +2 -2
- package/fixtures/expected/zero-monthly.sheet32.json +206 -0
- package/fixtures/{erwartet/null-monat.blatt48.json → expected/zero-monthly.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-ausfall.lines.json → expected/zero-outage-end.lines.json} +2 -2
- package/fixtures/expected/zero-outage-end.sheet32.json +206 -0
- package/fixtures/{erwartet/null-ausfall.blatt48.json → expected/zero-outage-end.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-start.lines.json → expected/zero-start.lines.json} +2 -2
- package/fixtures/expected/zero-start.sheet32.json +206 -0
- package/fixtures/{erwartet/null-start.blatt48.json → expected/zero-start.sheet48.json} +95 -95
- package/fixtures/hobex-hps-codes.json +12 -12
- package/fixtures/invoice-api-examples/brands-ok.json +8 -0
- package/fixtures/{rechnung-api-beispiele/credit-fehler-grund.json → invoice-api-examples/credit-error-reason.json} +6 -6
- package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/credit-ok.json +6 -6
- package/fixtures/{rechnung-api-beispiele/customer-fehler-uid.json → invoice-api-examples/customer-error-vat-id.json} +4 -4
- package/fixtures/invoice-api-examples/customer-get-error-both.json +15 -0
- package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/customer-ok.json +4 -4
- package/fixtures/{rechnung-api-beispiele/customer-search-fehler-leer.json → invoice-api-examples/customer-search-error-empty.json} +4 -4
- package/fixtures/{rechnung-api-beispiele/issue-rabatt.json → invoice-api-examples/issue-discount.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-englisch.json → invoice-api-examples/issue-english.json} +7 -7
- package/fixtures/{rechnung-api-beispiele/issue-fehler-cent.json → invoice-api-examples/issue-error-cent.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-sprache.json → invoice-api-examples/issue-error-language.json} +5 -5
- package/fixtures/{rechnung-api-beispiele/issue-fehler-negativ.json → invoice-api-examples/issue-error-negative.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-zahlungsart.json → invoice-api-examples/issue-error-payment-method.json} +8 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-beide.json → invoice-api-examples/issue-error-price-both.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-fehlt.json → invoice-api-examples/issue-error-price-missing.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-menge.json → invoice-api-examples/issue-error-quantity.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-satz.json → invoice-api-examples/issue-error-rate.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-einheit.json → invoice-api-examples/issue-error-unit.json} +5 -5
- package/fixtures/{rechnung-api-beispiele/issue-fehler-unbekannt.json → invoice-api-examples/issue-error-unknown.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-brutto-20.json → invoice-api-examples/issue-gross-20.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-mikropreis.json → invoice-api-examples/issue-micro-price.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-gemischt.json → invoice-api-examples/issue-mixed.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-netto-20.json → invoice-api-examples/issue-net-20.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-bezahlt.json → invoice-api-examples/issue-paid.json} +7 -7
- package/fixtures/{rechnung-api-beispiele/issue-kleinunternehmer.json → invoice-api-examples/issue-small-business.json} +6 -6
- package/fixtures/invoice-api-examples/payment-error-on-site.json +17 -0
- package/fixtures/invoice-api-examples/payment-error-without-key.json +16 -0
- package/fixtures/invoice-api-examples/payment-recorded-later.json +14 -0
- package/fixtures/{rechnung-api-beispiele/setup-status-fehler-feld.json → invoice-api-examples/setup-status-error-field.json} +4 -4
- package/fixtures/invoice-api-examples/setup-status-ok.json +8 -0
- package/fixtures/{rechnung-api.schema.json → invoice-api.schema.json} +24 -24
- package/fixtures/{rechnung-rechnen-zufall.json → invoice-calc-random.json} +828 -828
- package/fixtures/{rechnung-rechnen.json → invoice-calc.json} +47 -47
- package/fixtures/invoice-texts.json +464 -0
- package/fixtures/{rechnung-summen.json → invoice-totals.json} +25 -25
- package/fixtures/{position-aus-euro.json → item-from-euro.json} +26 -26
- package/fixtures/manifest.json +252 -252
- package/fixtures/pos-message-cases.json +32 -0
- package/fixtures/pos-settings-defaults.json +149 -0
- package/fixtures/{kasse-texte.json → pos-texts.json} +416 -416
- package/fixtures/receipt-due-generated.json +1218 -0
- package/fixtures/{belege/storno-rabatt.json → receipts/cancellation-discount.json} +3 -3
- package/fixtures/{belege/storno-voll.json → receipts/cancellation-full.json} +3 -3
- package/fixtures/{belege/storno-teil.json → receipts/cancellation-partial.json} +3 -3
- package/fixtures/{belege/storno-split-voll.json → receipts/cancellation-split-full.json} +3 -3
- package/fixtures/{belege/storno-split-teil.json → receipts/cancellation-split-partial.json} +3 -3
- package/fixtures/{belege/karte-eigener.json → receipts/card-custom.json} +2 -2
- package/fixtures/{belege/karte-gptom-ios.json → receipts/card-gptom-ios.json} +2 -2
- package/fixtures/{belege/karte-gptom.json → receipts/card-gptom.json} +2 -2
- package/fixtures/{belege/karte-hobex-cloud.json → receipts/card-hobex-cloud.json} +2 -2
- package/fixtures/{belege/karte-hobex-hps.json → receipts/card-hobex-hps.json} +2 -2
- package/fixtures/{belege/karte-mypos.json → receipts/card-mypos.json} +2 -2
- package/fixtures/{belege/karte-stripe-eps.json → receipts/card-stripe-eps.json} +2 -2
- package/fixtures/{belege/karte-stripe.json → receipts/card-stripe.json} +2 -2
- package/fixtures/{belege/karte-sumup.json → receipts/card-sumup.json} +2 -2
- package/fixtures/{belege/rabattzeilen.json → receipts/discount-lines.json} +2 -2
- package/fixtures/{belege/rabatt-chef-trinkgeld.json → receipts/discount-owner-tip.json} +2 -2
- package/fixtures/{belege/rabatt-einfach.json → receipts/discount-simple.json} +2 -2
- package/fixtures/{belege/rabatt-trinkgeld.json → receipts/discount-tip.json} +2 -2
- package/fixtures/{belege/rabatt-wertgutschein.json → receipts/discount-value-voucher.json} +2 -2
- package/fixtures/{belege/langer-artikelname.json → receipts/long-item-name.json} +2 -2
- package/fixtures/{belege/verkauf-karte.json → receipts/sale-card.json} +2 -2
- package/fixtures/{belege/verkauf-bar.json → receipts/sale-cash.json} +2 -2
- package/fixtures/{belege/verkauf-kleinunternehmer.json → receipts/sale-small-business.json} +1 -1
- package/fixtures/{belege/signaturausfall-verkauf.json → receipts/signature-outage-sale.json} +2 -2
- package/fixtures/{belege/split-karte-karte-bar.json → receipts/split-card-card-cash.json} +2 -2
- package/fixtures/{belege/split-bar-rueckgeld.json → receipts/split-cash-change.json} +2 -2
- package/fixtures/{belege/split-langer-betrag.json → receipts/split-long-amount.json} +2 -2
- package/fixtures/{belege/split-eine-karte-trinkgeld.json → receipts/split-one-card-tip.json} +2 -2
- package/fixtures/{belege/split-tischrunde-trinkgeld.json → receipts/split-table-round-tip.json} +2 -2
- package/fixtures/{belege/split-trinkgeld-karte.json → receipts/split-tip-card.json} +2 -2
- package/fixtures/{belege/split-zwei-karten-gleicher-anbieter.json → receipts/split-two-cards-same-provider.json} +2 -2
- package/fixtures/{belege/testsignatur-verkauf.json → receipts/test-cashregister-sale.json} +3 -3
- package/fixtures/{belege/testkasse-verkauf.json → receipts/test-signature-sale.json} +3 -3
- package/fixtures/{belege → receipts}/training.json +2 -2
- package/fixtures/{belege/null-jahr.json → receipts/zero-annual.json} +5 -5
- package/fixtures/{belege/null-schluss.json → receipts/zero-final.json} +5 -5
- package/fixtures/{belege/null-pruef.json → receipts/zero-manual.json} +5 -5
- package/fixtures/{belege/null-monat.json → receipts/zero-monthly.json} +5 -5
- package/fixtures/{belege/null-ausfall.json → receipts/zero-outage-end.json} +5 -5
- package/fixtures/{belege/null-start.json → receipts/zero-start.json} +5 -5
- package/fixtures/renames-1.0.json +1490 -0
- package/fixtures/{kasse-settings-standard.json → stored/pos-settings-defaults.json} +7 -7
- package/fixtures/surface.json +877 -0
- package/fixtures/v3/README.md +125 -0
- package/fixtures/v3/antworten/belege.json +4738 -0
- package/fixtures/v3/antworten/belegmail.json +154 -0
- package/fixtures/v3/antworten/kasse-belege.json +4304 -0
- package/fixtures/v3/antworten/kasse.json +12716 -0
- package/fixtures/v3/antworten/rechnungen.json +1712 -0
- package/fixtures/v3/antworten/storno.json +737 -0
- package/fixtures/v3/stored/belege.json +502 -0
- package/fixtures/v3/stored/kasse.json +3461 -0
- package/fixtures/v3/stored/rechnungen.json +750 -0
- package/fixtures/v3/v3-vokabular.json +3375 -0
- package/fixtures/v3/zahlbetrag-faelle.json +794 -0
- package/package.json +32 -18
- package/dist/cjs/kasse/artikel.d.ts +0 -83
- package/dist/cjs/kasse/artikel.js +0 -79
- package/dist/cjs/kasse/client.d.ts +0 -10
- package/dist/cjs/kasse/client.js +0 -38
- package/dist/cjs/kasse/drucker.d.ts +0 -59
- package/dist/cjs/kasse/drucker.js +0 -50
- package/dist/cjs/kasse/index.d.ts +0 -13
- package/dist/cjs/kasse/index.js +0 -83
- package/dist/cjs/kasse/settings.d.ts +0 -229
- package/dist/cjs/kasse/settings.js +0 -172
- package/dist/cjs/kasse/texte.d.ts +0 -868
- package/dist/cjs/kasse/texte.js +0 -474
- package/dist/cjs/rechnung/fehler.d.ts +0 -21
- package/dist/cjs/rechnung/fehler.js +0 -44
- package/dist/cjs/rechnung/index.d.ts +0 -21
- package/dist/cjs/rechnung/index.js +0 -82
- package/dist/cjs/rechnung/texte.d.ts +0 -222
- package/dist/cjs/rechnung/texte.js +0 -425
- package/dist/esm/kasse/artikel.d.ts +0 -83
- package/dist/esm/kasse/artikel.js +0 -70
- package/dist/esm/kasse/client.d.ts +0 -10
- package/dist/esm/kasse/client.js +0 -33
- package/dist/esm/kasse/drucker.d.ts +0 -59
- package/dist/esm/kasse/drucker.js +0 -45
- package/dist/esm/kasse/index.d.ts +0 -13
- package/dist/esm/kasse/index.js +0 -18
- package/dist/esm/kasse/settings.d.ts +0 -229
- package/dist/esm/kasse/settings.js +0 -168
- package/dist/esm/kasse/texte.d.ts +0 -868
- package/dist/esm/kasse/texte.js +0 -466
- package/dist/esm/rechnung/fehler.d.ts +0 -21
- package/dist/esm/rechnung/fehler.js +0 -39
- package/dist/esm/rechnung/index.d.ts +0 -21
- package/dist/esm/rechnung/index.js +0 -20
- package/dist/esm/rechnung/texte.d.ts +0 -222
- package/dist/esm/rechnung/texte.js +0 -421
- package/fixtures/erwartet/karte-eigener.blatt32.json +0 -158
- package/fixtures/erwartet/karte-gptom-ios.blatt32.json +0 -230
- package/fixtures/erwartet/karte-gptom.blatt32.json +0 -230
- package/fixtures/erwartet/karte-hobex-cloud.blatt32.json +0 -200
- package/fixtures/erwartet/karte-hobex-hps.blatt32.json +0 -224
- package/fixtures/erwartet/karte-mypos.blatt32.json +0 -254
- package/fixtures/erwartet/karte-stripe-eps.blatt32.json +0 -194
- package/fixtures/erwartet/karte-stripe.blatt32.json +0 -212
- package/fixtures/erwartet/karte-sumup.blatt32.json +0 -218
- package/fixtures/erwartet/langer-artikelname.blatt32.json +0 -176
- package/fixtures/erwartet/null-ausfall.blatt32.json +0 -206
- package/fixtures/erwartet/null-jahr.blatt32.json +0 -212
- package/fixtures/erwartet/null-monat.blatt32.json +0 -206
- package/fixtures/erwartet/null-pruef.blatt32.json +0 -206
- package/fixtures/erwartet/null-schluss.blatt32.json +0 -206
- package/fixtures/erwartet/null-start.blatt32.json +0 -206
- package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt32.json +0 -212
- package/fixtures/erwartet/rabatt-einfach.blatt32.json +0 -182
- package/fixtures/erwartet/rabatt-trinkgeld.blatt32.json +0 -212
- package/fixtures/erwartet/rabatt-wertgutschein.blatt32.json +0 -218
- package/fixtures/erwartet/rabattzeilen.blatt32.json +0 -200
- package/fixtures/erwartet/signaturausfall-verkauf.blatt32.json +0 -194
- package/fixtures/erwartet/split-bar-rueckgeld.blatt32.json +0 -194
- package/fixtures/erwartet/split-eine-karte-trinkgeld.blatt32.json +0 -242
- package/fixtures/erwartet/split-karte-karte-bar.blatt32.json +0 -356
- package/fixtures/erwartet/split-langer-betrag.blatt32.json +0 -266
- package/fixtures/erwartet/split-tischrunde-trinkgeld.blatt32.json +0 -470
- package/fixtures/erwartet/split-trinkgeld-karte.blatt32.json +0 -272
- package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.blatt32.json +0 -326
- package/fixtures/erwartet/storno-rabatt.blatt32.json +0 -248
- package/fixtures/erwartet/storno-split-teil.blatt32.json +0 -230
- package/fixtures/erwartet/storno-split-voll.blatt32.json +0 -320
- package/fixtures/erwartet/storno-teil.blatt32.json +0 -206
- package/fixtures/erwartet/storno-voll.blatt32.json +0 -218
- package/fixtures/erwartet/testkasse-verkauf.blatt32.json +0 -224
- package/fixtures/erwartet/testsignatur-verkauf.blatt32.json +0 -236
- package/fixtures/erwartet/training.blatt32.json +0 -236
- package/fixtures/erwartet/verkauf-bar.blatt32.json +0 -176
- package/fixtures/erwartet/verkauf-karte.blatt32.json +0 -176
- package/fixtures/erwartet/verkauf-kleinunternehmer.blatt32.json +0 -182
- package/fixtures/kasse-meldungen-faelle.json +0 -32
- package/fixtures/oberflaeche.json +0 -558
- package/fixtures/rechnung-api-beispiele/brands-ok.json +0 -8
- package/fixtures/rechnung-api-beispiele/customer-get-fehler-beide.json +0 -15
- package/fixtures/rechnung-api-beispiele/setup-status-ok.json +0 -8
- package/fixtures/rechnung-api-beispiele/zahlung-fehler-ohne-schluessel.json +0 -14
- package/fixtures/rechnung-api-beispiele/zahlung-fehler-vor-ort.json +0 -15
- package/fixtures/rechnung-api-beispiele/zahlung-nachtrag.json +0 -14
- package/fixtures/rechnung-texte.json +0 -464
- /package/dist/cjs/{rechnung → invoice}/typen.js +0 -0
- /package/dist/esm/{rechnung → invoice}/typen.js +0 -0
- /package/fixtures/{erwartet/storno-rabatt.grid32.txt → expected/cancellation-discount.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-rabatt.grid48.txt → expected/cancellation-discount.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-voll.grid32.txt → expected/cancellation-full.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-voll.grid48.txt → expected/cancellation-full.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-teil.grid32.txt → expected/cancellation-partial.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-teil.grid48.txt → expected/cancellation-partial.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-voll.grid32.txt → expected/cancellation-split-full.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-voll.grid48.txt → expected/cancellation-split-full.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-teil.grid32.txt → expected/cancellation-split-partial.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-teil.grid48.txt → expected/cancellation-split-partial.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-eigener.grid32.txt → expected/card-custom.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-eigener.grid48.txt → expected/card-custom.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom-ios.grid32.txt → expected/card-gptom-ios.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom-ios.grid48.txt → expected/card-gptom-ios.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom.grid32.txt → expected/card-gptom.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom.grid48.txt → expected/card-gptom.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-cloud.grid32.txt → expected/card-hobex-cloud.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-cloud.grid48.txt → expected/card-hobex-cloud.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-hps.grid32.txt → expected/card-hobex-hps.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-hps.grid48.txt → expected/card-hobex-hps.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-mypos.grid32.txt → expected/card-mypos.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-mypos.grid48.txt → expected/card-mypos.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe-eps.grid32.txt → expected/card-stripe-eps.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe-eps.grid48.txt → expected/card-stripe-eps.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe.grid32.txt → expected/card-stripe.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe.grid48.txt → expected/card-stripe.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-sumup.grid32.txt → expected/card-sumup.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-sumup.grid48.txt → expected/card-sumup.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabattzeilen.grid32.txt → expected/discount-lines.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabattzeilen.grid48.txt → expected/discount-lines.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid32.txt → expected/discount-owner-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid48.txt → expected/discount-owner-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-einfach.grid32.txt → expected/discount-simple.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-einfach.grid48.txt → expected/discount-simple.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-trinkgeld.grid32.txt → expected/discount-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-trinkgeld.grid48.txt → expected/discount-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-wertgutschein.grid32.txt → expected/discount-value-voucher.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-wertgutschein.grid48.txt → expected/discount-value-voucher.grid48.txt} +0 -0
- /package/fixtures/{erwartet/logo-probe-hoch.raster32.txt → expected/logo-sample-tall.raster32.txt} +0 -0
- /package/fixtures/{erwartet/logo-probe.raster32.txt → expected/logo-sample.raster32.txt} +0 -0
- /package/fixtures/{erwartet/langer-artikelname.grid32.txt → expected/long-item-name.grid32.txt} +0 -0
- /package/fixtures/{erwartet/langer-artikelname.grid48.txt → expected/long-item-name.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-karte.grid32.txt → expected/sale-card.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-karte.grid48.txt → expected/sale-card.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-bar.grid32.txt → expected/sale-cash.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-bar.grid48.txt → expected/sale-cash.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid32.txt → expected/sale-small-business.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid48.txt → expected/sale-small-business.grid48.txt} +0 -0
- /package/fixtures/{erwartet/signaturausfall-verkauf.grid32.txt → expected/signature-outage-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/signaturausfall-verkauf.grid48.txt → expected/signature-outage-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-karte-karte-bar.grid32.txt → expected/split-card-card-cash.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-karte-karte-bar.grid48.txt → expected/split-card-card-cash.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-bar-rueckgeld.grid32.txt → expected/split-cash-change.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-bar-rueckgeld.grid48.txt → expected/split-cash-change.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-langer-betrag.grid32.txt → expected/split-long-amount.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-langer-betrag.grid48.txt → expected/split-long-amount.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid32.txt → expected/split-one-card-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid48.txt → expected/split-one-card-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid32.txt → expected/split-table-round-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid48.txt → expected/split-table-round-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-trinkgeld-karte.grid32.txt → expected/split-tip-card.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-trinkgeld-karte.grid48.txt → expected/split-tip-card.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid32.txt → expected/split-two-cards-same-provider.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid48.txt → expected/split-two-cards-same-provider.grid48.txt} +0 -0
- /package/fixtures/{erwartet/testkasse-verkauf.grid32.txt → expected/test-cashregister-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/testkasse-verkauf.grid48.txt → expected/test-cashregister-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet/testsignatur-verkauf.grid32.txt → expected/test-signature-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/testsignatur-verkauf.grid48.txt → expected/test-signature-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet → expected}/training.grid32.txt +0 -0
- /package/fixtures/{erwartet → expected}/training.grid48.txt +0 -0
- /package/fixtures/{erwartet/null-jahr.grid32.txt → expected/zero-annual.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-jahr.grid48.txt → expected/zero-annual.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-schluss.grid32.txt → expected/zero-final.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-schluss.grid48.txt → expected/zero-final.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-pruef.grid32.txt → expected/zero-manual.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-pruef.grid48.txt → expected/zero-manual.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-monat.grid32.txt → expected/zero-monthly.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-monat.grid48.txt → expected/zero-monthly.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-ausfall.grid32.txt → expected/zero-outage-end.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-ausfall.grid48.txt → expected/zero-outage-end.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-start.grid32.txt → expected/zero-start.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-start.grid48.txt → expected/zero-start.grid48.txt} +0 -0
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type TransportOptions } from '../client/transport.js';
|
|
2
2
|
import { type ReceiptCompany } from '../models/receipt-company.js';
|
|
3
|
-
import {
|
|
3
|
+
import type { PosSettings } from '../pos/settings.js';
|
|
4
4
|
/**
|
|
5
5
|
* Verbindungsangaben ohne Anmeldung — alles, was [TransportOptions] ausser der
|
|
6
|
-
* Anmeldung fuehrt. Alle Felder sind wahlfrei: ohne Angabe gelten
|
|
7
|
-
* Zeitlimit der Produktion und das
|
|
6
|
+
* Anmeldung fuehrt. Alle Felder sind wahlfrei: ohne Angabe gelten der Kassenweg
|
|
7
|
+
* der Produktion ([POS_BASE_URL]), das Zeitlimit der Produktion und das
|
|
8
|
+
* globale `fetch`. Die Web-Kasse gibt `posBaseUrl: '/api/v3'` (gleicher Ursprung).
|
|
8
9
|
*/
|
|
9
10
|
export type RegisterDeviceConnection = Omit<TransportOptions, 'auth'>;
|
|
10
11
|
/** Ausweis eines gekoppelten Geraets — Nachweis der beiden Folgeaufrufe. */
|
|
@@ -44,11 +45,11 @@ export interface RegisterGeo {
|
|
|
44
45
|
acc?: number;
|
|
45
46
|
}
|
|
46
47
|
/** Angaben, die Kopplung und Login zusaetzlich mitschicken duerfen. */
|
|
47
|
-
export interface
|
|
48
|
+
export interface RegisterDeviceInfo {
|
|
48
49
|
client?: RegisterClientInfo;
|
|
49
50
|
geo?: RegisterGeo | null;
|
|
50
51
|
}
|
|
51
|
-
export interface PairRegisterDeviceOptions extends RegisterDeviceConnection,
|
|
52
|
+
export interface PairRegisterDeviceOptions extends RegisterDeviceConnection, RegisterDeviceInfo {
|
|
52
53
|
/**
|
|
53
54
|
* Die Kasse ist schon auf einem anderen Geraet geoeffnet (BELEGT-Rueckfrage):
|
|
54
55
|
* `true` uebernimmt sie hierher und widerruft das alte Geraet.
|
|
@@ -67,14 +68,25 @@ export interface PairRegisterDeviceOptions extends RegisterDeviceConnection, Reg
|
|
|
67
68
|
/** Bezeichnung dieses Geraets in der Geraeteliste; ohne Angabe "Kasse". */
|
|
68
69
|
label?: string;
|
|
69
70
|
}
|
|
70
|
-
/**
|
|
71
|
+
/**
|
|
72
|
+
* Ergebnis der Kopplung: der vollstaendige Ausweis dieses Geraets.
|
|
73
|
+
*
|
|
74
|
+
* **Speicherformat der App bleibt, wie es ist** (Nachtrag §9, B2): wer den
|
|
75
|
+
* Ausweis ablegt, bildet `companyName`/`cashregisterLabel` auf seine
|
|
76
|
+
* bisherigen Felder ab (Web-Kasse: `betrieb`/`kasse`). Die Aufrufe dieses
|
|
77
|
+
* Pakets lesen aus einem abgelegten Satz nur `ownerUid`, `deviceId`,
|
|
78
|
+
* `deviceSecret` (und `cashregisterId` beim Login); weitere Felder eines alten
|
|
79
|
+
* Satzes stoeren nicht.
|
|
80
|
+
*/
|
|
71
81
|
export interface PairedRegisterDevice extends RegisterDeviceCredentials {
|
|
72
82
|
/** Kasse, an die die Kopplung dieses Geraet gebunden hat. */
|
|
73
83
|
cashregisterId: string;
|
|
74
|
-
/** Firmenname des Betriebs
|
|
84
|
+
/** Firmenname des Betriebs; Anzeige, kann leer sein. */
|
|
75
85
|
companyName: string;
|
|
76
|
-
/** Bezeichnung der Kasse (
|
|
86
|
+
/** Bezeichnung der Kasse (ohne Bezeichnung die Kassen-ID); Anzeige, kann leer sein. */
|
|
77
87
|
cashregisterLabel: string;
|
|
88
|
+
/** Die Kopplung gilt der Test-Umgebung des Betriebs (`kr_test_`-Konto). */
|
|
89
|
+
testEnvironment: boolean;
|
|
78
90
|
}
|
|
79
91
|
/**
|
|
80
92
|
* Art eines Kassen-Benutzers: eine Person oder ein Geraet (Sammelkonto). Ein
|
|
@@ -93,25 +105,25 @@ export interface RegisterUserSummary {
|
|
|
93
105
|
* Betriebs gesetzt: die Kasse zeigt ihm das Freifeld statt der Kaestchen.
|
|
94
106
|
* Das Backend sendet das Feld nur, wenn es zutrifft; gelesen ist es immer da.
|
|
95
107
|
*/
|
|
96
|
-
|
|
108
|
+
pinPolicyOutdated: boolean;
|
|
97
109
|
}
|
|
98
|
-
/** PIN-Regel des Betriebs
|
|
110
|
+
/** PIN-Regel des Betriebs: daraus baut die Kasse Kaestchen und Tastatur. */
|
|
99
111
|
export interface RegisterPinPolicy {
|
|
100
112
|
/** Feste Stellenzahl (Backend: 3 bis 6). */
|
|
101
|
-
|
|
102
|
-
/** `
|
|
103
|
-
|
|
113
|
+
length: number;
|
|
114
|
+
/** `digits` (nur 0-9) oder `alphanumeric` (0-9 plus Kopplungs-Alphabet). */
|
|
115
|
+
charset: 'digits' | 'alphanumeric' | (string & {});
|
|
104
116
|
}
|
|
105
|
-
/** Anmeldemodus des Geraets
|
|
106
|
-
export type RegisterLoginMode = '
|
|
117
|
+
/** Anmeldemodus des Geraets: Benutzerauswahl oder nur PIN. */
|
|
118
|
+
export type RegisterLoginMode = 'select_user' | 'pin';
|
|
107
119
|
/** Antwort von [listRegisterUsersForDevice]: Benutzer, Regel, Modus. */
|
|
108
120
|
export interface RegisterDeviceUsers {
|
|
109
121
|
/** Im Modus `pin` bewusst leer — Namen haben am nur-PIN-Geraet nichts verloren. */
|
|
110
122
|
users: RegisterUserSummary[];
|
|
111
123
|
/** Kassen-Einstellungen (betriebsweit + Geraet), gemischt mit den Standardwerten. */
|
|
112
|
-
settings:
|
|
113
|
-
/** Belegkopf-Daten des Betriebs (Name, Anschrift, UID, Fusszeilen)
|
|
114
|
-
|
|
124
|
+
settings: PosSettings;
|
|
125
|
+
/** Belegkopf-Daten des Betriebs (Name, Anschrift, UID, Fusszeilen), ohne Geheimnisse. */
|
|
126
|
+
receiptHeader: ReceiptCompany | null;
|
|
115
127
|
/**
|
|
116
128
|
* `null`, wenn das Backend (noch) keine Regel nennt — dann zeigt die Kasse
|
|
117
129
|
* das Freifeld, statt Kaestchen mit einer erratenen Stellenzahl.
|
|
@@ -119,17 +131,19 @@ export interface RegisterDeviceUsers {
|
|
|
119
131
|
policy: RegisterPinPolicy | null;
|
|
120
132
|
loginMode: RegisterLoginMode;
|
|
121
133
|
/** Der Betrieb verlangt die Ortung beim Login (Standortsperre an). */
|
|
122
|
-
|
|
134
|
+
locationLock: boolean;
|
|
123
135
|
/**
|
|
124
|
-
* Darf die gebundene Kasse ueberhaupt Belege erstellen? `
|
|
125
|
-
* nennt den Grund (ausser Betrieb,
|
|
126
|
-
* sperrt das Kassieren VOR dem ersten Beleg
|
|
127
|
-
* scheitern. Fehlt das Feld
|
|
136
|
+
* Darf die gebundene Kasse ueberhaupt Belege erstellen? `ready: false`
|
|
137
|
+
* nennt den Grund als Menschentext (ausser Betrieb, keine Signaturkarte,
|
|
138
|
+
* Startbeleg fehlt): die Kasse sperrt das Kassieren VOR dem ersten Beleg
|
|
139
|
+
* statt an createReceipt zu scheitern. Fehlt das Feld, gilt bereit.
|
|
128
140
|
*/
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}
|
|
141
|
+
cashregister?: {
|
|
142
|
+
ready: boolean;
|
|
143
|
+
reason?: string | null;
|
|
144
|
+
};
|
|
145
|
+
/** Das Geraet haengt an der Test-Umgebung des Betriebs. */
|
|
146
|
+
testEnvironment: boolean;
|
|
133
147
|
}
|
|
134
148
|
/**
|
|
135
149
|
* Rechte eines Kassen-Benutzers (Backend: `perms`, Vorlagen `PERMS_KASSIER`
|
|
@@ -169,7 +183,7 @@ export interface RegisterUserPerms {
|
|
|
169
183
|
}
|
|
170
184
|
/**
|
|
171
185
|
* Alle Rechte-Schluessel, die dieses Paket kennt — die Zwillinge pruefen
|
|
172
|
-
* dagegen, und ueber `fixtures/
|
|
186
|
+
* dagegen, und ueber `fixtures/surface.json` steht die Liste im Vertrag.
|
|
173
187
|
*
|
|
174
188
|
* `satisfies` schliesst die eine Richtung: ein Name, den [RegisterUserPerms]
|
|
175
189
|
* nicht fuehrt (Tippfehler, umbenanntes Recht), kommt hier nicht durch.
|
|
@@ -205,7 +219,7 @@ export interface RegisterUserSession {
|
|
|
205
219
|
}
|
|
206
220
|
export interface ListRegisterUsersForDeviceOptions extends RegisterDeviceConnection, RegisterDeviceCredentials {
|
|
207
221
|
}
|
|
208
|
-
export interface RegisterUserLoginOptions extends RegisterDeviceConnection, RegisterDeviceCredentials,
|
|
222
|
+
export interface RegisterUserLoginOptions extends RegisterDeviceConnection, RegisterDeviceCredentials, RegisterDeviceInfo {
|
|
209
223
|
/** Kassen-Benutzer aus [listRegisterUsersForDevice]. */
|
|
210
224
|
userId: string;
|
|
211
225
|
/**
|
|
@@ -219,7 +233,8 @@ export interface RegisterUserLoginOptions extends RegisterDeviceConnection, Regi
|
|
|
219
233
|
/**
|
|
220
234
|
* Eine belegte Kasse uebernehmen. Nur mit dem Recht `takeover` (Kassen-Chef);
|
|
221
235
|
* die aelteste laufende Sitzung wird dabei verdraengt. Ohne das Recht bleibt
|
|
222
|
-
* es bei der Abweisung
|
|
236
|
+
* es bei der Abweisung `cashregister_in_use` (Daten `deviceLabel`,
|
|
237
|
+
* `takeoverAllowed: false`, siehe [registerErrorDetails]).
|
|
223
238
|
*/
|
|
224
239
|
takeover?: boolean;
|
|
225
240
|
/**
|
|
@@ -232,7 +247,7 @@ export interface RegisterUserLoginOptions extends RegisterDeviceConnection, Regi
|
|
|
232
247
|
*/
|
|
233
248
|
takeoverSessionId?: string;
|
|
234
249
|
}
|
|
235
|
-
export interface RegisterPinLoginOptions extends RegisterDeviceConnection, RegisterDeviceCredentials,
|
|
250
|
+
export interface RegisterPinLoginOptions extends RegisterDeviceConnection, RegisterDeviceCredentials, RegisterDeviceInfo {
|
|
236
251
|
/**
|
|
237
252
|
* Die PIN allein — sie identifiziert UND authentifiziert (Geraete-Modus
|
|
238
253
|
* `pin`; das Backend haelt PINs je Betrieb eindeutig). Das Format prueft
|
|
@@ -275,12 +290,16 @@ export declare function unpairRegisterDevice(options: ListRegisterUsersForDevice
|
|
|
275
290
|
export interface RegisterSession {
|
|
276
291
|
id: string;
|
|
277
292
|
deviceId: string | null;
|
|
278
|
-
/**
|
|
279
|
-
|
|
293
|
+
/**
|
|
294
|
+
* Name des Geraets; `null`, wenn es keinen hat (unter `/v3` sendet das
|
|
295
|
+
* Backend dann `null` statt des frueheren Ersatzes „Kasse"). Die Oberflaeche
|
|
296
|
+
* waehlt ihren eigenen Ersatztext.
|
|
297
|
+
*/
|
|
298
|
+
deviceLabel: string | null;
|
|
280
299
|
startedAt: number | null;
|
|
281
300
|
expiresAt: number | null;
|
|
282
301
|
/** Laeuft diese Sitzung auf DIESEM Geraet? */
|
|
283
|
-
|
|
302
|
+
own: boolean;
|
|
284
303
|
/**
|
|
285
304
|
* Wer angemeldet ist. Fehlt an einem nur-PIN-Geraet: Dort zeigt schon die
|
|
286
305
|
* Benutzerliste keine Namen, und was dort nicht steht, darf hier nicht
|
|
@@ -290,7 +309,7 @@ export interface RegisterSession {
|
|
|
290
309
|
userName?: string;
|
|
291
310
|
}
|
|
292
311
|
/** Was eine Kasse gerade haelt -- Lizenzzahl und laufende Sitzungen. */
|
|
293
|
-
export interface
|
|
312
|
+
export interface RegisterSessionOverview {
|
|
294
313
|
/** Wie viele Sitzungen gleichzeitig laufen duerfen. */
|
|
295
314
|
licenses: number;
|
|
296
315
|
/** Aelteste zuerst: oben steht, was das Backend ohne Wahl verdraengen wuerde. */
|
|
@@ -310,7 +329,7 @@ export interface ListRegisterSessionsForDeviceOptions extends RegisterDeviceConn
|
|
|
310
329
|
* [listRegisterUsersForDevice]: An diesem Punkt gibt es weder Sitzung noch
|
|
311
330
|
* Token. Die Kasse bestimmt das Backend aus dem Geraet, nicht aus dem Aufruf.
|
|
312
331
|
*/
|
|
313
|
-
export declare function listRegisterSessionsForDevice(options: ListRegisterSessionsForDeviceOptions): Promise<
|
|
332
|
+
export declare function listRegisterSessionsForDevice(options: ListRegisterSessionsForDeviceOptions): Promise<RegisterSessionOverview>;
|
|
314
333
|
export declare function listRegisterUsersForDevice(options: ListRegisterUsersForDeviceOptions): Promise<RegisterDeviceUsers>;
|
|
315
334
|
/**
|
|
316
335
|
* Kassen-Benutzer per PIN anmelden. **Ohne Anmeldung** — dieser Aufruf
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { KasseneckValidationError } from '../client/errors.js';
|
|
2
2
|
import { createTransport } from '../client/transport.js';
|
|
3
3
|
import { fromReceiptCompanyPayload } from '../models/receipt-company.js';
|
|
4
|
-
import {
|
|
4
|
+
import { posSettingsFromWire } from '../pos/client.js';
|
|
5
5
|
/**
|
|
6
6
|
* Die drei Aufrufe, die **ohne jede Identitaet** laufen: Kopplung eines
|
|
7
7
|
* Geraets, Benutzerliste dieses Geraets, PIN-Anmeldung. Sie sind der Weg, auf
|
|
@@ -40,7 +40,7 @@ import { KASSE_BETRIEB_STANDARD, KASSE_GERAET_STANDARD, mergeKasseSettings, } fr
|
|
|
40
40
|
const ohneAnmeldung = () => ({ headers: {}, params: {} });
|
|
41
41
|
/**
|
|
42
42
|
* Alle Rechte-Schluessel, die dieses Paket kennt — die Zwillinge pruefen
|
|
43
|
-
* dagegen, und ueber `fixtures/
|
|
43
|
+
* dagegen, und ueber `fixtures/surface.json` steht die Liste im Vertrag.
|
|
44
44
|
*
|
|
45
45
|
* `satisfies` schliesst die eine Richtung: ein Name, den [RegisterUserPerms]
|
|
46
46
|
* nicht fuehrt (Tippfehler, umbenanntes Recht), kommt hier nicht durch.
|
|
@@ -83,8 +83,9 @@ export async function pairRegisterDevice(options) {
|
|
|
83
83
|
deviceSecret: pflichtfeld('pairRegisterDevice', daten, 'deviceSecret'),
|
|
84
84
|
ownerUid: pflichtfeld('pairRegisterDevice', daten, 'ownerUid'),
|
|
85
85
|
cashregisterId: pflichtfeld('pairRegisterDevice', daten, 'cashregisterId'),
|
|
86
|
-
companyName: text(daten?.['
|
|
87
|
-
cashregisterLabel: text(daten?.['
|
|
86
|
+
companyName: text(daten?.['companyName']),
|
|
87
|
+
cashregisterLabel: text(daten?.['cashregisterLabel']),
|
|
88
|
+
testEnvironment: daten?.['testEnvironment'] === true,
|
|
88
89
|
};
|
|
89
90
|
}
|
|
90
91
|
/**
|
|
@@ -139,10 +140,10 @@ export async function listRegisterSessionsForDevice(options) {
|
|
|
139
140
|
// nichts tun kann, ist schlimmer als keine.
|
|
140
141
|
id: pflichtfeld(name, roh, 'id'),
|
|
141
142
|
deviceId: typeof roh['deviceId'] === 'string' && roh['deviceId'] ? roh['deviceId'] : null,
|
|
142
|
-
deviceLabel: text(roh['deviceLabel']) ||
|
|
143
|
+
deviceLabel: text(roh['deviceLabel']) || null,
|
|
143
144
|
startedAt: typeof roh['startedAt'] === 'number' ? roh['startedAt'] : null,
|
|
144
145
|
expiresAt: typeof roh['expiresAt'] === 'number' ? roh['expiresAt'] : null,
|
|
145
|
-
|
|
146
|
+
own: roh['own'] === true,
|
|
146
147
|
// Nur uebernehmen, wenn wirklich einer kam: ein leerer String stuende
|
|
147
148
|
// in der Oberflaeche als namenlose Zeile, statt die Spalte wegzulassen.
|
|
148
149
|
...(typeof roh['userName'] === 'string' && roh['userName'] ? { userName: roh['userName'] } : {}),
|
|
@@ -170,49 +171,48 @@ export async function listRegisterUsersForDevice(options) {
|
|
|
170
171
|
id: pflichtfeld(name, roh, 'id'),
|
|
171
172
|
name: text(roh['name']),
|
|
172
173
|
kind: typeof roh['kind'] === 'string' && roh['kind'] ? roh['kind'] : 'person',
|
|
173
|
-
|
|
174
|
+
pinPolicyOutdated: roh['pinPolicyOutdated'] === true,
|
|
174
175
|
};
|
|
175
176
|
});
|
|
176
|
-
const settingsRoh =
|
|
177
|
-
const settings =
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
};
|
|
181
|
-
const bd = daten?.betriebsdaten;
|
|
182
|
-
const betriebsdaten = bd && typeof bd === 'object' ? fromReceiptCompanyPayload(bd) : null;
|
|
177
|
+
const settingsRoh = daten?.settings;
|
|
178
|
+
const settings = posSettingsFromWire(settingsRoh !== null && typeof settingsRoh === 'object' ? settingsRoh : null);
|
|
179
|
+
const kopf = daten?.receiptHeader;
|
|
180
|
+
const receiptHeader = kopf && typeof kopf === 'object' ? fromReceiptCompanyPayload(kopf) : null;
|
|
183
181
|
return {
|
|
184
182
|
users,
|
|
185
183
|
policy: regel(daten?.policy),
|
|
186
|
-
|
|
184
|
+
// Nur `pin` heisst nur-PIN; alles andere (auch ein kuenftiger Wert) zeigt
|
|
185
|
+
// die Auswahl: die Namen stehen dann in `users`, und das Backend weist
|
|
186
|
+
// eine Anmeldung ohne Auswahl ohnehin mit `login_mode_select_user` ab.
|
|
187
|
+
loginMode: daten?.loginMode === 'pin' ? 'pin' : 'select_user',
|
|
187
188
|
settings,
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
//
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
kasse: kasseBereit(daten?.kasse),
|
|
189
|
+
receiptHeader,
|
|
190
|
+
locationLock: daten?.locationLock === true,
|
|
191
|
+
// Fehlt das Feld, bleibt es undefined: dann gilt bereit.
|
|
192
|
+
...(kasseBereit(daten?.cashregister) ? { cashregister: kasseBereit(daten?.cashregister) } : {}),
|
|
193
|
+
testEnvironment: daten?.testEnvironment === true,
|
|
194
194
|
};
|
|
195
195
|
}
|
|
196
196
|
function kasseBereit(wert) {
|
|
197
197
|
if (typeof wert !== 'object' || wert === null || Array.isArray(wert))
|
|
198
198
|
return undefined;
|
|
199
199
|
const roh = wert;
|
|
200
|
-
if (typeof roh['
|
|
200
|
+
if (typeof roh['ready'] !== 'boolean')
|
|
201
201
|
return undefined;
|
|
202
|
-
return {
|
|
202
|
+
return { ready: roh['ready'], reason: typeof roh['reason'] === 'string' ? roh['reason'] : null };
|
|
203
203
|
}
|
|
204
204
|
/** Die Regel aus der Antwort — oder `null`, wenn keine brauchbare kommt. */
|
|
205
205
|
function regel(wert) {
|
|
206
206
|
if (typeof wert !== 'object' || wert === null || Array.isArray(wert))
|
|
207
207
|
return null;
|
|
208
208
|
const roh = wert;
|
|
209
|
-
const
|
|
210
|
-
const
|
|
211
|
-
if (typeof
|
|
209
|
+
const length = roh['length'];
|
|
210
|
+
const charset = roh['charset'];
|
|
211
|
+
if (typeof length !== 'number' || !Number.isInteger(length) || length < 1)
|
|
212
212
|
return null;
|
|
213
|
-
if (typeof
|
|
213
|
+
if (typeof charset !== 'string' || charset === '')
|
|
214
214
|
return null;
|
|
215
|
-
return {
|
|
215
|
+
return { length, charset: charset };
|
|
216
216
|
}
|
|
217
217
|
/**
|
|
218
218
|
* Kassen-Benutzer per PIN anmelden. **Ohne Anmeldung** — dieser Aufruf
|
|
@@ -300,7 +300,11 @@ function sitzungAusAntwort(name, daten) {
|
|
|
300
300
|
},
|
|
301
301
|
};
|
|
302
302
|
}
|
|
303
|
-
/**
|
|
303
|
+
/**
|
|
304
|
+
* Transport ohne Anmeldung; `auth` steht zuletzt und ist damit nicht zu
|
|
305
|
+
* ueberschreiben. Ohne eigene Basis gehen diese Aufrufe an den Kassenweg: sie
|
|
306
|
+
* sind reine Kassenaufrufe, der Transport leitet sie dorthin.
|
|
307
|
+
*/
|
|
304
308
|
function transportFuer(verbindung) {
|
|
305
309
|
return createTransport({ ...verbindung, auth: ohneAnmeldung });
|
|
306
310
|
}
|
|
@@ -19,11 +19,11 @@ import type { InternerTransport } from '../client/aufrufe.js';
|
|
|
19
19
|
* seit 1970).
|
|
20
20
|
*
|
|
21
21
|
* Die Sitzung lebt 90 Sekunden; die Browser-Kasse erneuert alle 30. Ist sie
|
|
22
|
-
* bereits beendet oder uebernommen, antwortet das Backend
|
|
23
|
-
*
|
|
24
|
-
* `registerUserLogin`.
|
|
22
|
+
* bereits beendet oder uebernommen, antwortet das Backend mit dem Code
|
|
23
|
+
* `session_expired` bzw. `session_ended` (siehe [isRegisterError]); dann hilft
|
|
24
|
+
* nur eine neue Anmeldung ueber `registerUserLogin` oder `registerPinLogin`.
|
|
25
25
|
*/
|
|
26
|
-
export declare function renewRegisterSession(
|
|
26
|
+
export declare function renewRegisterSession(transport: InternerTransport): Promise<number>;
|
|
27
27
|
/**
|
|
28
28
|
* Sitzung beenden und den Lizenzplatz sofort freigeben — der regulaere Weg des
|
|
29
29
|
* Abmeldens.
|
|
@@ -34,4 +34,4 @@ export declare function renewRegisterSession(rufen: InternerTransport): Promise<
|
|
|
34
34
|
* einer harmlosen Vertragsaenderung — ausgerechnet beim Abmelden, dem Aufruf,
|
|
35
35
|
* der auch dann durchgehen soll, wenn sonst nichts mehr geht.
|
|
36
36
|
*/
|
|
37
|
-
export declare function endRegisterSession(
|
|
37
|
+
export declare function endRegisterSession(transport: InternerTransport): Promise<void>;
|
|
@@ -19,12 +19,12 @@ import { KasseneckValidationError } from '../client/errors.js';
|
|
|
19
19
|
* seit 1970).
|
|
20
20
|
*
|
|
21
21
|
* Die Sitzung lebt 90 Sekunden; die Browser-Kasse erneuert alle 30. Ist sie
|
|
22
|
-
* bereits beendet oder uebernommen, antwortet das Backend
|
|
23
|
-
*
|
|
24
|
-
* `registerUserLogin`.
|
|
22
|
+
* bereits beendet oder uebernommen, antwortet das Backend mit dem Code
|
|
23
|
+
* `session_expired` bzw. `session_ended` (siehe [isRegisterError]); dann hilft
|
|
24
|
+
* nur eine neue Anmeldung ueber `registerUserLogin` oder `registerPinLogin`.
|
|
25
25
|
*/
|
|
26
|
-
export async function renewRegisterSession(
|
|
27
|
-
const daten = await
|
|
26
|
+
export async function renewRegisterSession(transport) {
|
|
27
|
+
const daten = await transport('renewRegisterSession');
|
|
28
28
|
const expiresAt = daten?.expiresAt;
|
|
29
29
|
if (typeof expiresAt !== 'number' || !Number.isFinite(expiresAt)) {
|
|
30
30
|
// Ohne brauchbaren Ablaufzeitpunkt weiss die Kasse nicht, wann sie das
|
|
@@ -43,6 +43,6 @@ export async function renewRegisterSession(rufen) {
|
|
|
43
43
|
* einer harmlosen Vertragsaenderung — ausgerechnet beim Abmelden, dem Aufruf,
|
|
44
44
|
* der auch dann durchgehen soll, wenn sonst nichts mehr geht.
|
|
45
45
|
*/
|
|
46
|
-
export async function endRegisterSession(
|
|
47
|
-
await
|
|
46
|
+
export async function endRegisterSession(transport) {
|
|
47
|
+
await transport('endRegisterSession');
|
|
48
48
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type SchemaEintrag, type SchemaObjekt } from './vokabular.js';
|
|
2
|
+
export type Objekt = Record<string, unknown>;
|
|
3
|
+
export declare const hat: (o: object, k: string) => boolean;
|
|
4
|
+
export declare const istObjekt: (w: unknown) => w is Objekt;
|
|
5
|
+
/** Schema-Eintrag zerlegt: innerer Name, Unterschema (ohne `__`) und ob es eine Liste ist. */
|
|
6
|
+
export declare function regel(eintrag: SchemaEintrag): {
|
|
7
|
+
innen: string;
|
|
8
|
+
unter: SchemaObjekt | null;
|
|
9
|
+
liste: boolean;
|
|
10
|
+
};
|
|
11
|
+
/** Innere Namen einer Schema-Ebene (was der Server innen an dieser Stelle kennt). */
|
|
12
|
+
export declare function innereNamen(schema: SchemaObjekt): Map<string, string>;
|
|
13
|
+
/**
|
|
14
|
+
* Ein Belegdokument, wie Handler und Rand es vor der Uebersetzung sehen:
|
|
15
|
+
* ohne Storno-Marke (storno-core.ohneInterneStornoFelder, Rand
|
|
16
|
+
* ohneStornoMarke). Alles andere bleibt woertlich, auch `pruefangaben` im
|
|
17
|
+
* Beleg selbst (der Server reicht sie so durch). Wirft, wenn es kein
|
|
18
|
+
* Belegdokument ist.
|
|
19
|
+
*/
|
|
20
|
+
export declare function _storedReceiptInner(doc: unknown, functionName: string): Objekt;
|
|
21
|
+
/**
|
|
22
|
+
* Registrierdaten der Huelle aus den beim Ausstellen festgehaltenen
|
|
23
|
+
* `pruefangaben` (Zwilling von `pruefangabenFuerBeleg`, erster Zweig): genau
|
|
24
|
+
* die zwei Felder, je ueber [alsIso].
|
|
25
|
+
*/
|
|
26
|
+
export declare function pruefangabenDerHuelle(p: Objekt): Objekt;
|
|
27
|
+
/**
|
|
28
|
+
* Eine Beleg-Huelle der inneren Form (`receipt`, Betriebsfelder, `kopfId`,
|
|
29
|
+
* `pruefangaben`, `testKasse` ...) in die Drahtform von `getReceipt` unter
|
|
30
|
+
* `/api/v3` (Kanal `app`: Anbieterdaten bleiben).
|
|
31
|
+
*/
|
|
32
|
+
export declare function _receiptEnvelopeToWire(huelle: Objekt): Objekt;
|
|
33
|
+
/**
|
|
34
|
+
* Ein Belegdokument (`users/{uid}/cashregisters/{id}/receipts/{id}`) in der
|
|
35
|
+
* Form von `data.receipt` einer `/api/v3`-Antwort (Kanal `app`: Anbieterdaten
|
|
36
|
+
* bleiben). Wirft, wenn es kein Belegdokument ist.
|
|
37
|
+
*/
|
|
38
|
+
export declare function _storedReceiptToWire(doc: unknown, functionName?: string): Objekt;
|
|
39
|
+
/**
|
|
40
|
+
* Ein Artikeldokument (`users/{uid}/articles/{id}`) in der Form eines
|
|
41
|
+
* Eintrags von `listMyArticles` unter `/api/v3`. Vor dem Rand ergaenzt der
|
|
42
|
+
* Handler `groupId`/`revenueGroupId` (fehlt -> `null`) und die Kachel
|
|
43
|
+
* (article-endpoints.js listMyArticles); das steht nicht im Vertrag.
|
|
44
|
+
*/
|
|
45
|
+
export declare function _storedArticleToWire(id: string, doc: unknown, functionName?: string): Objekt;
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { KasseneckValidationError } from '../client/errors.js';
|
|
2
|
+
import { ARTIKEL_FELDER, KATALOGE, SCHEMAS } from './vokabular.js';
|
|
3
|
+
export const hat = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
|
|
4
|
+
export const istObjekt = (w) => w !== null && typeof w === 'object' && !Array.isArray(w);
|
|
5
|
+
/** Schema-Eintrag zerlegt: innerer Name, Unterschema (ohne `__`) und ob es eine Liste ist. */
|
|
6
|
+
export function regel(eintrag) {
|
|
7
|
+
const liste = Array.isArray(eintrag);
|
|
8
|
+
const kern = (liste ? eintrag[0] : eintrag);
|
|
9
|
+
if (typeof kern === 'string')
|
|
10
|
+
return { innen: kern, unter: null, liste };
|
|
11
|
+
const { __: innen, ...unter } = kern;
|
|
12
|
+
return { innen: innen, unter: unter, liste };
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Schluessel innen -> aussen (Zwilling von `schluessel(obj, schema, 'aus')`).
|
|
16
|
+
* Kopiert, veraendert die Eingabe nie; ein Treffer wandert wie am Server ans
|
|
17
|
+
* Ende des Objekts.
|
|
18
|
+
*/
|
|
19
|
+
function schluesselNachAussen(obj, schema) {
|
|
20
|
+
if (!istObjekt(obj))
|
|
21
|
+
return obj;
|
|
22
|
+
const raus = { ...obj };
|
|
23
|
+
for (const [aussen, eintrag] of Object.entries(schema)) {
|
|
24
|
+
if (aussen === '__')
|
|
25
|
+
continue;
|
|
26
|
+
const { innen, unter, liste } = regel(eintrag);
|
|
27
|
+
if (!hat(raus, innen))
|
|
28
|
+
continue;
|
|
29
|
+
let wert = raus[innen];
|
|
30
|
+
if (unter) {
|
|
31
|
+
wert = liste ? (Array.isArray(wert) ? wert.map((e) => schluesselNachAussen(e, unter)) : wert) : schluesselNachAussen(wert, unter);
|
|
32
|
+
}
|
|
33
|
+
delete raus[innen];
|
|
34
|
+
raus[aussen] = wert;
|
|
35
|
+
}
|
|
36
|
+
return raus;
|
|
37
|
+
}
|
|
38
|
+
/** Innere Namen einer Schema-Ebene (was der Server innen an dieser Stelle kennt). */
|
|
39
|
+
export function innereNamen(schema) {
|
|
40
|
+
const raus = new Map();
|
|
41
|
+
for (const [aussen, eintrag] of Object.entries(schema))
|
|
42
|
+
if (aussen !== '__')
|
|
43
|
+
raus.set(regel(eintrag).innen, aussen);
|
|
44
|
+
return raus;
|
|
45
|
+
}
|
|
46
|
+
/** Wert an einem aeusseren Pfad (`a.b`, `a[].b`) abbilden (Zwilling von `anPfad`). */
|
|
47
|
+
function anPfad(obj, teile, fn) {
|
|
48
|
+
if (obj == null || teile.length === 0 || typeof obj !== 'object')
|
|
49
|
+
return obj;
|
|
50
|
+
const [kopf, ...rest] = teile;
|
|
51
|
+
const liste = kopf.endsWith('[]');
|
|
52
|
+
const name = liste ? kopf.slice(0, -2) : kopf;
|
|
53
|
+
if (!hat(obj, name))
|
|
54
|
+
return obj;
|
|
55
|
+
const wert = obj[name];
|
|
56
|
+
let neu;
|
|
57
|
+
if (liste)
|
|
58
|
+
neu = Array.isArray(wert) ? wert.map((e) => (rest.length ? anPfad(e, rest, fn) : fn(e))) : wert;
|
|
59
|
+
else
|
|
60
|
+
neu = rest.length ? anPfad(wert, rest, fn) : fn(wert);
|
|
61
|
+
return { ...obj, [name]: neu };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Werte ueber die Kataloge des Vertrags abbilden (Zwilling von
|
|
65
|
+
* `werteAbbilden`). Ein Wert, den der Katalog nicht kennt, bleibt woertlich
|
|
66
|
+
* stehen, wie am Server.
|
|
67
|
+
*/
|
|
68
|
+
function werteNachAussen(obj, werte) {
|
|
69
|
+
let raus = obj;
|
|
70
|
+
for (const [pfad, { $catalog }] of Object.entries(werte)) {
|
|
71
|
+
const katalog = KATALOGE[$catalog];
|
|
72
|
+
if (!katalog)
|
|
73
|
+
throw new Error(`stored: Katalog ${$catalog} fehlt im Vokabular`);
|
|
74
|
+
raus = anPfad(raus, pfad.split('.'), (v) => (typeof v === 'string' && hat(katalog, v) ? katalog[v] : v));
|
|
75
|
+
}
|
|
76
|
+
return raus;
|
|
77
|
+
}
|
|
78
|
+
/** Englische Werte eines Katalogs (was an dieser Stelle hinaus darf). */
|
|
79
|
+
const aeussereWerte = (name) => new Set(Object.values(KATALOGE[name] ?? {}));
|
|
80
|
+
// ---- Belege -----------------------------------------------------------------
|
|
81
|
+
/**
|
|
82
|
+
* Interne Marke der Storno-Reservierung: `stornoMarke` am Storno-Beleg,
|
|
83
|
+
* `marke` im Bezug und in `cancellations[]`. Handler
|
|
84
|
+
* (storno-core.ohneInterneStornoFelder) und Rand (ohneStornoMarke) nehmen sie
|
|
85
|
+
* heraus; der Vertrag nennt die Namen nicht (nur `$function: belegJeKanal`).
|
|
86
|
+
*/
|
|
87
|
+
const STORNO_MARKE = 'stornoMarke';
|
|
88
|
+
const MARKE = 'marke';
|
|
89
|
+
const ohneMarke = (o) => {
|
|
90
|
+
if (!istObjekt(o) || !hat(o, MARKE))
|
|
91
|
+
return o;
|
|
92
|
+
const { [MARKE]: _m, ...rest } = o;
|
|
93
|
+
return rest;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Zwilling von `beleg-pruefangaben.alsIso`: leer (auch 0, '') -> null;
|
|
97
|
+
* Firestore-Zeitstempel, Zahl oder Zeichenkette -> ISO-Zeitpunkt in UTC;
|
|
98
|
+
* nicht lesbar -> null.
|
|
99
|
+
*/
|
|
100
|
+
function alsIso(ts) {
|
|
101
|
+
if (!ts)
|
|
102
|
+
return null;
|
|
103
|
+
let d = ts;
|
|
104
|
+
if (typeof d.toDate === 'function')
|
|
105
|
+
d = d.toDate();
|
|
106
|
+
if (typeof d === 'number' || typeof d === 'string')
|
|
107
|
+
d = new Date(d);
|
|
108
|
+
return d instanceof Date && !Number.isNaN(d.getTime()) ? d.toISOString() : null;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Ein Belegdokument, wie Handler und Rand es vor der Uebersetzung sehen:
|
|
112
|
+
* ohne Storno-Marke (storno-core.ohneInterneStornoFelder, Rand
|
|
113
|
+
* ohneStornoMarke). Alles andere bleibt woertlich, auch `pruefangaben` im
|
|
114
|
+
* Beleg selbst (der Server reicht sie so durch). Wirft, wenn es kein
|
|
115
|
+
* Belegdokument ist.
|
|
116
|
+
*/
|
|
117
|
+
export function _storedReceiptInner(doc, functionName) {
|
|
118
|
+
if (!istObjekt(doc) || typeof doc.receiptId !== 'string') {
|
|
119
|
+
throw new KasseneckValidationError(functionName, 'Kein Belegdokument (receiptId fehlt)', 'response');
|
|
120
|
+
}
|
|
121
|
+
const { [STORNO_MARKE]: _s, ...beleg } = doc;
|
|
122
|
+
if (hat(beleg, 'cancellationOf'))
|
|
123
|
+
beleg.cancellationOf = ohneMarke(beleg.cancellationOf);
|
|
124
|
+
if (Array.isArray(beleg.cancellations))
|
|
125
|
+
beleg.cancellations = beleg.cancellations.map(ohneMarke);
|
|
126
|
+
return beleg;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Registrierdaten der Huelle aus den beim Ausstellen festgehaltenen
|
|
130
|
+
* `pruefangaben` (Zwilling von `pruefangabenFuerBeleg`, erster Zweig): genau
|
|
131
|
+
* die zwei Felder, je ueber [alsIso].
|
|
132
|
+
*/
|
|
133
|
+
export function pruefangabenDerHuelle(p) {
|
|
134
|
+
return { karteRegistriertAm: alsIso(p.karteRegistriertAm), kasseRegistriertAm: alsIso(p.kasseRegistriertAm) };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Eine Beleg-Huelle der inneren Form (`receipt`, Betriebsfelder, `kopfId`,
|
|
138
|
+
* `pruefangaben`, `testKasse` ...) in die Drahtform von `getReceipt` unter
|
|
139
|
+
* `/api/v3` (Kanal `app`: Anbieterdaten bleiben).
|
|
140
|
+
*/
|
|
141
|
+
export function _receiptEnvelopeToWire(huelle) {
|
|
142
|
+
const schema = SCHEMAS.getReceipt;
|
|
143
|
+
return werteNachAussen(schluesselNachAussen(huelle, schema.data), schema.werte);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Ein Belegdokument (`users/{uid}/cashregisters/{id}/receipts/{id}`) in der
|
|
147
|
+
* Form von `data.receipt` einer `/api/v3`-Antwort (Kanal `app`: Anbieterdaten
|
|
148
|
+
* bleiben). Wirft, wenn es kein Belegdokument ist.
|
|
149
|
+
*/
|
|
150
|
+
export function _storedReceiptToWire(doc, functionName = 'fromStoredReceipt') {
|
|
151
|
+
return _receiptEnvelopeToWire({ receipt: _storedReceiptInner(doc, functionName) }).receipt;
|
|
152
|
+
}
|
|
153
|
+
// ---- Artikel ------------------------------------------------------------------
|
|
154
|
+
/**
|
|
155
|
+
* Zwilling von `kachelAttribute` (article-groups-core): sichtbar, wenn nicht
|
|
156
|
+
* ausdruecklich aus; Reihenfolge ganzzahlig ab 0, sonst 0.
|
|
157
|
+
*/
|
|
158
|
+
function kachelAttribute(e) {
|
|
159
|
+
const k = istObjekt(e) ? e : {};
|
|
160
|
+
return {
|
|
161
|
+
sichtbar: typeof k.sichtbar === 'boolean' ? k.sichtbar : true,
|
|
162
|
+
sort: Number.isInteger(k.sort) && k.sort >= 0 ? k.sort : 0,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Nur bekannte Felder hinaus (Zwilling von `nurBekannte`): ein Feld, das
|
|
167
|
+
* kein Schreibweg kennt, und ein Katalogwert, den der Katalog nicht kennt,
|
|
168
|
+
* fallen weg; `undefined` ebenso.
|
|
169
|
+
*/
|
|
170
|
+
function nurBekannte(obj, erlaubt, werte = {}) {
|
|
171
|
+
const raus = {};
|
|
172
|
+
for (const [k, w] of Object.entries(obj)) {
|
|
173
|
+
if (w === undefined || !erlaubt.has(k))
|
|
174
|
+
continue;
|
|
175
|
+
if (hat(werte, k) && w !== null && !werte[k].has(w))
|
|
176
|
+
continue;
|
|
177
|
+
raus[k] = w;
|
|
178
|
+
}
|
|
179
|
+
return raus;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Ein Artikeldokument (`users/{uid}/articles/{id}`) in der Form eines
|
|
183
|
+
* Eintrags von `listMyArticles` unter `/api/v3`. Vor dem Rand ergaenzt der
|
|
184
|
+
* Handler `groupId`/`revenueGroupId` (fehlt -> `null`) und die Kachel
|
|
185
|
+
* (article-endpoints.js listMyArticles); das steht nicht im Vertrag.
|
|
186
|
+
*/
|
|
187
|
+
export function _storedArticleToWire(id, doc, functionName = 'fromStoredArticle') {
|
|
188
|
+
if (typeof id !== 'string' || id === '' || !istObjekt(doc)) {
|
|
189
|
+
throw new KasseneckValidationError(functionName, 'Kein Artikeldokument (id oder Daten fehlen)', 'response');
|
|
190
|
+
}
|
|
191
|
+
const a = doc;
|
|
192
|
+
const handler = {
|
|
193
|
+
id, ...a, groupId: a.groupId || null, revenueGroupId: a.revenueGroupId || null, kasse: kachelAttribute(a.kasse),
|
|
194
|
+
create_time: undefined, update_time: undefined,
|
|
195
|
+
};
|
|
196
|
+
const schema = SCHEMAS.listMyArticles;
|
|
197
|
+
const huelle = werteNachAussen(schluesselNachAussen({ articles: [handler] }, schema.data), schema.werte);
|
|
198
|
+
const artikel = huelle.articles[0];
|
|
199
|
+
const katalog = (pfad) => aeussereWerte(schema.werte[pfad].$catalog);
|
|
200
|
+
const raus = nurBekannte(artikel, new Set(ARTIKEL_FELDER), {
|
|
201
|
+
quantityRule: katalog('articles[].quantityRule'), e1aGroup: katalog('articles[].e1aGroup'),
|
|
202
|
+
});
|
|
203
|
+
if (istObjekt(raus.tile)) {
|
|
204
|
+
const kachel = regel(regel(schema.data.articles).unter.tile).unter;
|
|
205
|
+
raus.tile = nurBekannte(raus.tile, new Set(Object.keys(kachel)));
|
|
206
|
+
}
|
|
207
|
+
return raus;
|
|
208
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type Objekt } from './draht.js';
|
|
2
|
+
/**
|
|
3
|
+
* Gespeicherte Einstellungen `{ betrieb, geraet }` in der Drahtform, nur die
|
|
4
|
+
* gespeicherten und gueltigen Felder (die Vorgaben mischt der Leser dazu),
|
|
5
|
+
* und die weggelassenen aeusseren Pfade.
|
|
6
|
+
*/
|
|
7
|
+
export declare function _storedPosSettingsToWire(stored: {
|
|
8
|
+
betrieb?: unknown;
|
|
9
|
+
geraet?: unknown;
|
|
10
|
+
} | null | undefined): {
|
|
11
|
+
business: Objekt;
|
|
12
|
+
device: Objekt;
|
|
13
|
+
weggelassen: string[];
|
|
14
|
+
};
|
|
15
|
+
/** Nur fuer den Test: die Feldliste der Pruefer (muss mit der Vorgabe deckungsgleich sein). */
|
|
16
|
+
export declare const _PRUEFER_FELDER: Readonly<{
|
|
17
|
+
business: string[];
|
|
18
|
+
device: string[];
|
|
19
|
+
standard: {
|
|
20
|
+
business: string[];
|
|
21
|
+
device: string[];
|
|
22
|
+
};
|
|
23
|
+
}>;
|