@kreiseck/kasseneck-api 0.31.0 → 1.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +317 -0
- package/README.de.md +11 -7
- package/README.md +509 -126
- package/dist/cjs/client/api.d.ts +7 -6
- package/dist/cjs/client/api.js +2 -2
- package/dist/cjs/client/aufrufe.d.ts +29 -5
- package/dist/cjs/client/aufrufe.js +114 -2
- package/dist/cjs/client/auth.d.ts +2 -0
- package/dist/cjs/client/auth.js +17 -1
- package/dist/cjs/client/cashregisters.d.ts +1 -1
- package/dist/cjs/client/cashregisters.js +2 -2
- package/dist/cjs/client/errors.d.ts +94 -19
- package/dist/cjs/client/errors.js +132 -28
- package/dist/cjs/client/fehlercodes.d.ts +9 -0
- package/dist/cjs/client/fehlercodes.js +36 -0
- package/dist/cjs/client/index.d.ts +5 -5
- package/dist/cjs/client/index.js +11 -3
- package/dist/cjs/client/receipts.d.ts +131 -124
- package/dist/cjs/client/receipts.js +196 -137
- package/dist/cjs/client/reports.d.ts +26 -4
- package/dist/cjs/client/reports.js +37 -4
- package/dist/cjs/client/status.d.ts +3 -3
- package/dist/cjs/client/status.js +7 -7
- package/dist/cjs/client/transport.d.ts +56 -4
- package/dist/cjs/client/transport.js +234 -25
- package/dist/cjs/enums/vat-rate.d.ts +2 -2
- package/dist/cjs/enums/vat-rate.js +1 -1
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.js +42 -13
- package/dist/{esm/rechnung → cjs/invoice}/api.d.ts +18 -17
- package/dist/cjs/{rechnung → invoice}/api.js +6 -6
- package/dist/{esm/rechnung → cjs/invoice}/auth.d.ts +2 -2
- package/dist/cjs/{rechnung → invoice}/auth.js +5 -5
- package/dist/{esm/rechnung/rechnen.d.ts → cjs/invoice/calc.d.ts} +27 -27
- package/dist/cjs/{rechnung/rechnen.js → invoice/calc.js} +54 -54
- package/dist/{esm/rechnung → cjs/invoice}/endpunkte.d.ts +23 -21
- package/dist/cjs/{rechnung → invoice}/endpunkte.js +52 -42
- package/dist/cjs/invoice/fehler.d.ts +31 -0
- package/dist/cjs/invoice/fehler.js +39 -0
- package/dist/cjs/invoice/index.d.ts +21 -0
- package/dist/cjs/invoice/index.js +86 -0
- package/dist/cjs/{rechnung → invoice}/summen.d.ts +12 -12
- package/dist/cjs/{rechnung → invoice}/summen.js +14 -14
- package/dist/cjs/invoice/texte.d.ts +224 -0
- package/dist/cjs/invoice/texte.js +425 -0
- package/dist/{esm/rechnung → cjs/invoice}/typen.d.ts +32 -11
- package/dist/cjs/{rechnung → invoice}/vertrag.d.ts +97 -71
- package/dist/cjs/{rechnung → invoice}/vertrag.js +144 -82
- package/dist/cjs/models/cancellation.d.ts +43 -24
- package/dist/cjs/models/cancellation.js +94 -46
- package/dist/cjs/models/hobex-receipt.d.ts +3 -3
- package/dist/cjs/models/hobex-receipt.js +35 -35
- package/dist/cjs/models/index.d.ts +6 -5
- package/dist/cjs/models/index.js +22 -2
- package/dist/cjs/models/payment-errors.d.ts +32 -15
- package/dist/cjs/models/payment-errors.js +80 -32
- package/dist/cjs/models/receipt-company.d.ts +6 -5
- package/dist/cjs/models/receipt-company.js +4 -4
- package/dist/cjs/models/receipt-email.d.ts +32 -18
- package/dist/cjs/models/receipt-email.js +69 -24
- package/dist/cjs/models/receipt-errors.d.ts +39 -0
- package/dist/cjs/models/receipt-errors.js +94 -0
- package/dist/cjs/models/receipt-item.d.ts +9 -1
- package/dist/cjs/models/receipt-item.js +3 -0
- package/dist/cjs/models/receipt-summary.d.ts +10 -4
- package/dist/cjs/models/receipt-summary.js +10 -4
- package/dist/cjs/models/receipt.d.ts +31 -2
- package/dist/cjs/models/receipt.js +12 -1
- package/dist/cjs/models/voucher.d.ts +7 -6
- package/dist/cjs/models/voucher.js +2 -7
- package/dist/cjs/partner/ablauf.d.ts +10 -10
- package/dist/cjs/partner/ablauf.js +29 -29
- package/dist/cjs/partner/api.d.ts +26 -23
- package/dist/cjs/partner/api.js +11 -13
- package/dist/cjs/partner/auth.d.ts +1 -1
- package/dist/cjs/partner/auth.js +2 -2
- package/dist/cjs/partner/betrieb.d.ts +7 -7
- package/dist/cjs/partner/betrieb.js +10 -10
- package/dist/cjs/partner/endpunkte.d.ts +27 -14
- package/dist/cjs/partner/endpunkte.js +80 -39
- package/dist/cjs/partner/fehler.d.ts +60 -30
- package/dist/cjs/partner/fehler.js +99 -43
- package/dist/cjs/partner/index.d.ts +13 -12
- package/dist/cjs/partner/index.js +35 -22
- package/dist/cjs/partner/secret.d.ts +3 -3
- package/dist/cjs/partner/secret.js +6 -6
- package/dist/cjs/partner/typen.d.ts +129 -71
- package/dist/cjs/partner/typen.js +76 -3
- package/dist/cjs/partner/webhook-signatur.d.ts +2 -2
- package/dist/cjs/partner/webhook-signatur.js +12 -12
- package/dist/cjs/partner/webhooks.d.ts +60 -32
- package/dist/cjs/partner/webhooks.js +40 -34
- package/dist/cjs/payments/hobex.d.ts +11 -3
- package/dist/cjs/payments/hobex.js +17 -5
- package/dist/cjs/payments/stripe.d.ts +5 -2
- package/dist/cjs/payments/stripe.js +10 -5
- package/dist/cjs/pos/artikel.d.ts +90 -0
- package/dist/cjs/pos/artikel.js +89 -0
- package/dist/cjs/pos/client.d.ts +27 -0
- package/dist/cjs/pos/client.js +144 -0
- package/dist/cjs/pos/drucker.d.ts +86 -0
- package/dist/cjs/pos/drucker.js +78 -0
- package/dist/cjs/pos/errors.d.ts +36 -0
- package/dist/cjs/pos/errors.js +95 -0
- package/dist/cjs/pos/index.d.ts +15 -0
- package/dist/cjs/pos/index.js +102 -0
- package/dist/cjs/pos/settings.d.ts +313 -0
- package/dist/cjs/pos/settings.js +376 -0
- package/dist/cjs/pos/texte.d.ts +883 -0
- package/dist/cjs/pos/texte.js +489 -0
- package/dist/cjs/{kasse → pos}/trinkgeld.d.ts +1 -1
- package/dist/cjs/{kasse → pos}/trinkgeld.js +2 -2
- package/dist/cjs/printing/escpos.d.ts +29 -29
- package/dist/cjs/printing/escpos.js +61 -61
- package/dist/cjs/printing/index.d.ts +2 -2
- package/dist/cjs/printing/index.js +17 -17
- package/dist/cjs/printing/qr-groesse.d.ts +38 -38
- package/dist/cjs/printing/qr-groesse.js +47 -47
- package/dist/cjs/printing/webusb.d.ts +2 -2
- package/dist/cjs/printing/webusb.js +4 -4
- package/dist/cjs/react/index.d.ts +21 -21
- package/dist/cjs/react/index.js +40 -30
- package/dist/cjs/receipt/bild.d.ts +4 -4
- package/dist/cjs/receipt/bild.js +11 -11
- package/dist/cjs/receipt/blatt.d.ts +46 -46
- package/dist/cjs/receipt/blatt.js +59 -59
- package/dist/cjs/receipt/discount.d.ts +1 -1
- package/dist/cjs/receipt/discount.js +8 -8
- package/dist/cjs/receipt/due.d.ts +86 -0
- package/dist/cjs/receipt/due.js +261 -0
- package/dist/cjs/receipt/epos.d.ts +22 -22
- package/dist/cjs/receipt/epos.js +45 -45
- package/dist/cjs/receipt/grid.d.ts +10 -10
- package/dist/cjs/receipt/grid.js +20 -20
- package/dist/cjs/receipt/index.d.ts +9 -8
- package/dist/cjs/receipt/index.js +26 -23
- package/dist/cjs/receipt/layout-escpos.d.ts +24 -24
- package/dist/cjs/receipt/layout-escpos.js +49 -49
- package/dist/cjs/receipt/layout.d.ts +28 -23
- package/dist/cjs/receipt/layout.js +45 -21
- package/dist/cjs/receipt/marke-daten.d.ts +8 -8
- package/dist/cjs/receipt/marke-daten.js +8 -8
- package/dist/cjs/receipt/marke.d.ts +7 -7
- package/dist/cjs/receipt/marke.js +10 -10
- package/dist/cjs/register/errors.d.ts +61 -0
- package/dist/cjs/register/errors.js +112 -0
- package/dist/cjs/register/index.d.ts +14 -1
- package/dist/cjs/register/index.js +20 -1
- package/dist/cjs/register/pairing.d.ts +55 -36
- package/dist/cjs/register/pairing.js +33 -29
- package/dist/cjs/register/session.d.ts +5 -5
- package/dist/cjs/register/session.js +7 -7
- package/dist/cjs/stored/draht.d.ts +45 -0
- package/dist/cjs/stored/draht.js +220 -0
- package/dist/cjs/stored/einstellungen.d.ts +23 -0
- package/dist/cjs/stored/einstellungen.js +200 -0
- package/dist/cjs/stored/index.d.ts +109 -0
- package/dist/cjs/stored/index.js +225 -0
- package/dist/cjs/stored/vokabular.d.ts +18 -0
- package/dist/cjs/stored/vokabular.js +389 -0
- package/dist/cjs/version.d.ts +7 -0
- package/dist/cjs/version.js +10 -0
- package/dist/cjs/vienna-time.d.ts +1 -1
- package/dist/cjs/vienna-time.js +2 -2
- package/dist/esm/client/api.d.ts +7 -6
- package/dist/esm/client/api.js +4 -4
- package/dist/esm/client/aufrufe.d.ts +29 -5
- package/dist/esm/client/aufrufe.js +111 -1
- package/dist/esm/client/auth.d.ts +2 -0
- package/dist/esm/client/auth.js +16 -1
- package/dist/esm/client/cashregisters.d.ts +1 -1
- package/dist/esm/client/cashregisters.js +2 -2
- package/dist/esm/client/errors.d.ts +94 -19
- package/dist/esm/client/errors.js +129 -27
- package/dist/esm/client/fehlercodes.d.ts +9 -0
- package/dist/esm/client/fehlercodes.js +32 -0
- package/dist/esm/client/index.d.ts +5 -5
- package/dist/esm/client/index.js +5 -5
- package/dist/esm/client/receipts.d.ts +131 -124
- package/dist/esm/client/receipts.js +195 -140
- package/dist/esm/client/reports.d.ts +26 -4
- package/dist/esm/client/reports.js +36 -4
- package/dist/esm/client/status.d.ts +3 -3
- package/dist/esm/client/status.js +7 -7
- package/dist/esm/client/transport.d.ts +56 -4
- package/dist/esm/client/transport.js +233 -24
- package/dist/esm/enums/vat-rate.d.ts +2 -2
- package/dist/esm/enums/vat-rate.js +1 -1
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +4 -3
- package/dist/{cjs/rechnung → esm/invoice}/api.d.ts +18 -17
- package/dist/esm/{rechnung → invoice}/api.js +6 -6
- package/dist/{cjs/rechnung → esm/invoice}/auth.d.ts +2 -2
- package/dist/esm/{rechnung → invoice}/auth.js +4 -4
- package/dist/{cjs/rechnung/rechnen.d.ts → esm/invoice/calc.d.ts} +27 -27
- package/dist/esm/{rechnung/rechnen.js → invoice/calc.js} +45 -45
- package/dist/{cjs/rechnung → esm/invoice}/endpunkte.d.ts +23 -21
- package/dist/esm/{rechnung → invoice}/endpunkte.js +52 -42
- package/dist/esm/invoice/fehler.d.ts +31 -0
- package/dist/esm/invoice/fehler.js +33 -0
- package/dist/esm/invoice/index.d.ts +21 -0
- package/dist/esm/invoice/index.js +20 -0
- package/dist/esm/{rechnung → invoice}/summen.d.ts +12 -12
- package/dist/esm/{rechnung → invoice}/summen.js +12 -12
- package/dist/esm/invoice/texte.d.ts +224 -0
- package/dist/esm/invoice/texte.js +421 -0
- package/dist/{cjs/rechnung → esm/invoice}/typen.d.ts +32 -11
- package/dist/esm/{rechnung → invoice}/vertrag.d.ts +97 -71
- package/dist/esm/{rechnung → invoice}/vertrag.js +143 -81
- package/dist/esm/models/cancellation.d.ts +43 -24
- package/dist/esm/models/cancellation.js +90 -45
- package/dist/esm/models/hobex-receipt.d.ts +3 -3
- package/dist/esm/models/hobex-receipt.js +35 -35
- package/dist/esm/models/index.d.ts +6 -5
- package/dist/esm/models/index.js +6 -5
- package/dist/esm/models/payment-errors.d.ts +32 -15
- package/dist/esm/models/payment-errors.js +77 -32
- package/dist/esm/models/receipt-company.d.ts +6 -5
- package/dist/esm/models/receipt-company.js +4 -4
- package/dist/esm/models/receipt-email.d.ts +32 -18
- package/dist/esm/models/receipt-email.js +65 -23
- package/dist/esm/models/receipt-errors.d.ts +39 -0
- package/dist/esm/models/receipt-errors.js +87 -0
- package/dist/esm/models/receipt-item.d.ts +9 -1
- package/dist/esm/models/receipt-item.js +3 -0
- package/dist/esm/models/receipt-summary.d.ts +10 -4
- package/dist/esm/models/receipt-summary.js +9 -3
- package/dist/esm/models/receipt.d.ts +31 -2
- package/dist/esm/models/receipt.js +12 -2
- package/dist/esm/models/voucher.d.ts +7 -6
- package/dist/esm/models/voucher.js +2 -7
- package/dist/esm/partner/ablauf.d.ts +10 -10
- package/dist/esm/partner/ablauf.js +27 -27
- package/dist/esm/partner/api.d.ts +26 -23
- package/dist/esm/partner/api.js +13 -15
- package/dist/esm/partner/auth.d.ts +1 -1
- package/dist/esm/partner/auth.js +2 -2
- package/dist/esm/partner/betrieb.d.ts +7 -7
- package/dist/esm/partner/betrieb.js +8 -8
- package/dist/esm/partner/endpunkte.d.ts +27 -14
- package/dist/esm/partner/endpunkte.js +79 -39
- package/dist/esm/partner/fehler.d.ts +60 -30
- package/dist/esm/partner/fehler.js +91 -35
- package/dist/esm/partner/index.d.ts +13 -12
- package/dist/esm/partner/index.js +12 -11
- package/dist/esm/partner/secret.d.ts +3 -3
- package/dist/esm/partner/secret.js +5 -5
- package/dist/esm/partner/typen.d.ts +129 -71
- package/dist/esm/partner/typen.js +75 -2
- package/dist/esm/partner/webhook-signatur.d.ts +2 -2
- package/dist/esm/partner/webhook-signatur.js +12 -12
- package/dist/esm/partner/webhooks.d.ts +60 -32
- package/dist/esm/partner/webhooks.js +38 -32
- package/dist/esm/payments/hobex.d.ts +11 -3
- package/dist/esm/payments/hobex.js +18 -6
- package/dist/esm/payments/stripe.d.ts +5 -2
- package/dist/esm/payments/stripe.js +11 -6
- package/dist/esm/pos/artikel.d.ts +90 -0
- package/dist/esm/pos/artikel.js +79 -0
- package/dist/esm/pos/client.d.ts +27 -0
- package/dist/esm/pos/client.js +137 -0
- package/dist/esm/pos/drucker.d.ts +86 -0
- package/dist/esm/pos/drucker.js +71 -0
- package/dist/esm/pos/errors.d.ts +36 -0
- package/dist/esm/pos/errors.js +88 -0
- package/dist/esm/pos/index.d.ts +15 -0
- package/dist/esm/pos/index.js +20 -0
- package/dist/esm/pos/settings.d.ts +313 -0
- package/dist/esm/pos/settings.js +367 -0
- package/dist/esm/pos/texte.d.ts +883 -0
- package/dist/esm/pos/texte.js +481 -0
- package/dist/esm/{kasse → pos}/trinkgeld.d.ts +1 -1
- package/dist/esm/{kasse → pos}/trinkgeld.js +2 -2
- package/dist/esm/printing/escpos.d.ts +29 -29
- package/dist/esm/printing/escpos.js +56 -56
- package/dist/esm/printing/index.d.ts +2 -2
- package/dist/esm/printing/index.js +2 -2
- package/dist/esm/printing/qr-groesse.d.ts +38 -38
- package/dist/esm/printing/qr-groesse.js +42 -42
- package/dist/esm/printing/webusb.d.ts +2 -2
- package/dist/esm/printing/webusb.js +4 -4
- package/dist/esm/react/index.d.ts +21 -21
- package/dist/esm/react/index.js +39 -29
- package/dist/esm/receipt/bild.d.ts +4 -4
- package/dist/esm/receipt/bild.js +11 -11
- package/dist/esm/receipt/blatt.d.ts +46 -46
- package/dist/esm/receipt/blatt.js +55 -55
- package/dist/esm/receipt/discount.d.ts +1 -1
- package/dist/esm/receipt/discount.js +7 -7
- package/dist/esm/receipt/due.d.ts +86 -0
- package/dist/esm/receipt/due.js +257 -0
- package/dist/esm/receipt/epos.d.ts +22 -22
- package/dist/esm/receipt/epos.js +47 -47
- package/dist/esm/receipt/grid.d.ts +10 -10
- package/dist/esm/receipt/grid.js +18 -18
- package/dist/esm/receipt/index.d.ts +9 -8
- package/dist/esm/receipt/index.js +9 -8
- package/dist/esm/receipt/layout-escpos.d.ts +24 -24
- package/dist/esm/receipt/layout-escpos.js +51 -51
- package/dist/esm/receipt/layout.d.ts +28 -23
- package/dist/esm/receipt/layout.js +44 -20
- package/dist/esm/receipt/marke-daten.d.ts +8 -8
- package/dist/esm/receipt/marke-daten.js +7 -7
- package/dist/esm/receipt/marke.d.ts +7 -7
- package/dist/esm/receipt/marke.js +10 -10
- package/dist/esm/register/errors.d.ts +61 -0
- package/dist/esm/register/errors.js +104 -0
- package/dist/esm/register/index.d.ts +14 -1
- package/dist/esm/register/index.js +13 -0
- package/dist/esm/register/pairing.d.ts +55 -36
- package/dist/esm/register/pairing.js +33 -29
- package/dist/esm/register/session.d.ts +5 -5
- package/dist/esm/register/session.js +7 -7
- package/dist/esm/stored/draht.d.ts +45 -0
- package/dist/esm/stored/draht.js +208 -0
- package/dist/esm/stored/einstellungen.d.ts +23 -0
- package/dist/esm/stored/einstellungen.js +196 -0
- package/dist/esm/stored/index.d.ts +109 -0
- package/dist/esm/stored/index.js +217 -0
- package/dist/esm/stored/vokabular.d.ts +18 -0
- package/dist/esm/stored/vokabular.js +386 -0
- package/dist/esm/version.d.ts +7 -0
- package/dist/esm/version.js +7 -0
- package/dist/esm/vienna-time.d.ts +1 -1
- package/dist/esm/vienna-time.js +2 -2
- package/fixtures/{erwartet/storno-rabatt.lines.json → expected/cancellation-discount.lines.json} +2 -2
- package/fixtures/expected/cancellation-discount.sheet32.json +248 -0
- package/fixtures/{erwartet/storno-rabatt.blatt48.json → expected/cancellation-discount.sheet48.json} +119 -119
- package/fixtures/{erwartet/storno-voll.lines.json → expected/cancellation-full.lines.json} +2 -2
- package/fixtures/expected/cancellation-full.sheet32.json +218 -0
- package/fixtures/{erwartet/storno-voll.blatt48.json → expected/cancellation-full.sheet48.json} +107 -107
- package/fixtures/{erwartet/storno-teil.lines.json → expected/cancellation-partial.lines.json} +2 -2
- package/fixtures/expected/cancellation-partial.sheet32.json +206 -0
- package/fixtures/{erwartet/storno-teil.blatt48.json → expected/cancellation-partial.sheet48.json} +101 -101
- package/fixtures/{erwartet/storno-split-voll.lines.json → expected/cancellation-split-full.lines.json} +2 -2
- package/fixtures/expected/cancellation-split-full.sheet32.json +320 -0
- package/fixtures/{erwartet/storno-split-voll.blatt48.json → expected/cancellation-split-full.sheet48.json} +158 -158
- package/fixtures/{erwartet/storno-split-teil.lines.json → expected/cancellation-split-partial.lines.json} +2 -2
- package/fixtures/expected/cancellation-split-partial.sheet32.json +230 -0
- package/fixtures/{erwartet/storno-split-teil.blatt48.json → expected/cancellation-split-partial.sheet48.json} +113 -113
- package/fixtures/{erwartet/karte-eigener.lines.json → expected/card-custom.lines.json} +1 -1
- package/fixtures/expected/card-custom.sheet32.json +158 -0
- package/fixtures/{erwartet/karte-eigener.blatt48.json → expected/card-custom.sheet48.json} +80 -80
- package/fixtures/{erwartet/karte-gptom-ios.lines.json → expected/card-gptom-ios.lines.json} +1 -1
- package/fixtures/expected/card-gptom-ios.sheet32.json +230 -0
- package/fixtures/{erwartet/karte-gptom-ios.blatt48.json → expected/card-gptom-ios.sheet48.json} +116 -116
- package/fixtures/{erwartet/karte-gptom.lines.json → expected/card-gptom.lines.json} +1 -1
- package/fixtures/expected/card-gptom.sheet32.json +230 -0
- package/fixtures/{erwartet/karte-gptom.blatt48.json → expected/card-gptom.sheet48.json} +116 -116
- package/fixtures/{erwartet/karte-hobex-cloud.lines.json → expected/card-hobex-cloud.lines.json} +1 -1
- package/fixtures/expected/card-hobex-cloud.sheet32.json +200 -0
- package/fixtures/{erwartet/karte-hobex-cloud.blatt48.json → expected/card-hobex-cloud.sheet48.json} +101 -101
- package/fixtures/{erwartet/karte-hobex-hps.lines.json → expected/card-hobex-hps.lines.json} +1 -1
- package/fixtures/expected/card-hobex-hps.sheet32.json +224 -0
- package/fixtures/{erwartet/karte-hobex-hps.blatt48.json → expected/card-hobex-hps.sheet48.json} +113 -113
- package/fixtures/{erwartet/karte-mypos.lines.json → expected/card-mypos.lines.json} +1 -1
- package/fixtures/expected/card-mypos.sheet32.json +254 -0
- package/fixtures/{erwartet/karte-mypos.blatt48.json → expected/card-mypos.sheet48.json} +122 -122
- package/fixtures/{erwartet/karte-stripe-eps.lines.json → expected/card-stripe-eps.lines.json} +1 -1
- package/fixtures/expected/card-stripe-eps.sheet32.json +194 -0
- package/fixtures/{erwartet/karte-stripe-eps.blatt48.json → expected/card-stripe-eps.sheet48.json} +98 -98
- package/fixtures/{erwartet/karte-stripe.lines.json → expected/card-stripe.lines.json} +1 -1
- package/fixtures/expected/card-stripe.sheet32.json +212 -0
- package/fixtures/{erwartet/karte-stripe.blatt48.json → expected/card-stripe.sheet48.json} +107 -107
- package/fixtures/{erwartet/karte-sumup.lines.json → expected/card-sumup.lines.json} +1 -1
- package/fixtures/expected/card-sumup.sheet32.json +218 -0
- package/fixtures/{erwartet/karte-sumup.blatt48.json → expected/card-sumup.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabattzeilen.lines.json → expected/discount-lines.lines.json} +1 -1
- package/fixtures/expected/discount-lines.sheet32.json +200 -0
- package/fixtures/{erwartet/rabattzeilen.blatt48.json → expected/discount-lines.sheet48.json} +98 -98
- package/fixtures/{erwartet/rabatt-chef-trinkgeld.lines.json → expected/discount-owner-tip.lines.json} +1 -1
- package/fixtures/expected/discount-owner-tip.sheet32.json +212 -0
- package/fixtures/{erwartet/rabatt-chef-trinkgeld.blatt48.json → expected/discount-owner-tip.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabatt-einfach.lines.json → expected/discount-simple.lines.json} +1 -1
- package/fixtures/expected/discount-simple.sheet32.json +182 -0
- package/fixtures/{erwartet/rabatt-einfach.blatt48.json → expected/discount-simple.sheet48.json} +89 -89
- package/fixtures/{erwartet/rabatt-trinkgeld.lines.json → expected/discount-tip.lines.json} +1 -1
- package/fixtures/expected/discount-tip.sheet32.json +212 -0
- package/fixtures/{erwartet/rabatt-trinkgeld.blatt48.json → expected/discount-tip.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabatt-wertgutschein.lines.json → expected/discount-value-voucher.lines.json} +1 -1
- package/fixtures/expected/discount-value-voucher.sheet32.json +218 -0
- package/fixtures/{erwartet/rabatt-wertgutschein.blatt48.json → expected/discount-value-voucher.sheet48.json} +107 -107
- package/fixtures/{erwartet/langer-artikelname.lines.json → expected/long-item-name.lines.json} +1 -1
- package/fixtures/expected/long-item-name.sheet32.json +176 -0
- package/fixtures/{erwartet/langer-artikelname.blatt48.json → expected/long-item-name.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-karte.lines.json → expected/sale-card.lines.json} +1 -1
- package/fixtures/expected/sale-card.sheet32.json +176 -0
- package/fixtures/{erwartet/verkauf-karte.blatt48.json → expected/sale-card.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-bar.lines.json → expected/sale-cash.lines.json} +1 -1
- package/fixtures/expected/sale-cash.sheet32.json +176 -0
- package/fixtures/{erwartet/verkauf-bar.blatt48.json → expected/sale-cash.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-kleinunternehmer.lines.json → expected/sale-small-business.lines.json} +1 -1
- package/fixtures/expected/sale-small-business.sheet32.json +182 -0
- package/fixtures/{erwartet/verkauf-kleinunternehmer.blatt48.json → expected/sale-small-business.sheet48.json} +89 -89
- package/fixtures/{erwartet/signaturausfall-verkauf.lines.json → expected/signature-outage-sale.lines.json} +1 -1
- package/fixtures/expected/signature-outage-sale.sheet32.json +194 -0
- package/fixtures/{erwartet/signaturausfall-verkauf.blatt48.json → expected/signature-outage-sale.sheet48.json} +92 -92
- package/fixtures/{erwartet/split-karte-karte-bar.lines.json → expected/split-card-card-cash.lines.json} +1 -1
- package/fixtures/expected/split-card-card-cash.sheet32.json +356 -0
- package/fixtures/{erwartet/split-karte-karte-bar.blatt48.json → expected/split-card-card-cash.sheet48.json} +170 -170
- package/fixtures/{erwartet/split-bar-rueckgeld.lines.json → expected/split-cash-change.lines.json} +1 -1
- package/fixtures/expected/split-cash-change.sheet32.json +194 -0
- package/fixtures/{erwartet/split-bar-rueckgeld.blatt48.json → expected/split-cash-change.sheet48.json} +92 -92
- package/fixtures/{erwartet/split-langer-betrag.lines.json → expected/split-long-amount.lines.json} +1 -1
- package/fixtures/expected/split-long-amount.sheet32.json +266 -0
- package/fixtures/{erwartet/split-langer-betrag.blatt48.json → expected/split-long-amount.sheet48.json} +131 -131
- package/fixtures/{erwartet/split-eine-karte-trinkgeld.lines.json → expected/split-one-card-tip.lines.json} +1 -1
- package/fixtures/expected/split-one-card-tip.sheet32.json +242 -0
- package/fixtures/{erwartet/split-eine-karte-trinkgeld.blatt48.json → expected/split-one-card-tip.sheet48.json} +113 -113
- package/fixtures/{erwartet/split-tischrunde-trinkgeld.lines.json → expected/split-table-round-tip.lines.json} +1 -1
- package/fixtures/expected/split-table-round-tip.sheet32.json +470 -0
- package/fixtures/{erwartet/split-tischrunde-trinkgeld.blatt48.json → expected/split-table-round-tip.sheet48.json} +218 -218
- package/fixtures/{erwartet/split-trinkgeld-karte.lines.json → expected/split-tip-card.lines.json} +1 -1
- package/fixtures/expected/split-tip-card.sheet32.json +272 -0
- package/fixtures/{erwartet/split-trinkgeld-karte.blatt48.json → expected/split-tip-card.sheet48.json} +128 -128
- package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.lines.json → expected/split-two-cards-same-provider.lines.json} +1 -1
- package/fixtures/expected/split-two-cards-same-provider.sheet32.json +326 -0
- package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.blatt48.json → expected/split-two-cards-same-provider.sheet48.json} +149 -149
- package/fixtures/{erwartet/testkasse-verkauf.lines.json → expected/test-cashregister-sale.lines.json} +3 -3
- package/fixtures/expected/test-cashregister-sale.sheet32.json +224 -0
- package/fixtures/{erwartet/testkasse-verkauf.blatt48.json → expected/test-cashregister-sale.sheet48.json} +110 -110
- package/fixtures/{erwartet/testsignatur-verkauf.lines.json → expected/test-signature-sale.lines.json} +3 -3
- package/fixtures/expected/test-signature-sale.sheet32.json +236 -0
- package/fixtures/{erwartet/testsignatur-verkauf.blatt48.json → expected/test-signature-sale.sheet48.json} +110 -110
- package/fixtures/{erwartet → expected}/training.lines.json +2 -2
- package/fixtures/expected/training.sheet32.json +236 -0
- package/fixtures/{erwartet/training.blatt48.json → expected/training.sheet48.json} +110 -110
- package/fixtures/{erwartet/null-jahr.lines.json → expected/zero-annual.lines.json} +2 -2
- package/fixtures/expected/zero-annual.sheet32.json +212 -0
- package/fixtures/{erwartet/null-jahr.blatt48.json → expected/zero-annual.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-schluss.lines.json → expected/zero-final.lines.json} +2 -2
- package/fixtures/expected/zero-final.sheet32.json +206 -0
- package/fixtures/{erwartet/null-schluss.blatt48.json → expected/zero-final.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-pruef.lines.json → expected/zero-manual.lines.json} +2 -2
- package/fixtures/expected/zero-manual.sheet32.json +206 -0
- package/fixtures/{erwartet/null-pruef.blatt48.json → expected/zero-manual.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-monat.lines.json → expected/zero-monthly.lines.json} +2 -2
- package/fixtures/expected/zero-monthly.sheet32.json +206 -0
- package/fixtures/{erwartet/null-monat.blatt48.json → expected/zero-monthly.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-ausfall.lines.json → expected/zero-outage-end.lines.json} +2 -2
- package/fixtures/expected/zero-outage-end.sheet32.json +206 -0
- package/fixtures/{erwartet/null-ausfall.blatt48.json → expected/zero-outage-end.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-start.lines.json → expected/zero-start.lines.json} +2 -2
- package/fixtures/expected/zero-start.sheet32.json +206 -0
- package/fixtures/{erwartet/null-start.blatt48.json → expected/zero-start.sheet48.json} +95 -95
- package/fixtures/hobex-hps-codes.json +12 -12
- package/fixtures/invoice-api-examples/brands-ok.json +8 -0
- package/fixtures/{rechnung-api-beispiele/credit-fehler-grund.json → invoice-api-examples/credit-error-reason.json} +6 -6
- package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/credit-ok.json +6 -6
- package/fixtures/{rechnung-api-beispiele/customer-fehler-uid.json → invoice-api-examples/customer-error-vat-id.json} +4 -4
- package/fixtures/invoice-api-examples/customer-get-error-both.json +15 -0
- package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/customer-ok.json +4 -4
- package/fixtures/{rechnung-api-beispiele/customer-search-fehler-leer.json → invoice-api-examples/customer-search-error-empty.json} +4 -4
- package/fixtures/{rechnung-api-beispiele/issue-rabatt.json → invoice-api-examples/issue-discount.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-englisch.json → invoice-api-examples/issue-english.json} +7 -7
- package/fixtures/{rechnung-api-beispiele/issue-fehler-cent.json → invoice-api-examples/issue-error-cent.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-sprache.json → invoice-api-examples/issue-error-language.json} +5 -5
- package/fixtures/{rechnung-api-beispiele/issue-fehler-negativ.json → invoice-api-examples/issue-error-negative.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-zahlungsart.json → invoice-api-examples/issue-error-payment-method.json} +8 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-beide.json → invoice-api-examples/issue-error-price-both.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-fehlt.json → invoice-api-examples/issue-error-price-missing.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-menge.json → invoice-api-examples/issue-error-quantity.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-satz.json → invoice-api-examples/issue-error-rate.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-einheit.json → invoice-api-examples/issue-error-unit.json} +5 -5
- package/fixtures/{rechnung-api-beispiele/issue-fehler-unbekannt.json → invoice-api-examples/issue-error-unknown.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-brutto-20.json → invoice-api-examples/issue-gross-20.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-mikropreis.json → invoice-api-examples/issue-micro-price.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-gemischt.json → invoice-api-examples/issue-mixed.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-netto-20.json → invoice-api-examples/issue-net-20.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-bezahlt.json → invoice-api-examples/issue-paid.json} +7 -7
- package/fixtures/{rechnung-api-beispiele/issue-kleinunternehmer.json → invoice-api-examples/issue-small-business.json} +6 -6
- package/fixtures/invoice-api-examples/payment-error-on-site.json +17 -0
- package/fixtures/invoice-api-examples/payment-error-without-key.json +16 -0
- package/fixtures/invoice-api-examples/payment-recorded-later.json +14 -0
- package/fixtures/{rechnung-api-beispiele/setup-status-fehler-feld.json → invoice-api-examples/setup-status-error-field.json} +4 -4
- package/fixtures/invoice-api-examples/setup-status-ok.json +8 -0
- package/fixtures/{rechnung-api.schema.json → invoice-api.schema.json} +24 -24
- package/fixtures/{rechnung-rechnen-zufall.json → invoice-calc-random.json} +828 -828
- package/fixtures/{rechnung-rechnen.json → invoice-calc.json} +47 -47
- package/fixtures/invoice-texts.json +464 -0
- package/fixtures/{rechnung-summen.json → invoice-totals.json} +25 -25
- package/fixtures/{position-aus-euro.json → item-from-euro.json} +26 -26
- package/fixtures/manifest.json +252 -252
- package/fixtures/pos-message-cases.json +32 -0
- package/fixtures/pos-settings-defaults.json +149 -0
- package/fixtures/{kasse-texte.json → pos-texts.json} +416 -416
- package/fixtures/receipt-due-generated.json +1218 -0
- package/fixtures/{belege/storno-rabatt.json → receipts/cancellation-discount.json} +3 -3
- package/fixtures/{belege/storno-voll.json → receipts/cancellation-full.json} +3 -3
- package/fixtures/{belege/storno-teil.json → receipts/cancellation-partial.json} +3 -3
- package/fixtures/{belege/storno-split-voll.json → receipts/cancellation-split-full.json} +3 -3
- package/fixtures/{belege/storno-split-teil.json → receipts/cancellation-split-partial.json} +3 -3
- package/fixtures/{belege/karte-eigener.json → receipts/card-custom.json} +2 -2
- package/fixtures/{belege/karte-gptom-ios.json → receipts/card-gptom-ios.json} +2 -2
- package/fixtures/{belege/karte-gptom.json → receipts/card-gptom.json} +2 -2
- package/fixtures/{belege/karte-hobex-cloud.json → receipts/card-hobex-cloud.json} +2 -2
- package/fixtures/{belege/karte-hobex-hps.json → receipts/card-hobex-hps.json} +2 -2
- package/fixtures/{belege/karte-mypos.json → receipts/card-mypos.json} +2 -2
- package/fixtures/{belege/karte-stripe-eps.json → receipts/card-stripe-eps.json} +2 -2
- package/fixtures/{belege/karte-stripe.json → receipts/card-stripe.json} +2 -2
- package/fixtures/{belege/karte-sumup.json → receipts/card-sumup.json} +2 -2
- package/fixtures/{belege/rabattzeilen.json → receipts/discount-lines.json} +2 -2
- package/fixtures/{belege/rabatt-chef-trinkgeld.json → receipts/discount-owner-tip.json} +2 -2
- package/fixtures/{belege/rabatt-einfach.json → receipts/discount-simple.json} +2 -2
- package/fixtures/{belege/rabatt-trinkgeld.json → receipts/discount-tip.json} +2 -2
- package/fixtures/{belege/rabatt-wertgutschein.json → receipts/discount-value-voucher.json} +2 -2
- package/fixtures/{belege/langer-artikelname.json → receipts/long-item-name.json} +2 -2
- package/fixtures/{belege/verkauf-karte.json → receipts/sale-card.json} +2 -2
- package/fixtures/{belege/verkauf-bar.json → receipts/sale-cash.json} +2 -2
- package/fixtures/{belege/verkauf-kleinunternehmer.json → receipts/sale-small-business.json} +1 -1
- package/fixtures/{belege/signaturausfall-verkauf.json → receipts/signature-outage-sale.json} +2 -2
- package/fixtures/{belege/split-karte-karte-bar.json → receipts/split-card-card-cash.json} +2 -2
- package/fixtures/{belege/split-bar-rueckgeld.json → receipts/split-cash-change.json} +2 -2
- package/fixtures/{belege/split-langer-betrag.json → receipts/split-long-amount.json} +2 -2
- package/fixtures/{belege/split-eine-karte-trinkgeld.json → receipts/split-one-card-tip.json} +2 -2
- package/fixtures/{belege/split-tischrunde-trinkgeld.json → receipts/split-table-round-tip.json} +2 -2
- package/fixtures/{belege/split-trinkgeld-karte.json → receipts/split-tip-card.json} +2 -2
- package/fixtures/{belege/split-zwei-karten-gleicher-anbieter.json → receipts/split-two-cards-same-provider.json} +2 -2
- package/fixtures/{belege/testsignatur-verkauf.json → receipts/test-cashregister-sale.json} +3 -3
- package/fixtures/{belege/testkasse-verkauf.json → receipts/test-signature-sale.json} +3 -3
- package/fixtures/{belege → receipts}/training.json +2 -2
- package/fixtures/{belege/null-jahr.json → receipts/zero-annual.json} +5 -5
- package/fixtures/{belege/null-schluss.json → receipts/zero-final.json} +5 -5
- package/fixtures/{belege/null-pruef.json → receipts/zero-manual.json} +5 -5
- package/fixtures/{belege/null-monat.json → receipts/zero-monthly.json} +5 -5
- package/fixtures/{belege/null-ausfall.json → receipts/zero-outage-end.json} +5 -5
- package/fixtures/{belege/null-start.json → receipts/zero-start.json} +5 -5
- package/fixtures/renames-1.0.json +1490 -0
- package/fixtures/{kasse-settings-standard.json → stored/pos-settings-defaults.json} +7 -7
- package/fixtures/surface.json +877 -0
- package/fixtures/v3/README.md +125 -0
- package/fixtures/v3/antworten/belege.json +4738 -0
- package/fixtures/v3/antworten/belegmail.json +154 -0
- package/fixtures/v3/antworten/kasse-belege.json +4304 -0
- package/fixtures/v3/antworten/kasse.json +12716 -0
- package/fixtures/v3/antworten/rechnungen.json +1712 -0
- package/fixtures/v3/antworten/storno.json +737 -0
- package/fixtures/v3/stored/belege.json +502 -0
- package/fixtures/v3/stored/kasse.json +3461 -0
- package/fixtures/v3/stored/rechnungen.json +750 -0
- package/fixtures/v3/v3-vokabular.json +3375 -0
- package/fixtures/v3/zahlbetrag-faelle.json +794 -0
- package/package.json +32 -18
- package/dist/cjs/kasse/artikel.d.ts +0 -83
- package/dist/cjs/kasse/artikel.js +0 -79
- package/dist/cjs/kasse/client.d.ts +0 -10
- package/dist/cjs/kasse/client.js +0 -38
- package/dist/cjs/kasse/drucker.d.ts +0 -59
- package/dist/cjs/kasse/drucker.js +0 -50
- package/dist/cjs/kasse/index.d.ts +0 -13
- package/dist/cjs/kasse/index.js +0 -83
- package/dist/cjs/kasse/settings.d.ts +0 -229
- package/dist/cjs/kasse/settings.js +0 -172
- package/dist/cjs/kasse/texte.d.ts +0 -868
- package/dist/cjs/kasse/texte.js +0 -474
- package/dist/cjs/rechnung/fehler.d.ts +0 -21
- package/dist/cjs/rechnung/fehler.js +0 -44
- package/dist/cjs/rechnung/index.d.ts +0 -21
- package/dist/cjs/rechnung/index.js +0 -82
- package/dist/cjs/rechnung/texte.d.ts +0 -222
- package/dist/cjs/rechnung/texte.js +0 -425
- package/dist/esm/kasse/artikel.d.ts +0 -83
- package/dist/esm/kasse/artikel.js +0 -70
- package/dist/esm/kasse/client.d.ts +0 -10
- package/dist/esm/kasse/client.js +0 -33
- package/dist/esm/kasse/drucker.d.ts +0 -59
- package/dist/esm/kasse/drucker.js +0 -45
- package/dist/esm/kasse/index.d.ts +0 -13
- package/dist/esm/kasse/index.js +0 -18
- package/dist/esm/kasse/settings.d.ts +0 -229
- package/dist/esm/kasse/settings.js +0 -168
- package/dist/esm/kasse/texte.d.ts +0 -868
- package/dist/esm/kasse/texte.js +0 -466
- package/dist/esm/rechnung/fehler.d.ts +0 -21
- package/dist/esm/rechnung/fehler.js +0 -39
- package/dist/esm/rechnung/index.d.ts +0 -21
- package/dist/esm/rechnung/index.js +0 -20
- package/dist/esm/rechnung/texte.d.ts +0 -222
- package/dist/esm/rechnung/texte.js +0 -421
- package/fixtures/erwartet/karte-eigener.blatt32.json +0 -158
- package/fixtures/erwartet/karte-gptom-ios.blatt32.json +0 -230
- package/fixtures/erwartet/karte-gptom.blatt32.json +0 -230
- package/fixtures/erwartet/karte-hobex-cloud.blatt32.json +0 -200
- package/fixtures/erwartet/karte-hobex-hps.blatt32.json +0 -224
- package/fixtures/erwartet/karte-mypos.blatt32.json +0 -254
- package/fixtures/erwartet/karte-stripe-eps.blatt32.json +0 -194
- package/fixtures/erwartet/karte-stripe.blatt32.json +0 -212
- package/fixtures/erwartet/karte-sumup.blatt32.json +0 -218
- package/fixtures/erwartet/langer-artikelname.blatt32.json +0 -176
- package/fixtures/erwartet/null-ausfall.blatt32.json +0 -206
- package/fixtures/erwartet/null-jahr.blatt32.json +0 -212
- package/fixtures/erwartet/null-monat.blatt32.json +0 -206
- package/fixtures/erwartet/null-pruef.blatt32.json +0 -206
- package/fixtures/erwartet/null-schluss.blatt32.json +0 -206
- package/fixtures/erwartet/null-start.blatt32.json +0 -206
- package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt32.json +0 -212
- package/fixtures/erwartet/rabatt-einfach.blatt32.json +0 -182
- package/fixtures/erwartet/rabatt-trinkgeld.blatt32.json +0 -212
- package/fixtures/erwartet/rabatt-wertgutschein.blatt32.json +0 -218
- package/fixtures/erwartet/rabattzeilen.blatt32.json +0 -200
- package/fixtures/erwartet/signaturausfall-verkauf.blatt32.json +0 -194
- package/fixtures/erwartet/split-bar-rueckgeld.blatt32.json +0 -194
- package/fixtures/erwartet/split-eine-karte-trinkgeld.blatt32.json +0 -242
- package/fixtures/erwartet/split-karte-karte-bar.blatt32.json +0 -356
- package/fixtures/erwartet/split-langer-betrag.blatt32.json +0 -266
- package/fixtures/erwartet/split-tischrunde-trinkgeld.blatt32.json +0 -470
- package/fixtures/erwartet/split-trinkgeld-karte.blatt32.json +0 -272
- package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.blatt32.json +0 -326
- package/fixtures/erwartet/storno-rabatt.blatt32.json +0 -248
- package/fixtures/erwartet/storno-split-teil.blatt32.json +0 -230
- package/fixtures/erwartet/storno-split-voll.blatt32.json +0 -320
- package/fixtures/erwartet/storno-teil.blatt32.json +0 -206
- package/fixtures/erwartet/storno-voll.blatt32.json +0 -218
- package/fixtures/erwartet/testkasse-verkauf.blatt32.json +0 -224
- package/fixtures/erwartet/testsignatur-verkauf.blatt32.json +0 -236
- package/fixtures/erwartet/training.blatt32.json +0 -236
- package/fixtures/erwartet/verkauf-bar.blatt32.json +0 -176
- package/fixtures/erwartet/verkauf-karte.blatt32.json +0 -176
- package/fixtures/erwartet/verkauf-kleinunternehmer.blatt32.json +0 -182
- package/fixtures/kasse-meldungen-faelle.json +0 -32
- package/fixtures/oberflaeche.json +0 -558
- package/fixtures/rechnung-api-beispiele/brands-ok.json +0 -8
- package/fixtures/rechnung-api-beispiele/customer-get-fehler-beide.json +0 -15
- package/fixtures/rechnung-api-beispiele/setup-status-ok.json +0 -8
- package/fixtures/rechnung-api-beispiele/zahlung-fehler-ohne-schluessel.json +0 -14
- package/fixtures/rechnung-api-beispiele/zahlung-fehler-vor-ort.json +0 -15
- package/fixtures/rechnung-api-beispiele/zahlung-nachtrag.json +0 -14
- package/fixtures/rechnung-texte.json +0 -464
- /package/dist/cjs/{rechnung → invoice}/typen.js +0 -0
- /package/dist/esm/{rechnung → invoice}/typen.js +0 -0
- /package/fixtures/{erwartet/storno-rabatt.grid32.txt → expected/cancellation-discount.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-rabatt.grid48.txt → expected/cancellation-discount.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-voll.grid32.txt → expected/cancellation-full.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-voll.grid48.txt → expected/cancellation-full.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-teil.grid32.txt → expected/cancellation-partial.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-teil.grid48.txt → expected/cancellation-partial.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-voll.grid32.txt → expected/cancellation-split-full.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-voll.grid48.txt → expected/cancellation-split-full.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-teil.grid32.txt → expected/cancellation-split-partial.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-teil.grid48.txt → expected/cancellation-split-partial.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-eigener.grid32.txt → expected/card-custom.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-eigener.grid48.txt → expected/card-custom.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom-ios.grid32.txt → expected/card-gptom-ios.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom-ios.grid48.txt → expected/card-gptom-ios.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom.grid32.txt → expected/card-gptom.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom.grid48.txt → expected/card-gptom.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-cloud.grid32.txt → expected/card-hobex-cloud.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-cloud.grid48.txt → expected/card-hobex-cloud.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-hps.grid32.txt → expected/card-hobex-hps.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-hps.grid48.txt → expected/card-hobex-hps.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-mypos.grid32.txt → expected/card-mypos.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-mypos.grid48.txt → expected/card-mypos.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe-eps.grid32.txt → expected/card-stripe-eps.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe-eps.grid48.txt → expected/card-stripe-eps.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe.grid32.txt → expected/card-stripe.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe.grid48.txt → expected/card-stripe.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-sumup.grid32.txt → expected/card-sumup.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-sumup.grid48.txt → expected/card-sumup.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabattzeilen.grid32.txt → expected/discount-lines.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabattzeilen.grid48.txt → expected/discount-lines.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid32.txt → expected/discount-owner-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid48.txt → expected/discount-owner-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-einfach.grid32.txt → expected/discount-simple.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-einfach.grid48.txt → expected/discount-simple.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-trinkgeld.grid32.txt → expected/discount-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-trinkgeld.grid48.txt → expected/discount-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-wertgutschein.grid32.txt → expected/discount-value-voucher.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-wertgutschein.grid48.txt → expected/discount-value-voucher.grid48.txt} +0 -0
- /package/fixtures/{erwartet/logo-probe-hoch.raster32.txt → expected/logo-sample-tall.raster32.txt} +0 -0
- /package/fixtures/{erwartet/logo-probe.raster32.txt → expected/logo-sample.raster32.txt} +0 -0
- /package/fixtures/{erwartet/langer-artikelname.grid32.txt → expected/long-item-name.grid32.txt} +0 -0
- /package/fixtures/{erwartet/langer-artikelname.grid48.txt → expected/long-item-name.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-karte.grid32.txt → expected/sale-card.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-karte.grid48.txt → expected/sale-card.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-bar.grid32.txt → expected/sale-cash.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-bar.grid48.txt → expected/sale-cash.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid32.txt → expected/sale-small-business.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid48.txt → expected/sale-small-business.grid48.txt} +0 -0
- /package/fixtures/{erwartet/signaturausfall-verkauf.grid32.txt → expected/signature-outage-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/signaturausfall-verkauf.grid48.txt → expected/signature-outage-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-karte-karte-bar.grid32.txt → expected/split-card-card-cash.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-karte-karte-bar.grid48.txt → expected/split-card-card-cash.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-bar-rueckgeld.grid32.txt → expected/split-cash-change.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-bar-rueckgeld.grid48.txt → expected/split-cash-change.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-langer-betrag.grid32.txt → expected/split-long-amount.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-langer-betrag.grid48.txt → expected/split-long-amount.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid32.txt → expected/split-one-card-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid48.txt → expected/split-one-card-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid32.txt → expected/split-table-round-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid48.txt → expected/split-table-round-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-trinkgeld-karte.grid32.txt → expected/split-tip-card.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-trinkgeld-karte.grid48.txt → expected/split-tip-card.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid32.txt → expected/split-two-cards-same-provider.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid48.txt → expected/split-two-cards-same-provider.grid48.txt} +0 -0
- /package/fixtures/{erwartet/testkasse-verkauf.grid32.txt → expected/test-cashregister-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/testkasse-verkauf.grid48.txt → expected/test-cashregister-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet/testsignatur-verkauf.grid32.txt → expected/test-signature-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/testsignatur-verkauf.grid48.txt → expected/test-signature-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet → expected}/training.grid32.txt +0 -0
- /package/fixtures/{erwartet → expected}/training.grid48.txt +0 -0
- /package/fixtures/{erwartet/null-jahr.grid32.txt → expected/zero-annual.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-jahr.grid48.txt → expected/zero-annual.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-schluss.grid32.txt → expected/zero-final.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-schluss.grid48.txt → expected/zero-final.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-pruef.grid32.txt → expected/zero-manual.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-pruef.grid48.txt → expected/zero-manual.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-monat.grid32.txt → expected/zero-monthly.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-monat.grid48.txt → expected/zero-monthly.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-ausfall.grid32.txt → expected/zero-outage-end.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-ausfall.grid48.txt → expected/zero-outage-end.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-start.grid32.txt → expected/zero-start.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-start.grid48.txt → expected/zero-start.grid48.txt} +0 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { ReceiptType, VoucherAction, VoucherType } from '../enums/index.js';
|
|
2
|
+
const UMSATZ = new Set(['standard', 'cancellation', 'training']);
|
|
3
|
+
const TRINKGELD_ERLAUBT = new Set(['standard', 'training']);
|
|
4
|
+
const ZAHLARTEN = new Set(['cash', 'creditCard', 'online', 'uberApp', 'uberCard', 'uberCash', 'boltApp', 'boltCard', 'boltCash']);
|
|
5
|
+
/** Zahlbetrag in Cent, siehe Modulkommentar. */
|
|
6
|
+
export function receiptDueCents(items, vouchers, receiptType, options = {}) {
|
|
7
|
+
return receiptDueBreakdown(items, vouchers, receiptType, options).dueCents;
|
|
8
|
+
}
|
|
9
|
+
/** Wie [receiptDueCents], dazu Zaehler-Delta, Wertgutschein-Anteil und Toepfe. */
|
|
10
|
+
export function receiptDueBreakdown(items, vouchers, receiptType, options = {}) {
|
|
11
|
+
const art = belegArt(receiptType);
|
|
12
|
+
const trinkgelder = trinkgeldAuftraege(options);
|
|
13
|
+
if (trinkgelder.length > 0 && !TRINKGELD_ERLAUBT.has(art)) {
|
|
14
|
+
throw new RangeError(`Zahlbetrag: Trinkgeld gibt es nur bei standard und training, nicht bei "${art}".`);
|
|
15
|
+
}
|
|
16
|
+
if (!UMSATZ.has(art)) {
|
|
17
|
+
return { dueCents: 0, counterDeltaCents: 0, valueVoucherFlowCents: 0, bucketsCents: null };
|
|
18
|
+
}
|
|
19
|
+
const positionen = items.map(innen);
|
|
20
|
+
const gutscheine = vouchers.map(gutscheinInnen);
|
|
21
|
+
// index.js createReceipt: erst `tip`, dann je Zahlart aus payments[].tipCents;
|
|
22
|
+
// jede Runde haengt ihre Positionen hinten an (die Basis bleibt die Ware).
|
|
23
|
+
for (const auftrag of trinkgelder)
|
|
24
|
+
positionen.push(...trinkgeldPositionen(auftrag, positionen, options.tipRecipient));
|
|
25
|
+
const t = belegToepfe(positionen, gutscheine);
|
|
26
|
+
const fluss = wertgutscheinFlussCents(gutscheine, art);
|
|
27
|
+
return {
|
|
28
|
+
dueCents: t.zaehlerDeltaCents + fluss,
|
|
29
|
+
counterDeltaCents: t.zaehlerDeltaCents,
|
|
30
|
+
valueVoucherFlowCents: fluss,
|
|
31
|
+
bucketsCents: {
|
|
32
|
+
amountRateStandard: euroToCent(t.amountRateStandard),
|
|
33
|
+
amountRateReduced1: euroToCent(t.amountRateReduced1),
|
|
34
|
+
amountRateReduced2: euroToCent(t.amountRateReduced2),
|
|
35
|
+
amountRateZero: euroToCent(t.amountRateZero),
|
|
36
|
+
amountRateSpecial: euroToCent(t.amountRateSpecial),
|
|
37
|
+
amountRatOthers: euroToCent(t.amountRatOthers),
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function belegArt(wert) {
|
|
42
|
+
const text = typeof wert === 'object' && wert !== null ? wert.value : wert;
|
|
43
|
+
if (typeof text !== 'string' || !Object.prototype.hasOwnProperty.call(ReceiptType, text)) {
|
|
44
|
+
throw new RangeError(`Zahlbetrag: unbekannter Belegtyp "${String(text)}".`);
|
|
45
|
+
}
|
|
46
|
+
return text;
|
|
47
|
+
}
|
|
48
|
+
/** `beleg-toepfe.euroToCent`; `+ 0` macht aus einem negativen Null ein Null. */
|
|
49
|
+
function euroToCent(euro) {
|
|
50
|
+
return Math.round(euro * 100) + 0;
|
|
51
|
+
}
|
|
52
|
+
/** Position in die innere Form: Einzelpreis `Math.round(cents) / 100` wie `interneForm`. */
|
|
53
|
+
function innen(item, i) {
|
|
54
|
+
const satz = typeof item.vat === 'number' ? item.vat : item.vat?.rate;
|
|
55
|
+
if (typeof satz !== 'number' || !Number.isFinite(satz))
|
|
56
|
+
throw new RangeError(`Zahlbetrag: Position ${i + 1} ohne Steuersatz.`);
|
|
57
|
+
if (!Number.isSafeInteger(item.priceCents))
|
|
58
|
+
throw new RangeError(`Zahlbetrag: Position ${i + 1} hat keinen ganzen Cent-Preis.`);
|
|
59
|
+
if (typeof item.quantity !== 'number' || !Number.isFinite(item.quantity))
|
|
60
|
+
throw new RangeError(`Zahlbetrag: Position ${i + 1} hat keine gueltige Menge.`);
|
|
61
|
+
const tip = item.kind === 'tip' ? (item.recipient?.owner === true ? 'owner' : 'staff') : null;
|
|
62
|
+
return { amount: item.quantity, priceOne: Math.round(item.priceCents) / 100, vat: satz, tip };
|
|
63
|
+
}
|
|
64
|
+
function gutscheinInnen(v, i) {
|
|
65
|
+
if (!Number.isSafeInteger(v.valueCents))
|
|
66
|
+
throw new RangeError(`Zahlbetrag: Gutschein ${i + 1} hat keinen ganzen Cent-Wert.`);
|
|
67
|
+
return { action: String(v.action), type: String(v.type), value: Math.round(v.valueCents) / 100 };
|
|
68
|
+
}
|
|
69
|
+
/** Trinkgeld-Auftraege in der Reihenfolge des Servers: `tip`, dann je Zahlart die Summe der `tipCents`. */
|
|
70
|
+
function trinkgeldAuftraege(options) {
|
|
71
|
+
const raus = [];
|
|
72
|
+
const tipCents = (options.payments ?? []).some((z) => z != null && z.tipCents !== undefined);
|
|
73
|
+
if (options.tip != null && tipCents) {
|
|
74
|
+
throw new RangeError('Zahlbetrag: tip und payments[].tipCents gehen nicht zugleich (tip_conflict).');
|
|
75
|
+
}
|
|
76
|
+
if (options.tip != null) {
|
|
77
|
+
const tip = options.tip;
|
|
78
|
+
const cents = typeof tip === 'number' ? tip : tip.cents;
|
|
79
|
+
pruefeCent(cents, 'Trinkgeld');
|
|
80
|
+
const recipients = typeof tip === 'number' ? undefined : tip.recipients;
|
|
81
|
+
if (recipients != null) {
|
|
82
|
+
if (recipients.length === 0)
|
|
83
|
+
throw new RangeError('Zahlbetrag: recipients darf nicht leer sein.');
|
|
84
|
+
for (const r of recipients) {
|
|
85
|
+
pruefeCent(r.cents, 'Trinkgeld-Anteil');
|
|
86
|
+
if (typeof r.owner !== 'boolean')
|
|
87
|
+
throw new RangeError('Zahlbetrag: recipients[].owner muss true oder false sein.');
|
|
88
|
+
}
|
|
89
|
+
if (recipients.reduce((s, r) => s + r.cents, 0) !== cents) {
|
|
90
|
+
throw new RangeError('Zahlbetrag: die Anteile des Trinkgelds ergeben nicht den Betrag.');
|
|
91
|
+
}
|
|
92
|
+
raus.push({ empfaenger: recipients.map((r) => ({ cents: r.cents, owner: r.owner })) });
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
raus.push({ empfaenger: [{ cents, owner: null }] });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// zahlungen-core.tipsJeZahlart: Summe je bekannter Zahlart, Reihenfolge des ersten Auftretens.
|
|
99
|
+
const je = new Map();
|
|
100
|
+
for (const z of options.payments ?? []) {
|
|
101
|
+
if (z == null || z.tipCents === undefined)
|
|
102
|
+
continue;
|
|
103
|
+
pruefeCent(z.tipCents, 'tipCents');
|
|
104
|
+
const methode = typeof z.method === 'object' && z.method !== null ? z.method.value : z.method;
|
|
105
|
+
if (typeof methode !== 'string' || !ZAHLARTEN.has(methode))
|
|
106
|
+
throw new RangeError(`Zahlbetrag: unbekannte Zahlart "${String(methode)}".`);
|
|
107
|
+
je.set(methode, (je.get(methode) ?? 0) + z.tipCents);
|
|
108
|
+
}
|
|
109
|
+
for (const cents of je.values())
|
|
110
|
+
raus.push({ empfaenger: [{ cents, owner: null }] });
|
|
111
|
+
return raus;
|
|
112
|
+
}
|
|
113
|
+
function pruefeCent(wert, was) {
|
|
114
|
+
if (typeof wert !== 'number' || !Number.isInteger(wert) || wert <= 0) {
|
|
115
|
+
throw new RangeError(`Zahlbetrag: ${was} muss eine ganze Zahl in Cent > 0 sein.`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/** `tip-core.buildTipItems`: Personal in den Null-%-Satz, Inhaber anteilig auf die Saetze der Ware. */
|
|
119
|
+
function trinkgeldPositionen(auftrag, positionen, standard) {
|
|
120
|
+
const basis = warenCentsJeSatz(positionen);
|
|
121
|
+
const summe = Object.values(basis).reduce((s, c) => s + c, 0);
|
|
122
|
+
if (summe <= 0)
|
|
123
|
+
throw new RangeError('Zahlbetrag: Trinkgeld braucht mindestens eine Position mit Betrag.');
|
|
124
|
+
const raus = [];
|
|
125
|
+
for (const e of auftrag.empfaenger) {
|
|
126
|
+
let owner = e.owner;
|
|
127
|
+
if (owner == null) {
|
|
128
|
+
if (standard !== 'owner' && standard !== 'staff') {
|
|
129
|
+
throw new RangeError("Zahlbetrag: tipRecipient fehlt ('owner' oder 'staff', wie der angemeldete Kassen-Benutzer).");
|
|
130
|
+
}
|
|
131
|
+
owner = standard === 'owner';
|
|
132
|
+
}
|
|
133
|
+
if (!owner) {
|
|
134
|
+
raus.push({ amount: 1, priceOne: e.cents / 100, vat: 0, tip: 'staff' });
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const teile = splitOwnerTip(e.cents, basis);
|
|
138
|
+
if (teile.length === 0)
|
|
139
|
+
throw new RangeError('Zahlbetrag: Inhaber-Trinkgeld braucht mindestens eine Position mit Betrag.');
|
|
140
|
+
for (const teil of teile) {
|
|
141
|
+
if (teil.cents !== 0)
|
|
142
|
+
raus.push({ amount: 1, priceOne: teil.cents / 100, vat: teil.vat, tip: 'owner' });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return raus;
|
|
146
|
+
}
|
|
147
|
+
/** `tip-core.warenCentsJeSatz`: Summe je Satz in Euro, dann einmal runden. */
|
|
148
|
+
function warenCentsJeSatz(positionen) {
|
|
149
|
+
const roh = {};
|
|
150
|
+
for (const p of positionen) {
|
|
151
|
+
if (p.tip != null)
|
|
152
|
+
continue;
|
|
153
|
+
roh[p.vat] = (roh[p.vat] ?? 0) + p.amount * p.priceOne;
|
|
154
|
+
}
|
|
155
|
+
const raus = {};
|
|
156
|
+
for (const [satz, wert] of Object.entries(roh))
|
|
157
|
+
raus[satz] = Math.round(wert * 100);
|
|
158
|
+
return raus;
|
|
159
|
+
}
|
|
160
|
+
/** `tip-core.splitOwnerTip`. */
|
|
161
|
+
function splitOwnerTip(cents, jeSatz) {
|
|
162
|
+
const saetze = Object.entries(jeSatz)
|
|
163
|
+
.map(([vat, c]) => ({ vat: Number(vat), basis: c }))
|
|
164
|
+
.filter((s) => Number.isFinite(s.vat) && s.basis > 0)
|
|
165
|
+
.sort((a, b) => b.vat - a.vat);
|
|
166
|
+
const basis = saetze.reduce((s, x) => s + x.basis, 0);
|
|
167
|
+
if (basis <= 0)
|
|
168
|
+
return [];
|
|
169
|
+
let vergeben = 0;
|
|
170
|
+
const verteilt = saetze.map((s) => {
|
|
171
|
+
const exakt = (cents * s.basis) / basis;
|
|
172
|
+
const anteil = Math.floor(exakt);
|
|
173
|
+
vergeben += anteil;
|
|
174
|
+
return { vat: s.vat, cents: anteil, frac: exakt - anteil };
|
|
175
|
+
});
|
|
176
|
+
const rest = cents - vergeben;
|
|
177
|
+
if (rest > 0) {
|
|
178
|
+
let bester = verteilt[0];
|
|
179
|
+
for (const e of verteilt)
|
|
180
|
+
if (e.frac > bester.frac || (e.frac === bester.frac && e.vat > bester.vat))
|
|
181
|
+
bester = e;
|
|
182
|
+
bester.cents += rest;
|
|
183
|
+
}
|
|
184
|
+
return verteilt.map(({ vat, cents: c }) => ({ vat, cents: c }));
|
|
185
|
+
}
|
|
186
|
+
const FUENF = ['amountRateStandard', 'amountRateReduced1', 'amountRateReduced2', 'amountRateZero', 'amountRateSpecial'];
|
|
187
|
+
/** `vat-buckets.bucketFuerSatz`. */
|
|
188
|
+
function topfFuerSatz(vat) {
|
|
189
|
+
switch (vat) {
|
|
190
|
+
case 20: return 'amountRateStandard';
|
|
191
|
+
case 10: return 'amountRateReduced1';
|
|
192
|
+
case 13: return 'amountRateReduced2';
|
|
193
|
+
case 0: return 'amountRateZero';
|
|
194
|
+
case 19: return 'amountRateSpecial';
|
|
195
|
+
case 4.9: return 'amountRateSpecial';
|
|
196
|
+
default: return 'amountRatOthers';
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/** `beleg-toepfe.belegToepfe`, Schritt fuer Schritt. */
|
|
200
|
+
function belegToepfe(positionen, gutscheine) {
|
|
201
|
+
const t = { amountRateStandard: 0, amountRateReduced1: 0, amountRateReduced2: 0, amountRateZero: 0, amountRateSpecial: 0, amountRatOthers: 0 };
|
|
202
|
+
let personal = 0;
|
|
203
|
+
for (const p of positionen) {
|
|
204
|
+
if (p.tip === 'staff')
|
|
205
|
+
personal += p.amount * p.priceOne;
|
|
206
|
+
else
|
|
207
|
+
t[topfFuerSatz(p.vat)] += p.priceOne * p.amount;
|
|
208
|
+
}
|
|
209
|
+
const gesamt = t.amountRateStandard + t.amountRateReduced1 + t.amountRateReduced2 + t.amountRateZero + t.amountRateSpecial;
|
|
210
|
+
if (gutscheine.length > 0) {
|
|
211
|
+
let rabatt = 0;
|
|
212
|
+
for (const v of gutscheine)
|
|
213
|
+
if (v.action === VoucherAction.redeem && v.type === VoucherType.promo)
|
|
214
|
+
rabatt += v.value;
|
|
215
|
+
const nutzbarCents = euroToCent(rabatt > gesamt ? gesamt : rabatt);
|
|
216
|
+
const cents = FUENF.map((n) => euroToCent(t[n]));
|
|
217
|
+
const basis = cents.reduce((s, c) => s + c, 0);
|
|
218
|
+
const anteil = cents.map(() => 0);
|
|
219
|
+
if (basis > 0 && nutzbarCents > 0) {
|
|
220
|
+
cents.forEach((c, i) => {
|
|
221
|
+
anteil[i] = Math.floor((nutzbarCents * c) / basis);
|
|
222
|
+
});
|
|
223
|
+
const rest = nutzbarCents - anteil.reduce((s, a) => s + a, 0);
|
|
224
|
+
if (rest > 0) {
|
|
225
|
+
// Groesster Topf; stabile Sortierung, bei Gleichstand der erste.
|
|
226
|
+
let groesster = 0;
|
|
227
|
+
for (let i = 1; i < cents.length; i++)
|
|
228
|
+
if (cents[i] > cents[groesster])
|
|
229
|
+
groesster = i;
|
|
230
|
+
if (cents[groesster] > 0)
|
|
231
|
+
anteil[groesster] = anteil[groesster] + rest;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
FUENF.forEach((n, i) => {
|
|
235
|
+
t[n] = (cents[i] - anteil[i]) / 100;
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
t.amountRateZero += personal;
|
|
239
|
+
const zaehlerDeltaCents = euroToCent(t.amountRateStandard) + euroToCent(t.amountRateReduced1) + euroToCent(t.amountRateReduced2) +
|
|
240
|
+
euroToCent(t.amountRateZero) + euroToCent(t.amountRateSpecial) + euroToCent(t.amountRatOthers);
|
|
241
|
+
return { ...t, zaehlerDeltaCents };
|
|
242
|
+
}
|
|
243
|
+
/** `zahlungen-core.wertgutscheinFlussCents`. */
|
|
244
|
+
function wertgutscheinFlussCents(gutscheine, art) {
|
|
245
|
+
const vz = art === 'cancellation' ? -1 : 1;
|
|
246
|
+
let cents = 0;
|
|
247
|
+
for (const v of gutscheine) {
|
|
248
|
+
if (v.type !== VoucherType.value || !Number.isFinite(v.value))
|
|
249
|
+
continue;
|
|
250
|
+
const c = euroToCent(v.value);
|
|
251
|
+
if (v.action === VoucherAction.sell)
|
|
252
|
+
cents += c;
|
|
253
|
+
else if (v.action === VoucherAction.redeem)
|
|
254
|
+
cents -= c;
|
|
255
|
+
}
|
|
256
|
+
return vz * cents + 0;
|
|
257
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ReceiptLayout } from './layout.js';
|
|
2
2
|
import type { PosPaperSize } from '../printing/escpos.js';
|
|
3
|
-
import { type
|
|
4
|
-
import { type
|
|
3
|
+
import { type QrModuleSize, type RasterImage } from '../printing/index.js';
|
|
4
|
+
import { type PrintLogo } from './layout-escpos.js';
|
|
5
5
|
/**
|
|
6
6
|
* ePOS-Print XML (Epson TM-Drucker: Server Direct Print, ePOS-Print ueber
|
|
7
7
|
* HTTP) -- **aus dem Zeichenraster**: jede Rasterzeile wird eine <text>-Zeile
|
|
@@ -15,44 +15,44 @@ import { type DruckLogo } from './layout-escpos.js';
|
|
|
15
15
|
*/
|
|
16
16
|
export interface EposPrintXmlOptions {
|
|
17
17
|
/** Zeichen je Zeile; Vorgabe nach `layout.paperSize` (32/48). */
|
|
18
|
-
|
|
18
|
+
charsPerLine?: number;
|
|
19
19
|
/**
|
|
20
20
|
* **Feste** QR-Modulgroesse (Epson `width` 3..16). Gesetzt schaltet sie die
|
|
21
21
|
* Rechnung ab -- dann passt der Aufrufer selbst auf, dass das Symbol samt
|
|
22
22
|
* Ruhezone auf die Rolle geht.
|
|
23
23
|
*/
|
|
24
|
-
|
|
24
|
+
qrWidth?: number;
|
|
25
25
|
/**
|
|
26
26
|
* Deckel fuer die gerechnete QR-Modulgroesse; Vorgabe `auto` (hoechstens 6
|
|
27
27
|
* Punkte je Modul) -- wie ESC/POS, Blatt und der Flutter-Zwilling.
|
|
28
28
|
*
|
|
29
|
-
* Bis 0.13 stand hier `mittel
|
|
29
|
+
* Bis 0.13 stand hier `mittel` (heute `medium`), weil `auto` damals beim ESC/POS-Wert 4
|
|
30
30
|
* deckelte und dieser Weg seit jeher mit 6 druckt. Seit `auto` ueberall 6
|
|
31
31
|
* heisst, ist das derselbe Wert: ohne Wahl kommt kein Byte anders heraus.
|
|
32
32
|
*/
|
|
33
|
-
|
|
33
|
+
qrModuleSize?: QrModuleSize;
|
|
34
34
|
/** Papierschnitt am Ende, Vorgabe true. */
|
|
35
35
|
cut?: boolean;
|
|
36
36
|
/** Firmenlogo; ohne Angabe kein Logo. */
|
|
37
|
-
logo?:
|
|
37
|
+
logo?: PrintLogo | null;
|
|
38
38
|
/** Das Kasseneck-Logo am Ende (Konto-Flag `kreiseck_logo`). */
|
|
39
|
-
|
|
39
|
+
brandMark?: boolean;
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
42
|
* Das XML **samt** dem, was dem QR unterwegs zugestossen ist -- dieselbe
|
|
43
|
-
* Buchfuehrung wie `
|
|
43
|
+
* Buchfuehrung wie `EscPosLayoutResult` am ESC/POS-Weg.
|
|
44
44
|
*/
|
|
45
|
-
export interface
|
|
45
|
+
export interface EposPrintResult {
|
|
46
46
|
xml: string;
|
|
47
47
|
/** Der Beleg ging ohne QR hinaus; das Symbol passt auch mit 3 Punkten nicht. */
|
|
48
|
-
|
|
48
|
+
qrError: string | null;
|
|
49
49
|
/** Der QR steht da, aber unter der Mindest-Modulgroesse. */
|
|
50
|
-
|
|
50
|
+
qrFallback: string | null;
|
|
51
51
|
}
|
|
52
52
|
export declare function eposXmlEscape(text: string): string;
|
|
53
53
|
/** Ein Rasterbild als ePOS-`<image>` (einfarbig, Punktmass, Rasterzeilen Base64). */
|
|
54
|
-
export declare function
|
|
55
|
-
/** Nur das XML; wer die QR-Meldungen braucht, nimmt [
|
|
54
|
+
export declare function eposImageXml(image: RasterImage): string;
|
|
55
|
+
/** Nur das XML; wer die QR-Meldungen braucht, nimmt [eposPrintXmlResult]. */
|
|
56
56
|
export declare function eposPrintXml(layout: ReceiptLayout, options?: EposPrintXmlOptions): string;
|
|
57
57
|
/**
|
|
58
58
|
* Wie [eposPrintXml], gibt aber zusaetzlich zurueck, was dem QR zugestossen
|
|
@@ -64,7 +64,7 @@ export declare function eposPrintXml(layout: ReceiptLayout, options?: EposPrintX
|
|
|
64
64
|
* 58-mm-Kopf hat 384. Der Epson schneidet ein zu breites Symbol nicht ab, er
|
|
65
65
|
* laesst es weg; genau daran fehlte am echten Beleg der QR.
|
|
66
66
|
*/
|
|
67
|
-
export declare function
|
|
67
|
+
export declare function eposPrintXmlResult(layout: ReceiptLayout, options?: EposPrintXmlOptions): EposPrintResult;
|
|
68
68
|
/**
|
|
69
69
|
* Epson-Drucker mit ePOS-Print direkt aus dem Browser ansprechen (ohne
|
|
70
70
|
* Server-Umweg): POST an `https://<ip>/cgi-bin/epos/service.cgi`. Der Drucker
|
|
@@ -79,15 +79,15 @@ export interface EposDirectOptions {
|
|
|
79
79
|
/** ePOS Device ID (Druckermenue), Vorgabe `local_printer`. */
|
|
80
80
|
devid?: string;
|
|
81
81
|
/** Papier des Druckers -- bestimmt das Raster; Vorgabe: das des Layouts. */
|
|
82
|
-
|
|
83
|
-
/** Feste QR-Modulgroesse; siehe [EposPrintXmlOptions.
|
|
84
|
-
|
|
85
|
-
/** Deckel fuer die gerechnete QR-Modulgroesse; siehe [EposPrintXmlOptions.
|
|
86
|
-
|
|
82
|
+
paperSize?: PosPaperSize;
|
|
83
|
+
/** Feste QR-Modulgroesse; siehe [EposPrintXmlOptions.qrWidth]. */
|
|
84
|
+
qrWidth?: number;
|
|
85
|
+
/** Deckel fuer die gerechnete QR-Modulgroesse; siehe [EposPrintXmlOptions.qrModuleSize]. */
|
|
86
|
+
qrModuleSize?: QrModuleSize;
|
|
87
87
|
/** Firmenlogo; ohne Angabe kein Logo. */
|
|
88
|
-
logo?:
|
|
88
|
+
logo?: PrintLogo | null;
|
|
89
89
|
/** Das Kasseneck-Logo am Ende (Konto-Flag `kreiseck_logo`). */
|
|
90
|
-
|
|
90
|
+
brandMark?: boolean;
|
|
91
91
|
timeoutMs?: number;
|
|
92
92
|
}
|
|
93
93
|
export interface EposResponse {
|
package/dist/esm/receipt/epos.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { QR_PRINT_WIDTH_DOTS, QR_MIN_MODULE_DOTS, QR_MODULE_SIZE_CAP, qrSizingFor, qrFitsInVersion, rasterRowsBase64, } from '../printing/index.js';
|
|
2
|
+
import { CHARS_PER_PAPER_SIZE } from './grid.js';
|
|
3
|
+
import { paperSizeForChars } from './blatt.js';
|
|
4
4
|
import { blattFuerDruck } from './layout-escpos.js';
|
|
5
|
-
import {
|
|
5
|
+
import { brandMarkImage } from './marke.js';
|
|
6
6
|
export function eposXmlEscape(text) {
|
|
7
7
|
return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
8
8
|
}
|
|
9
9
|
/** Ein Rasterbild als ePOS-`<image>` (einfarbig, Punktmass, Rasterzeilen Base64). */
|
|
10
|
-
export function
|
|
11
|
-
return `<image width="${
|
|
10
|
+
export function eposImageXml(image) {
|
|
11
|
+
return `<image width="${image.width}" height="${image.height}" color="color_1" mode="mono">${rasterRowsBase64(image)}</image>`;
|
|
12
12
|
}
|
|
13
13
|
const NS = 'http://www.epson-pos.com/schemas/2011/03/epos-print';
|
|
14
|
-
/** Nur das XML; wer die QR-Meldungen braucht, nimmt [
|
|
14
|
+
/** Nur das XML; wer die QR-Meldungen braucht, nimmt [eposPrintXmlResult]. */
|
|
15
15
|
export function eposPrintXml(layout, options = {}) {
|
|
16
|
-
return
|
|
16
|
+
return eposPrintXmlResult(layout, options).xml;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* Wie [eposPrintXml], gibt aber zusaetzlich zurueck, was dem QR zugestossen
|
|
@@ -25,14 +25,14 @@ export function eposPrintXml(layout, options = {}) {
|
|
|
25
25
|
* 58-mm-Kopf hat 384. Der Epson schneidet ein zu breites Symbol nicht ab, er
|
|
26
26
|
* laesst es weg; genau daran fehlte am echten Beleg der QR.
|
|
27
27
|
*/
|
|
28
|
-
export function
|
|
29
|
-
const zeichen = options.
|
|
30
|
-
const papier =
|
|
31
|
-
const deckel = options.
|
|
32
|
-
const blatt = blattFuerDruck(layout, { zeichen, logo: options.logo, marke: options.
|
|
33
|
-
const fest = options.
|
|
28
|
+
export function eposPrintXmlResult(layout, options = {}) {
|
|
29
|
+
const zeichen = options.charsPerLine ?? CHARS_PER_PAPER_SIZE[layout.paperSize];
|
|
30
|
+
const papier = paperSizeForChars(zeichen, layout.paperSize);
|
|
31
|
+
const deckel = options.qrModuleSize ?? 'auto';
|
|
32
|
+
const blatt = blattFuerDruck(layout, { zeichen, logo: options.logo, marke: options.brandMark, qrGroesse: deckel });
|
|
33
|
+
const fest = options.qrWidth === undefined
|
|
34
34
|
? null
|
|
35
|
-
: Math.min(16, Math.max(3, Math.floor(options.
|
|
35
|
+
: Math.min(16, Math.max(3, Math.floor(options.qrWidth)));
|
|
36
36
|
let qrFehler = null;
|
|
37
37
|
let qrAusweich = null;
|
|
38
38
|
/**
|
|
@@ -47,30 +47,30 @@ export function eposPrintXmlErgebnis(layout, options = {}) {
|
|
|
47
47
|
if (fest !== null)
|
|
48
48
|
return fest;
|
|
49
49
|
if (nutzlast === '')
|
|
50
|
-
return
|
|
50
|
+
return QR_MODULE_SIZE_CAP[deckel];
|
|
51
51
|
// Passt der Inhalt in keine QR-Version, gibt es kein Symbol, das der
|
|
52
52
|
// Drucker setzen koennte -- wie beim Blatt (Anteil 0) geht der Beleg ohne QR.
|
|
53
|
-
if (!
|
|
53
|
+
if (!qrFitsInVersion(nutzlast)) {
|
|
54
54
|
qrFehler = 'QR-Inhalt passt in keine QR-Version -- Beleg ohne QR';
|
|
55
55
|
return null;
|
|
56
56
|
}
|
|
57
|
-
const mass =
|
|
58
|
-
nutzlast,
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
const mass = qrSizingFor({
|
|
58
|
+
payload: nutzlast,
|
|
59
|
+
paperWidthDots: QR_PRINT_WIDTH_DOTS[layout.paperSize],
|
|
60
|
+
moduleSize: deckel,
|
|
61
61
|
});
|
|
62
|
-
if (!mass.
|
|
62
|
+
if (!mass.fits) {
|
|
63
63
|
qrFehler =
|
|
64
|
-
`QR mit ${mass.
|
|
65
|
-
`(${
|
|
64
|
+
`QR mit ${mass.modules} Modulen ist fuer ${layout.paperSize === 'mm58' ? 58 : 80} mm ` +
|
|
65
|
+
`(${QR_PRINT_WIDTH_DOTS[layout.paperSize]} Punkte) zu breit`;
|
|
66
66
|
return null;
|
|
67
67
|
}
|
|
68
|
-
if (mass.
|
|
68
|
+
if (mass.belowMinimum) {
|
|
69
69
|
qrAusweich =
|
|
70
|
-
`QR mit ${mass.
|
|
71
|
-
`je Modul -- unter dem Mindestmass von ${
|
|
70
|
+
`QR mit ${mass.modules} Modulen passt nur mit ${String(mass.moduleDots)} Punkten ` +
|
|
71
|
+
`je Modul -- unter dem Mindestmass von ${QR_MIN_MODULE_DOTS}`;
|
|
72
72
|
}
|
|
73
|
-
return mass.
|
|
73
|
+
return mass.moduleDots;
|
|
74
74
|
};
|
|
75
75
|
const out = [];
|
|
76
76
|
out.push(`<epos-print xmlns="${NS}">`);
|
|
@@ -78,12 +78,12 @@ export function eposPrintXmlErgebnis(layout, options = {}) {
|
|
|
78
78
|
out.push('<text font="font_a"/>');
|
|
79
79
|
out.push('<text align="left"/>');
|
|
80
80
|
out.push('<text width="1" height="1" reverse="false" em="false"/>');
|
|
81
|
-
for (const block of blatt.
|
|
82
|
-
switch (block.
|
|
83
|
-
case '
|
|
84
|
-
if (block.
|
|
81
|
+
for (const block of blatt.blocks) {
|
|
82
|
+
switch (block.kind) {
|
|
83
|
+
case 'line':
|
|
84
|
+
if (block.blank)
|
|
85
85
|
out.push('<feed line="1"/>');
|
|
86
|
-
else if (block.
|
|
86
|
+
else if (block.bold) {
|
|
87
87
|
out.push(`<text em="true">${eposXmlEscape(block.text)} </text>`);
|
|
88
88
|
out.push('<text em="false"/>');
|
|
89
89
|
}
|
|
@@ -93,21 +93,21 @@ export function eposPrintXmlErgebnis(layout, options = {}) {
|
|
|
93
93
|
case 'logo':
|
|
94
94
|
if (options.logo) {
|
|
95
95
|
out.push('<text align="center"/>');
|
|
96
|
-
out.push(
|
|
96
|
+
out.push(eposImageXml(options.logo.raster));
|
|
97
97
|
out.push('<text align="left"/>');
|
|
98
98
|
}
|
|
99
99
|
break;
|
|
100
|
-
case '
|
|
100
|
+
case 'brandMark':
|
|
101
101
|
out.push('<text align="center"/>');
|
|
102
|
-
out.push(
|
|
102
|
+
out.push(eposImageXml(brandMarkImage(papier)));
|
|
103
103
|
out.push('<text align="left"/>');
|
|
104
104
|
break;
|
|
105
105
|
case 'qr': {
|
|
106
|
-
const breite = qrBreiteFuer(block.
|
|
106
|
+
const breite = qrBreiteFuer(block.payload);
|
|
107
107
|
if (breite === null)
|
|
108
108
|
break;
|
|
109
109
|
out.push('<text align="center"/>');
|
|
110
|
-
out.push(`<symbol type="qrcode_model_2" level="level_m" width="${breite}" height="0" size="0">${eposXmlEscape(block.
|
|
110
|
+
out.push(`<symbol type="qrcode_model_2" level="level_m" width="${breite}" height="0" size="0">${eposXmlEscape(block.payload)}</symbol>`);
|
|
111
111
|
out.push('<text align="left"/>');
|
|
112
112
|
break;
|
|
113
113
|
}
|
|
@@ -118,7 +118,7 @@ export function eposPrintXmlErgebnis(layout, options = {}) {
|
|
|
118
118
|
out.push('<cut type="feed"/>');
|
|
119
119
|
}
|
|
120
120
|
out.push('</epos-print>');
|
|
121
|
-
return { xml: out.join('\n'), qrFehler, qrAusweich };
|
|
121
|
+
return { xml: out.join('\n'), qrError: qrFehler, qrFallback: qrAusweich };
|
|
122
122
|
}
|
|
123
123
|
const EPOS_DEVID_VORGABE = 'local_printer';
|
|
124
124
|
export function eposServiceUrl(ip, devid = EPOS_DEVID_VORGABE, timeoutMs = 10000) {
|
|
@@ -224,16 +224,16 @@ async function eposDirectSend(innerXml, o, fetchFn) {
|
|
|
224
224
|
}
|
|
225
225
|
/** Beleg direkt drucken; wirft bei Netz-/Zertifikatsproblemen, sonst die Drucker-Antwort. */
|
|
226
226
|
export function eposDirectPrint(layout, o, fetchFn = fetch) {
|
|
227
|
-
const papier = o.
|
|
228
|
-
const xmlOptionen = {
|
|
229
|
-
if (o.
|
|
230
|
-
xmlOptionen.
|
|
231
|
-
if (o.
|
|
232
|
-
xmlOptionen.
|
|
227
|
+
const papier = o.paperSize ?? layout.paperSize;
|
|
228
|
+
const xmlOptionen = { charsPerLine: CHARS_PER_PAPER_SIZE[papier] };
|
|
229
|
+
if (o.qrWidth !== undefined)
|
|
230
|
+
xmlOptionen.qrWidth = o.qrWidth;
|
|
231
|
+
if (o.qrModuleSize !== undefined)
|
|
232
|
+
xmlOptionen.qrModuleSize = o.qrModuleSize;
|
|
233
233
|
if (o.logo)
|
|
234
234
|
xmlOptionen.logo = o.logo;
|
|
235
|
-
if (o.
|
|
236
|
-
xmlOptionen.
|
|
235
|
+
if (o.brandMark !== undefined)
|
|
236
|
+
xmlOptionen.brandMark = o.brandMark;
|
|
237
237
|
return eposDirectSend(eposPrintXml({ ...layout, paperSize: papier }, xmlOptionen), o, fetchFn);
|
|
238
238
|
}
|
|
239
239
|
/** Verbindungstest: leeres Dokument, druckt nichts, liefert den Druckerstatus. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ReceiptLayout } from './layout.js';
|
|
1
|
+
import type { LayoutBannerTone, ReceiptLayout } from './layout.js';
|
|
2
2
|
import type { PosPaperSize } from '../printing/escpos.js';
|
|
3
3
|
/**
|
|
4
4
|
* Zeichenraster: der Beleg als Zeilen mit **exakt N Zeichen** -- die einzige
|
|
@@ -11,7 +11,7 @@ import type { PosPaperSize } from '../printing/escpos.js';
|
|
|
11
11
|
* letzte Spalte, jede mindestens 1. Zwischen zwei Spalten steht immer
|
|
12
12
|
* mindestens ein Leerzeichen (letztes Zeichen jeder nicht-letzten Spalte).
|
|
13
13
|
* Die letzte Spalte endet buendig am rechten Rand.
|
|
14
|
-
* - Text/Aufdruck/Spalteninhalt bricht **wortweise** um (`
|
|
14
|
+
* - Text/Aufdruck/Spalteninhalt bricht **wortweise** um (`wrapText`,
|
|
15
15
|
* dieselbe Regel wie der ESC/POS-Kern); ueberlange Woerter nach einem
|
|
16
16
|
* Bindestrich, sonst hart; geschuetztes Leerzeichen bricht nie.
|
|
17
17
|
* - Fliessregel: laeuft in einer Spaltenzeile nur eine Spalte ueber die erste
|
|
@@ -20,28 +20,28 @@ import type { PosPaperSize } from '../printing/escpos.js';
|
|
|
20
20
|
* - Trennlinie ueber die volle Breite, Leerraum als Leerzeilen, QR als eigene
|
|
21
21
|
* Zeile mit Nutzlast (der Zeichner setzt das Bild).
|
|
22
22
|
*/
|
|
23
|
-
export declare const
|
|
23
|
+
export declare const CHARS_PER_PAPER_SIZE: Readonly<Record<PosPaperSize, number>>;
|
|
24
24
|
export type GridLineKind = 'text' | 'columns' | 'rule' | 'space' | 'qr' | 'banner';
|
|
25
25
|
export interface GridLine {
|
|
26
|
-
/** Genau `
|
|
26
|
+
/** Genau `charsPerLine` Zeichen (bei `qr`: zentrierter Platzhalter). */
|
|
27
27
|
text: string;
|
|
28
28
|
kind: GridLineKind;
|
|
29
29
|
bold: boolean;
|
|
30
|
-
/** Bei `banner` (Rahmen- und Textzeilen): `
|
|
31
|
-
|
|
30
|
+
/** Bei `banner` (Rahmen- und Textzeilen): `warning` = Testkasse/Testsignatur, `receipt_type` = Storno, Nullbeleg … */
|
|
31
|
+
tone?: LayoutBannerTone;
|
|
32
32
|
/** Bei `qr`: die Nutzlast. */
|
|
33
33
|
qr?: string;
|
|
34
34
|
}
|
|
35
35
|
export interface ReceiptGrid {
|
|
36
36
|
lines: GridLine[];
|
|
37
|
-
|
|
37
|
+
charsPerLine: number;
|
|
38
38
|
}
|
|
39
39
|
export interface RenderReceiptGridOptions {
|
|
40
40
|
/** Zeichen je Zeile; Vorgabe nach `layout.paperSize` (32/48). */
|
|
41
|
-
|
|
41
|
+
charsPerLine?: number;
|
|
42
42
|
}
|
|
43
43
|
/** Zwoelftel -> Zeichen je Spalte (ganze Zeichen, Rest an die letzte, mindestens 1). */
|
|
44
|
-
export declare function
|
|
44
|
+
export declare function gridColumnWidths(twelfths: readonly number[], chars: number): number[];
|
|
45
45
|
export declare function renderReceiptGrid(layout: ReceiptLayout, options?: RenderReceiptGridOptions): ReceiptGrid;
|
|
46
46
|
/** Klartext (eine Zeile je Rasterzeile) -- fuer Golden-Dateien und Logs. QR als Platzhalter. */
|
|
47
|
-
export declare function
|
|
47
|
+
export declare function gridToText(grid: ReceiptGrid): string;
|