@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,261 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.receiptDueCents = receiptDueCents;
|
|
4
|
+
exports.receiptDueBreakdown = receiptDueBreakdown;
|
|
5
|
+
const index_js_1 = require("../enums/index.js");
|
|
6
|
+
const UMSATZ = new Set(['standard', 'cancellation', 'training']);
|
|
7
|
+
const TRINKGELD_ERLAUBT = new Set(['standard', 'training']);
|
|
8
|
+
const ZAHLARTEN = new Set(['cash', 'creditCard', 'online', 'uberApp', 'uberCard', 'uberCash', 'boltApp', 'boltCard', 'boltCash']);
|
|
9
|
+
/** Zahlbetrag in Cent, siehe Modulkommentar. */
|
|
10
|
+
function receiptDueCents(items, vouchers, receiptType, options = {}) {
|
|
11
|
+
return receiptDueBreakdown(items, vouchers, receiptType, options).dueCents;
|
|
12
|
+
}
|
|
13
|
+
/** Wie [receiptDueCents], dazu Zaehler-Delta, Wertgutschein-Anteil und Toepfe. */
|
|
14
|
+
function receiptDueBreakdown(items, vouchers, receiptType, options = {}) {
|
|
15
|
+
const art = belegArt(receiptType);
|
|
16
|
+
const trinkgelder = trinkgeldAuftraege(options);
|
|
17
|
+
if (trinkgelder.length > 0 && !TRINKGELD_ERLAUBT.has(art)) {
|
|
18
|
+
throw new RangeError(`Zahlbetrag: Trinkgeld gibt es nur bei standard und training, nicht bei "${art}".`);
|
|
19
|
+
}
|
|
20
|
+
if (!UMSATZ.has(art)) {
|
|
21
|
+
return { dueCents: 0, counterDeltaCents: 0, valueVoucherFlowCents: 0, bucketsCents: null };
|
|
22
|
+
}
|
|
23
|
+
const positionen = items.map(innen);
|
|
24
|
+
const gutscheine = vouchers.map(gutscheinInnen);
|
|
25
|
+
// index.js createReceipt: erst `tip`, dann je Zahlart aus payments[].tipCents;
|
|
26
|
+
// jede Runde haengt ihre Positionen hinten an (die Basis bleibt die Ware).
|
|
27
|
+
for (const auftrag of trinkgelder)
|
|
28
|
+
positionen.push(...trinkgeldPositionen(auftrag, positionen, options.tipRecipient));
|
|
29
|
+
const t = belegToepfe(positionen, gutscheine);
|
|
30
|
+
const fluss = wertgutscheinFlussCents(gutscheine, art);
|
|
31
|
+
return {
|
|
32
|
+
dueCents: t.zaehlerDeltaCents + fluss,
|
|
33
|
+
counterDeltaCents: t.zaehlerDeltaCents,
|
|
34
|
+
valueVoucherFlowCents: fluss,
|
|
35
|
+
bucketsCents: {
|
|
36
|
+
amountRateStandard: euroToCent(t.amountRateStandard),
|
|
37
|
+
amountRateReduced1: euroToCent(t.amountRateReduced1),
|
|
38
|
+
amountRateReduced2: euroToCent(t.amountRateReduced2),
|
|
39
|
+
amountRateZero: euroToCent(t.amountRateZero),
|
|
40
|
+
amountRateSpecial: euroToCent(t.amountRateSpecial),
|
|
41
|
+
amountRatOthers: euroToCent(t.amountRatOthers),
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function belegArt(wert) {
|
|
46
|
+
const text = typeof wert === 'object' && wert !== null ? wert.value : wert;
|
|
47
|
+
if (typeof text !== 'string' || !Object.prototype.hasOwnProperty.call(index_js_1.ReceiptType, text)) {
|
|
48
|
+
throw new RangeError(`Zahlbetrag: unbekannter Belegtyp "${String(text)}".`);
|
|
49
|
+
}
|
|
50
|
+
return text;
|
|
51
|
+
}
|
|
52
|
+
/** `beleg-toepfe.euroToCent`; `+ 0` macht aus einem negativen Null ein Null. */
|
|
53
|
+
function euroToCent(euro) {
|
|
54
|
+
return Math.round(euro * 100) + 0;
|
|
55
|
+
}
|
|
56
|
+
/** Position in die innere Form: Einzelpreis `Math.round(cents) / 100` wie `interneForm`. */
|
|
57
|
+
function innen(item, i) {
|
|
58
|
+
const satz = typeof item.vat === 'number' ? item.vat : item.vat?.rate;
|
|
59
|
+
if (typeof satz !== 'number' || !Number.isFinite(satz))
|
|
60
|
+
throw new RangeError(`Zahlbetrag: Position ${i + 1} ohne Steuersatz.`);
|
|
61
|
+
if (!Number.isSafeInteger(item.priceCents))
|
|
62
|
+
throw new RangeError(`Zahlbetrag: Position ${i + 1} hat keinen ganzen Cent-Preis.`);
|
|
63
|
+
if (typeof item.quantity !== 'number' || !Number.isFinite(item.quantity))
|
|
64
|
+
throw new RangeError(`Zahlbetrag: Position ${i + 1} hat keine gueltige Menge.`);
|
|
65
|
+
const tip = item.kind === 'tip' ? (item.recipient?.owner === true ? 'owner' : 'staff') : null;
|
|
66
|
+
return { amount: item.quantity, priceOne: Math.round(item.priceCents) / 100, vat: satz, tip };
|
|
67
|
+
}
|
|
68
|
+
function gutscheinInnen(v, i) {
|
|
69
|
+
if (!Number.isSafeInteger(v.valueCents))
|
|
70
|
+
throw new RangeError(`Zahlbetrag: Gutschein ${i + 1} hat keinen ganzen Cent-Wert.`);
|
|
71
|
+
return { action: String(v.action), type: String(v.type), value: Math.round(v.valueCents) / 100 };
|
|
72
|
+
}
|
|
73
|
+
/** Trinkgeld-Auftraege in der Reihenfolge des Servers: `tip`, dann je Zahlart die Summe der `tipCents`. */
|
|
74
|
+
function trinkgeldAuftraege(options) {
|
|
75
|
+
const raus = [];
|
|
76
|
+
const tipCents = (options.payments ?? []).some((z) => z != null && z.tipCents !== undefined);
|
|
77
|
+
if (options.tip != null && tipCents) {
|
|
78
|
+
throw new RangeError('Zahlbetrag: tip und payments[].tipCents gehen nicht zugleich (tip_conflict).');
|
|
79
|
+
}
|
|
80
|
+
if (options.tip != null) {
|
|
81
|
+
const tip = options.tip;
|
|
82
|
+
const cents = typeof tip === 'number' ? tip : tip.cents;
|
|
83
|
+
pruefeCent(cents, 'Trinkgeld');
|
|
84
|
+
const recipients = typeof tip === 'number' ? undefined : tip.recipients;
|
|
85
|
+
if (recipients != null) {
|
|
86
|
+
if (recipients.length === 0)
|
|
87
|
+
throw new RangeError('Zahlbetrag: recipients darf nicht leer sein.');
|
|
88
|
+
for (const r of recipients) {
|
|
89
|
+
pruefeCent(r.cents, 'Trinkgeld-Anteil');
|
|
90
|
+
if (typeof r.owner !== 'boolean')
|
|
91
|
+
throw new RangeError('Zahlbetrag: recipients[].owner muss true oder false sein.');
|
|
92
|
+
}
|
|
93
|
+
if (recipients.reduce((s, r) => s + r.cents, 0) !== cents) {
|
|
94
|
+
throw new RangeError('Zahlbetrag: die Anteile des Trinkgelds ergeben nicht den Betrag.');
|
|
95
|
+
}
|
|
96
|
+
raus.push({ empfaenger: recipients.map((r) => ({ cents: r.cents, owner: r.owner })) });
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
raus.push({ empfaenger: [{ cents, owner: null }] });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// zahlungen-core.tipsJeZahlart: Summe je bekannter Zahlart, Reihenfolge des ersten Auftretens.
|
|
103
|
+
const je = new Map();
|
|
104
|
+
for (const z of options.payments ?? []) {
|
|
105
|
+
if (z == null || z.tipCents === undefined)
|
|
106
|
+
continue;
|
|
107
|
+
pruefeCent(z.tipCents, 'tipCents');
|
|
108
|
+
const methode = typeof z.method === 'object' && z.method !== null ? z.method.value : z.method;
|
|
109
|
+
if (typeof methode !== 'string' || !ZAHLARTEN.has(methode))
|
|
110
|
+
throw new RangeError(`Zahlbetrag: unbekannte Zahlart "${String(methode)}".`);
|
|
111
|
+
je.set(methode, (je.get(methode) ?? 0) + z.tipCents);
|
|
112
|
+
}
|
|
113
|
+
for (const cents of je.values())
|
|
114
|
+
raus.push({ empfaenger: [{ cents, owner: null }] });
|
|
115
|
+
return raus;
|
|
116
|
+
}
|
|
117
|
+
function pruefeCent(wert, was) {
|
|
118
|
+
if (typeof wert !== 'number' || !Number.isInteger(wert) || wert <= 0) {
|
|
119
|
+
throw new RangeError(`Zahlbetrag: ${was} muss eine ganze Zahl in Cent > 0 sein.`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** `tip-core.buildTipItems`: Personal in den Null-%-Satz, Inhaber anteilig auf die Saetze der Ware. */
|
|
123
|
+
function trinkgeldPositionen(auftrag, positionen, standard) {
|
|
124
|
+
const basis = warenCentsJeSatz(positionen);
|
|
125
|
+
const summe = Object.values(basis).reduce((s, c) => s + c, 0);
|
|
126
|
+
if (summe <= 0)
|
|
127
|
+
throw new RangeError('Zahlbetrag: Trinkgeld braucht mindestens eine Position mit Betrag.');
|
|
128
|
+
const raus = [];
|
|
129
|
+
for (const e of auftrag.empfaenger) {
|
|
130
|
+
let owner = e.owner;
|
|
131
|
+
if (owner == null) {
|
|
132
|
+
if (standard !== 'owner' && standard !== 'staff') {
|
|
133
|
+
throw new RangeError("Zahlbetrag: tipRecipient fehlt ('owner' oder 'staff', wie der angemeldete Kassen-Benutzer).");
|
|
134
|
+
}
|
|
135
|
+
owner = standard === 'owner';
|
|
136
|
+
}
|
|
137
|
+
if (!owner) {
|
|
138
|
+
raus.push({ amount: 1, priceOne: e.cents / 100, vat: 0, tip: 'staff' });
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
const teile = splitOwnerTip(e.cents, basis);
|
|
142
|
+
if (teile.length === 0)
|
|
143
|
+
throw new RangeError('Zahlbetrag: Inhaber-Trinkgeld braucht mindestens eine Position mit Betrag.');
|
|
144
|
+
for (const teil of teile) {
|
|
145
|
+
if (teil.cents !== 0)
|
|
146
|
+
raus.push({ amount: 1, priceOne: teil.cents / 100, vat: teil.vat, tip: 'owner' });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return raus;
|
|
150
|
+
}
|
|
151
|
+
/** `tip-core.warenCentsJeSatz`: Summe je Satz in Euro, dann einmal runden. */
|
|
152
|
+
function warenCentsJeSatz(positionen) {
|
|
153
|
+
const roh = {};
|
|
154
|
+
for (const p of positionen) {
|
|
155
|
+
if (p.tip != null)
|
|
156
|
+
continue;
|
|
157
|
+
roh[p.vat] = (roh[p.vat] ?? 0) + p.amount * p.priceOne;
|
|
158
|
+
}
|
|
159
|
+
const raus = {};
|
|
160
|
+
for (const [satz, wert] of Object.entries(roh))
|
|
161
|
+
raus[satz] = Math.round(wert * 100);
|
|
162
|
+
return raus;
|
|
163
|
+
}
|
|
164
|
+
/** `tip-core.splitOwnerTip`. */
|
|
165
|
+
function splitOwnerTip(cents, jeSatz) {
|
|
166
|
+
const saetze = Object.entries(jeSatz)
|
|
167
|
+
.map(([vat, c]) => ({ vat: Number(vat), basis: c }))
|
|
168
|
+
.filter((s) => Number.isFinite(s.vat) && s.basis > 0)
|
|
169
|
+
.sort((a, b) => b.vat - a.vat);
|
|
170
|
+
const basis = saetze.reduce((s, x) => s + x.basis, 0);
|
|
171
|
+
if (basis <= 0)
|
|
172
|
+
return [];
|
|
173
|
+
let vergeben = 0;
|
|
174
|
+
const verteilt = saetze.map((s) => {
|
|
175
|
+
const exakt = (cents * s.basis) / basis;
|
|
176
|
+
const anteil = Math.floor(exakt);
|
|
177
|
+
vergeben += anteil;
|
|
178
|
+
return { vat: s.vat, cents: anteil, frac: exakt - anteil };
|
|
179
|
+
});
|
|
180
|
+
const rest = cents - vergeben;
|
|
181
|
+
if (rest > 0) {
|
|
182
|
+
let bester = verteilt[0];
|
|
183
|
+
for (const e of verteilt)
|
|
184
|
+
if (e.frac > bester.frac || (e.frac === bester.frac && e.vat > bester.vat))
|
|
185
|
+
bester = e;
|
|
186
|
+
bester.cents += rest;
|
|
187
|
+
}
|
|
188
|
+
return verteilt.map(({ vat, cents: c }) => ({ vat, cents: c }));
|
|
189
|
+
}
|
|
190
|
+
const FUENF = ['amountRateStandard', 'amountRateReduced1', 'amountRateReduced2', 'amountRateZero', 'amountRateSpecial'];
|
|
191
|
+
/** `vat-buckets.bucketFuerSatz`. */
|
|
192
|
+
function topfFuerSatz(vat) {
|
|
193
|
+
switch (vat) {
|
|
194
|
+
case 20: return 'amountRateStandard';
|
|
195
|
+
case 10: return 'amountRateReduced1';
|
|
196
|
+
case 13: return 'amountRateReduced2';
|
|
197
|
+
case 0: return 'amountRateZero';
|
|
198
|
+
case 19: return 'amountRateSpecial';
|
|
199
|
+
case 4.9: return 'amountRateSpecial';
|
|
200
|
+
default: return 'amountRatOthers';
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/** `beleg-toepfe.belegToepfe`, Schritt fuer Schritt. */
|
|
204
|
+
function belegToepfe(positionen, gutscheine) {
|
|
205
|
+
const t = { amountRateStandard: 0, amountRateReduced1: 0, amountRateReduced2: 0, amountRateZero: 0, amountRateSpecial: 0, amountRatOthers: 0 };
|
|
206
|
+
let personal = 0;
|
|
207
|
+
for (const p of positionen) {
|
|
208
|
+
if (p.tip === 'staff')
|
|
209
|
+
personal += p.amount * p.priceOne;
|
|
210
|
+
else
|
|
211
|
+
t[topfFuerSatz(p.vat)] += p.priceOne * p.amount;
|
|
212
|
+
}
|
|
213
|
+
const gesamt = t.amountRateStandard + t.amountRateReduced1 + t.amountRateReduced2 + t.amountRateZero + t.amountRateSpecial;
|
|
214
|
+
if (gutscheine.length > 0) {
|
|
215
|
+
let rabatt = 0;
|
|
216
|
+
for (const v of gutscheine)
|
|
217
|
+
if (v.action === index_js_1.VoucherAction.redeem && v.type === index_js_1.VoucherType.promo)
|
|
218
|
+
rabatt += v.value;
|
|
219
|
+
const nutzbarCents = euroToCent(rabatt > gesamt ? gesamt : rabatt);
|
|
220
|
+
const cents = FUENF.map((n) => euroToCent(t[n]));
|
|
221
|
+
const basis = cents.reduce((s, c) => s + c, 0);
|
|
222
|
+
const anteil = cents.map(() => 0);
|
|
223
|
+
if (basis > 0 && nutzbarCents > 0) {
|
|
224
|
+
cents.forEach((c, i) => {
|
|
225
|
+
anteil[i] = Math.floor((nutzbarCents * c) / basis);
|
|
226
|
+
});
|
|
227
|
+
const rest = nutzbarCents - anteil.reduce((s, a) => s + a, 0);
|
|
228
|
+
if (rest > 0) {
|
|
229
|
+
// Groesster Topf; stabile Sortierung, bei Gleichstand der erste.
|
|
230
|
+
let groesster = 0;
|
|
231
|
+
for (let i = 1; i < cents.length; i++)
|
|
232
|
+
if (cents[i] > cents[groesster])
|
|
233
|
+
groesster = i;
|
|
234
|
+
if (cents[groesster] > 0)
|
|
235
|
+
anteil[groesster] = anteil[groesster] + rest;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
FUENF.forEach((n, i) => {
|
|
239
|
+
t[n] = (cents[i] - anteil[i]) / 100;
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
t.amountRateZero += personal;
|
|
243
|
+
const zaehlerDeltaCents = euroToCent(t.amountRateStandard) + euroToCent(t.amountRateReduced1) + euroToCent(t.amountRateReduced2) +
|
|
244
|
+
euroToCent(t.amountRateZero) + euroToCent(t.amountRateSpecial) + euroToCent(t.amountRatOthers);
|
|
245
|
+
return { ...t, zaehlerDeltaCents };
|
|
246
|
+
}
|
|
247
|
+
/** `zahlungen-core.wertgutscheinFlussCents`. */
|
|
248
|
+
function wertgutscheinFlussCents(gutscheine, art) {
|
|
249
|
+
const vz = art === 'cancellation' ? -1 : 1;
|
|
250
|
+
let cents = 0;
|
|
251
|
+
for (const v of gutscheine) {
|
|
252
|
+
if (v.type !== index_js_1.VoucherType.value || !Number.isFinite(v.value))
|
|
253
|
+
continue;
|
|
254
|
+
const c = euroToCent(v.value);
|
|
255
|
+
if (v.action === index_js_1.VoucherAction.sell)
|
|
256
|
+
cents += c;
|
|
257
|
+
else if (v.action === index_js_1.VoucherAction.redeem)
|
|
258
|
+
cents -= c;
|
|
259
|
+
}
|
|
260
|
+
return vz * cents + 0;
|
|
261
|
+
}
|
|
@@ -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/cjs/receipt/epos.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EposConnectionError = void 0;
|
|
4
4
|
exports.eposXmlEscape = eposXmlEscape;
|
|
5
|
-
exports.
|
|
5
|
+
exports.eposImageXml = eposImageXml;
|
|
6
6
|
exports.eposPrintXml = eposPrintXml;
|
|
7
|
-
exports.
|
|
7
|
+
exports.eposPrintXmlResult = eposPrintXmlResult;
|
|
8
8
|
exports.eposServiceUrl = eposServiceUrl;
|
|
9
9
|
exports.eposSoapEnvelope = eposSoapEnvelope;
|
|
10
10
|
exports.eposParseResponse = eposParseResponse;
|
|
@@ -19,13 +19,13 @@ function eposXmlEscape(text) {
|
|
|
19
19
|
return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
20
20
|
}
|
|
21
21
|
/** Ein Rasterbild als ePOS-`<image>` (einfarbig, Punktmass, Rasterzeilen Base64). */
|
|
22
|
-
function
|
|
23
|
-
return `<image width="${
|
|
22
|
+
function eposImageXml(image) {
|
|
23
|
+
return `<image width="${image.width}" height="${image.height}" color="color_1" mode="mono">${(0, index_js_1.rasterRowsBase64)(image)}</image>`;
|
|
24
24
|
}
|
|
25
25
|
const NS = 'http://www.epson-pos.com/schemas/2011/03/epos-print';
|
|
26
|
-
/** Nur das XML; wer die QR-Meldungen braucht, nimmt [
|
|
26
|
+
/** Nur das XML; wer die QR-Meldungen braucht, nimmt [eposPrintXmlResult]. */
|
|
27
27
|
function eposPrintXml(layout, options = {}) {
|
|
28
|
-
return
|
|
28
|
+
return eposPrintXmlResult(layout, options).xml;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
31
|
* Wie [eposPrintXml], gibt aber zusaetzlich zurueck, was dem QR zugestossen
|
|
@@ -37,14 +37,14 @@ function eposPrintXml(layout, options = {}) {
|
|
|
37
37
|
* 58-mm-Kopf hat 384. Der Epson schneidet ein zu breites Symbol nicht ab, er
|
|
38
38
|
* laesst es weg; genau daran fehlte am echten Beleg der QR.
|
|
39
39
|
*/
|
|
40
|
-
function
|
|
41
|
-
const zeichen = options.
|
|
42
|
-
const papier = (0, blatt_js_1.
|
|
43
|
-
const deckel = options.
|
|
44
|
-
const blatt = (0, layout_escpos_js_1.blattFuerDruck)(layout, { zeichen, logo: options.logo, marke: options.
|
|
45
|
-
const fest = options.
|
|
40
|
+
function eposPrintXmlResult(layout, options = {}) {
|
|
41
|
+
const zeichen = options.charsPerLine ?? grid_js_1.CHARS_PER_PAPER_SIZE[layout.paperSize];
|
|
42
|
+
const papier = (0, blatt_js_1.paperSizeForChars)(zeichen, layout.paperSize);
|
|
43
|
+
const deckel = options.qrModuleSize ?? 'auto';
|
|
44
|
+
const blatt = (0, layout_escpos_js_1.blattFuerDruck)(layout, { zeichen, logo: options.logo, marke: options.brandMark, qrGroesse: deckel });
|
|
45
|
+
const fest = options.qrWidth === undefined
|
|
46
46
|
? null
|
|
47
|
-
: Math.min(16, Math.max(3, Math.floor(options.
|
|
47
|
+
: Math.min(16, Math.max(3, Math.floor(options.qrWidth)));
|
|
48
48
|
let qrFehler = null;
|
|
49
49
|
let qrAusweich = null;
|
|
50
50
|
/**
|
|
@@ -59,30 +59,30 @@ function eposPrintXmlErgebnis(layout, options = {}) {
|
|
|
59
59
|
if (fest !== null)
|
|
60
60
|
return fest;
|
|
61
61
|
if (nutzlast === '')
|
|
62
|
-
return index_js_1.
|
|
62
|
+
return index_js_1.QR_MODULE_SIZE_CAP[deckel];
|
|
63
63
|
// Passt der Inhalt in keine QR-Version, gibt es kein Symbol, das der
|
|
64
64
|
// Drucker setzen koennte -- wie beim Blatt (Anteil 0) geht der Beleg ohne QR.
|
|
65
|
-
if (!(0, index_js_1.
|
|
65
|
+
if (!(0, index_js_1.qrFitsInVersion)(nutzlast)) {
|
|
66
66
|
qrFehler = 'QR-Inhalt passt in keine QR-Version -- Beleg ohne QR';
|
|
67
67
|
return null;
|
|
68
68
|
}
|
|
69
|
-
const mass = (0, index_js_1.
|
|
70
|
-
nutzlast,
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
const mass = (0, index_js_1.qrSizingFor)({
|
|
70
|
+
payload: nutzlast,
|
|
71
|
+
paperWidthDots: index_js_1.QR_PRINT_WIDTH_DOTS[layout.paperSize],
|
|
72
|
+
moduleSize: deckel,
|
|
73
73
|
});
|
|
74
|
-
if (!mass.
|
|
74
|
+
if (!mass.fits) {
|
|
75
75
|
qrFehler =
|
|
76
|
-
`QR mit ${mass.
|
|
77
|
-
`(${index_js_1.
|
|
76
|
+
`QR mit ${mass.modules} Modulen ist fuer ${layout.paperSize === 'mm58' ? 58 : 80} mm ` +
|
|
77
|
+
`(${index_js_1.QR_PRINT_WIDTH_DOTS[layout.paperSize]} Punkte) zu breit`;
|
|
78
78
|
return null;
|
|
79
79
|
}
|
|
80
|
-
if (mass.
|
|
80
|
+
if (mass.belowMinimum) {
|
|
81
81
|
qrAusweich =
|
|
82
|
-
`QR mit ${mass.
|
|
83
|
-
`je Modul -- unter dem Mindestmass von ${index_js_1.
|
|
82
|
+
`QR mit ${mass.modules} Modulen passt nur mit ${String(mass.moduleDots)} Punkten ` +
|
|
83
|
+
`je Modul -- unter dem Mindestmass von ${index_js_1.QR_MIN_MODULE_DOTS}`;
|
|
84
84
|
}
|
|
85
|
-
return mass.
|
|
85
|
+
return mass.moduleDots;
|
|
86
86
|
};
|
|
87
87
|
const out = [];
|
|
88
88
|
out.push(`<epos-print xmlns="${NS}">`);
|
|
@@ -90,12 +90,12 @@ function eposPrintXmlErgebnis(layout, options = {}) {
|
|
|
90
90
|
out.push('<text font="font_a"/>');
|
|
91
91
|
out.push('<text align="left"/>');
|
|
92
92
|
out.push('<text width="1" height="1" reverse="false" em="false"/>');
|
|
93
|
-
for (const block of blatt.
|
|
94
|
-
switch (block.
|
|
95
|
-
case '
|
|
96
|
-
if (block.
|
|
93
|
+
for (const block of blatt.blocks) {
|
|
94
|
+
switch (block.kind) {
|
|
95
|
+
case 'line':
|
|
96
|
+
if (block.blank)
|
|
97
97
|
out.push('<feed line="1"/>');
|
|
98
|
-
else if (block.
|
|
98
|
+
else if (block.bold) {
|
|
99
99
|
out.push(`<text em="true">${eposXmlEscape(block.text)} </text>`);
|
|
100
100
|
out.push('<text em="false"/>');
|
|
101
101
|
}
|
|
@@ -105,21 +105,21 @@ function eposPrintXmlErgebnis(layout, options = {}) {
|
|
|
105
105
|
case 'logo':
|
|
106
106
|
if (options.logo) {
|
|
107
107
|
out.push('<text align="center"/>');
|
|
108
|
-
out.push(
|
|
108
|
+
out.push(eposImageXml(options.logo.raster));
|
|
109
109
|
out.push('<text align="left"/>');
|
|
110
110
|
}
|
|
111
111
|
break;
|
|
112
|
-
case '
|
|
112
|
+
case 'brandMark':
|
|
113
113
|
out.push('<text align="center"/>');
|
|
114
|
-
out.push(
|
|
114
|
+
out.push(eposImageXml((0, marke_js_1.brandMarkImage)(papier)));
|
|
115
115
|
out.push('<text align="left"/>');
|
|
116
116
|
break;
|
|
117
117
|
case 'qr': {
|
|
118
|
-
const breite = qrBreiteFuer(block.
|
|
118
|
+
const breite = qrBreiteFuer(block.payload);
|
|
119
119
|
if (breite === null)
|
|
120
120
|
break;
|
|
121
121
|
out.push('<text align="center"/>');
|
|
122
|
-
out.push(`<symbol type="qrcode_model_2" level="level_m" width="${breite}" height="0" size="0">${eposXmlEscape(block.
|
|
122
|
+
out.push(`<symbol type="qrcode_model_2" level="level_m" width="${breite}" height="0" size="0">${eposXmlEscape(block.payload)}</symbol>`);
|
|
123
123
|
out.push('<text align="left"/>');
|
|
124
124
|
break;
|
|
125
125
|
}
|
|
@@ -130,7 +130,7 @@ function eposPrintXmlErgebnis(layout, options = {}) {
|
|
|
130
130
|
out.push('<cut type="feed"/>');
|
|
131
131
|
}
|
|
132
132
|
out.push('</epos-print>');
|
|
133
|
-
return { xml: out.join('\n'), qrFehler, qrAusweich };
|
|
133
|
+
return { xml: out.join('\n'), qrError: qrFehler, qrFallback: qrAusweich };
|
|
134
134
|
}
|
|
135
135
|
const EPOS_DEVID_VORGABE = 'local_printer';
|
|
136
136
|
function eposServiceUrl(ip, devid = EPOS_DEVID_VORGABE, timeoutMs = 10000) {
|
|
@@ -237,16 +237,16 @@ async function eposDirectSend(innerXml, o, fetchFn) {
|
|
|
237
237
|
}
|
|
238
238
|
/** Beleg direkt drucken; wirft bei Netz-/Zertifikatsproblemen, sonst die Drucker-Antwort. */
|
|
239
239
|
function eposDirectPrint(layout, o, fetchFn = fetch) {
|
|
240
|
-
const papier = o.
|
|
241
|
-
const xmlOptionen = {
|
|
242
|
-
if (o.
|
|
243
|
-
xmlOptionen.
|
|
244
|
-
if (o.
|
|
245
|
-
xmlOptionen.
|
|
240
|
+
const papier = o.paperSize ?? layout.paperSize;
|
|
241
|
+
const xmlOptionen = { charsPerLine: grid_js_1.CHARS_PER_PAPER_SIZE[papier] };
|
|
242
|
+
if (o.qrWidth !== undefined)
|
|
243
|
+
xmlOptionen.qrWidth = o.qrWidth;
|
|
244
|
+
if (o.qrModuleSize !== undefined)
|
|
245
|
+
xmlOptionen.qrModuleSize = o.qrModuleSize;
|
|
246
246
|
if (o.logo)
|
|
247
247
|
xmlOptionen.logo = o.logo;
|
|
248
|
-
if (o.
|
|
249
|
-
xmlOptionen.
|
|
248
|
+
if (o.brandMark !== undefined)
|
|
249
|
+
xmlOptionen.brandMark = o.brandMark;
|
|
250
250
|
return eposDirectSend(eposPrintXml({ ...layout, paperSize: papier }, xmlOptionen), o, fetchFn);
|
|
251
251
|
}
|
|
252
252
|
/** 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;
|