@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
|
@@ -20,48 +20,48 @@
|
|
|
20
20
|
* Spec: docs/specs/2026-09-17-rechnung-ganzzahlen-design.md § 5.
|
|
21
21
|
*/
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.
|
|
24
|
-
exports.
|
|
25
|
-
exports.
|
|
26
|
-
exports.
|
|
27
|
-
exports.
|
|
28
|
-
exports.
|
|
29
|
-
exports.
|
|
30
|
-
exports.
|
|
23
|
+
exports.CalcError = exports.ZERO_RATED_TAX_SCHEMES = exports.MAX_AMOUNT_CENTS = void 0;
|
|
24
|
+
exports.roundDiv = roundDiv;
|
|
25
|
+
exports.calculateInvoice = calculateInvoice;
|
|
26
|
+
exports.itemFromEuro = itemFromEuro;
|
|
27
|
+
exports.proratedPriceMicros = proratedPriceMicros;
|
|
28
|
+
exports.vatRateMapKey = vatRateMapKey;
|
|
29
|
+
exports.formatVatRate = formatVatRate;
|
|
30
|
+
exports.formatUnitPrice = formatUnitPrice;
|
|
31
31
|
/** Skala des Zeilenbruchs: 10⁻¹⁷ Cent. */
|
|
32
32
|
const E = 10n ** 17n;
|
|
33
33
|
/** Hoechster Betrag je Zeile und je Rechnung: 999.999.999,99 €. */
|
|
34
|
-
exports.
|
|
34
|
+
exports.MAX_AMOUNT_CENTS = 99_999_999_999;
|
|
35
35
|
/** Steuerfaelle, in denen die Rechnung keine Steuer ausweist: jede Zeile zaehlt zu 0 %. */
|
|
36
|
-
exports.
|
|
36
|
+
exports.ZERO_RATED_TAX_SCHEMES = Object.freeze([
|
|
37
37
|
'smallBusiness',
|
|
38
38
|
'reverseCharge',
|
|
39
|
-
'
|
|
39
|
+
'intraCommunitySupply',
|
|
40
40
|
'exportThirdCountry',
|
|
41
41
|
'domesticReverseCharge',
|
|
42
42
|
'outsideScope',
|
|
43
43
|
]);
|
|
44
44
|
/** Fehler des Kerns — mit Code, Feld und Index, damit die API daraus einen Feldfehler machen kann. */
|
|
45
|
-
class
|
|
45
|
+
class CalcError extends Error {
|
|
46
46
|
code;
|
|
47
|
-
|
|
47
|
+
field;
|
|
48
48
|
index;
|
|
49
|
-
constructor(code,
|
|
50
|
-
super(
|
|
51
|
-
this.name = '
|
|
49
|
+
constructor(code, message, field, index) {
|
|
50
|
+
super(message);
|
|
51
|
+
this.name = 'CalcError';
|
|
52
52
|
this.code = code;
|
|
53
|
-
this.
|
|
53
|
+
this.field = field;
|
|
54
54
|
this.index = index;
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
exports.
|
|
57
|
+
exports.CalcError = CalcError;
|
|
58
58
|
/**
|
|
59
59
|
* `a / b` kaufmaennisch gerundet, halbe Einheit vom Nullpunkt weg; `b` > 0.
|
|
60
60
|
*
|
|
61
61
|
* Ohne Gleitkomma: `(2·|a| + b) / (2·b)` ist genau dann eins groesser, wenn der
|
|
62
62
|
* Rest mindestens die halbe Einheit betraegt.
|
|
63
63
|
*/
|
|
64
|
-
function
|
|
64
|
+
function roundDiv(a, b) {
|
|
65
65
|
const negativ = a < 0n;
|
|
66
66
|
const betrag = negativ ? -a : a;
|
|
67
67
|
const ganz = (2n * betrag + b) / (2n * b);
|
|
@@ -75,11 +75,11 @@ const GRENZEN = {
|
|
|
75
75
|
};
|
|
76
76
|
function ganzzahl(wert, feld, index) {
|
|
77
77
|
if (typeof wert !== 'number' || !Number.isInteger(wert)) {
|
|
78
|
-
throw new
|
|
78
|
+
throw new CalcError('not_integer', `items[${index}].${feld} muss eine ganze Zahl sein`, feld, index);
|
|
79
79
|
}
|
|
80
80
|
const [min, max] = GRENZEN[feld];
|
|
81
81
|
if (wert < min || wert > max) {
|
|
82
|
-
throw new
|
|
82
|
+
throw new CalcError('out_of_range', `items[${index}].${feld} liegt ausserhalb von ${min} … ${max}`, feld, index);
|
|
83
83
|
}
|
|
84
84
|
return wert;
|
|
85
85
|
}
|
|
@@ -95,7 +95,7 @@ function ganzzahl(wert, feld, index) {
|
|
|
95
95
|
function verteile(gruppe, feld, faktor, nenner, ziel) {
|
|
96
96
|
const werte = gruppe.map((z) => {
|
|
97
97
|
const zaehler = z.L * faktor;
|
|
98
|
-
return { z, zaehler, wert:
|
|
98
|
+
return { z, zaehler, wert: roundDiv(zaehler, nenner) };
|
|
99
99
|
});
|
|
100
100
|
let rest = ziel - werte.reduce((s, w) => s + w.wert, 0n);
|
|
101
101
|
if (rest !== 0n) {
|
|
@@ -117,18 +117,18 @@ function verteile(gruppe, feld, faktor, nenner, ziel) {
|
|
|
117
117
|
for (const w of werte)
|
|
118
118
|
w.z[feld] = Number(w.wert);
|
|
119
119
|
}
|
|
120
|
-
function
|
|
121
|
-
const steuerfrei = exports.
|
|
122
|
-
const bruttoPreise =
|
|
123
|
-
const grenze = BigInt(exports.
|
|
124
|
-
const zeilen =
|
|
120
|
+
function calculateInvoice(items, options) {
|
|
121
|
+
const steuerfrei = exports.ZERO_RATED_TAX_SCHEMES.includes(options.taxScheme ?? 'normal');
|
|
122
|
+
const bruttoPreise = options.priceMode === 'gross' && !steuerfrei;
|
|
123
|
+
const grenze = BigInt(exports.MAX_AMOUNT_CENTS) * E;
|
|
124
|
+
const zeilen = items.map((p, index) => {
|
|
125
125
|
const preis = BigInt(ganzzahl(p.unitPriceMicros, 'unitPriceMicros', index));
|
|
126
126
|
const menge = BigInt(ganzzahl(p.quantityMilli, 'quantityMilli', index));
|
|
127
127
|
const rabatt = BigInt(ganzzahl(p.discountBp ?? 0, 'discountBp', index));
|
|
128
128
|
const satz = ganzzahl(p.vatRateBp ?? 0, 'vatRateBp', index);
|
|
129
129
|
const L = preis * menge * (10000n - rabatt) * 1000000n;
|
|
130
130
|
if ((L < 0n ? -L : L) > grenze) {
|
|
131
|
-
throw new
|
|
131
|
+
throw new CalcError('amount_too_large', `items[${index}] uebersteigt ${exports.MAX_AMOUNT_CENTS} Cent`, 'unitPriceMicros', index);
|
|
132
132
|
}
|
|
133
133
|
return { index, rateBp: steuerfrei ? 0 : satz, L, netCents: 0, grossCents: 0 };
|
|
134
134
|
});
|
|
@@ -148,13 +148,13 @@ function rechnungRechnen(positionen, optionen) {
|
|
|
148
148
|
let vatCents;
|
|
149
149
|
let grossCents;
|
|
150
150
|
if (bruttoPreise) {
|
|
151
|
-
grossCents =
|
|
152
|
-
netCents =
|
|
151
|
+
grossCents = roundDiv(S, E);
|
|
152
|
+
netCents = roundDiv(grossCents * 10000n, 10000n + r);
|
|
153
153
|
vatCents = grossCents - netCents;
|
|
154
154
|
}
|
|
155
155
|
else {
|
|
156
|
-
netCents =
|
|
157
|
-
vatCents =
|
|
156
|
+
netCents = roundDiv(S, E);
|
|
157
|
+
vatCents = roundDiv(S * r, E * 10000n);
|
|
158
158
|
grossCents = netCents + vatCents;
|
|
159
159
|
}
|
|
160
160
|
if (bruttoPreise) {
|
|
@@ -182,8 +182,8 @@ function rechnungRechnen(positionen, optionen) {
|
|
|
182
182
|
lines: zeilen.map((z) => ({ netCents: z.netCents, grossCents: z.grossCents, rateBp: z.rateBp })),
|
|
183
183
|
};
|
|
184
184
|
for (const feld of ['netCents', 'vatCents', 'grossCents']) {
|
|
185
|
-
if (Math.abs(ergebnis[feld]) > exports.
|
|
186
|
-
throw new
|
|
185
|
+
if (Math.abs(ergebnis[feld]) > exports.MAX_AMOUNT_CENTS) {
|
|
186
|
+
throw new CalcError('amount_too_large', `Die Rechnung uebersteigt ${exports.MAX_AMOUNT_CENTS} Cent (${feld})`);
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
189
|
return ergebnis;
|
|
@@ -235,47 +235,47 @@ const EURO_FELDER = ['unitPrice', 'quantity', 'vatRate', 'discountPct'];
|
|
|
235
235
|
* abgerechnet hat. Ein fehlender Preis dagegen ist NIE 0: sonst wuerde eine
|
|
236
236
|
* Position, der nur der Preis fehlt, still zur 0-€-Zeile.
|
|
237
237
|
*/
|
|
238
|
-
function
|
|
238
|
+
function itemFromEuro(item) {
|
|
239
239
|
if (typeof item.unitPriceMicros === 'number') {
|
|
240
|
-
return { ok: true,
|
|
240
|
+
return { ok: true, item: item };
|
|
241
241
|
}
|
|
242
242
|
const roh = item.unitPrice;
|
|
243
243
|
if (typeof roh !== 'number' || !Number.isFinite(roh)) {
|
|
244
|
-
return { ok: false,
|
|
244
|
+
return { ok: false, field: 'unitPrice', reason: 'not_a_number' };
|
|
245
245
|
}
|
|
246
246
|
const micros = ganzAusDezimaltext(Math.abs(roh), 6);
|
|
247
247
|
if (micros === null)
|
|
248
|
-
return { ok: false,
|
|
248
|
+
return { ok: false, field: 'unitPrice', reason: 'too_many_decimals' };
|
|
249
249
|
if (micros > GRENZEN.unitPriceMicros[1])
|
|
250
|
-
return { ok: false,
|
|
250
|
+
return { ok: false, field: 'unitPrice', reason: 'out_of_range' };
|
|
251
251
|
const zahl = (feld, stellen, max) => {
|
|
252
252
|
const w = item[feld];
|
|
253
253
|
if (w === undefined || w === null)
|
|
254
254
|
return { ok: true, wert: 0 };
|
|
255
255
|
if (typeof w !== 'number' || !Number.isFinite(w))
|
|
256
|
-
return { ok: false, grund: '
|
|
256
|
+
return { ok: false, grund: 'not_a_number' };
|
|
257
257
|
const ganz = ganzAusDezimaltext(w, stellen);
|
|
258
258
|
if (ganz === null)
|
|
259
|
-
return { ok: false, grund: '
|
|
259
|
+
return { ok: false, grund: 'too_many_decimals' };
|
|
260
260
|
if (ganz < (feld === 'quantity' ? -max : 0) || ganz > max)
|
|
261
|
-
return { ok: false, grund: '
|
|
261
|
+
return { ok: false, grund: 'out_of_range' };
|
|
262
262
|
return { ok: true, wert: ganz };
|
|
263
263
|
};
|
|
264
264
|
const menge = zahl('quantity', 3, GRENZEN.quantityMilli[1]);
|
|
265
265
|
if (!menge.ok)
|
|
266
|
-
return { ok: false,
|
|
266
|
+
return { ok: false, field: 'quantity', reason: menge.grund };
|
|
267
267
|
const satz = zahl('vatRate', 2, 10_000);
|
|
268
268
|
if (!satz.ok)
|
|
269
|
-
return { ok: false,
|
|
269
|
+
return { ok: false, field: 'vatRate', reason: satz.grund };
|
|
270
270
|
const rabatt = zahl('discountPct', 2, 10_000);
|
|
271
271
|
if (!rabatt.ok)
|
|
272
|
-
return { ok: false,
|
|
272
|
+
return { ok: false, field: 'discountPct', reason: rabatt.grund };
|
|
273
273
|
const rest = { ...item };
|
|
274
274
|
for (const feld of EURO_FELDER)
|
|
275
275
|
delete rest[feld];
|
|
276
276
|
return {
|
|
277
277
|
ok: true,
|
|
278
|
-
|
|
278
|
+
item: {
|
|
279
279
|
...rest,
|
|
280
280
|
unitPriceMicros: micros,
|
|
281
281
|
quantityMilli: roh < 0 ? -menge.wert : menge.wert,
|
|
@@ -290,32 +290,32 @@ function positionAusEuro(item) {
|
|
|
290
290
|
* stuende auf der ersten Rechnung ein Preis mit sechs Stellen, wo bisher zwei
|
|
291
291
|
* standen.
|
|
292
292
|
*/
|
|
293
|
-
function
|
|
293
|
+
function proratedPriceMicros(unitPriceMicros, months, interval) {
|
|
294
294
|
const micros = BigInt(unitPriceMicros);
|
|
295
|
-
const anteil =
|
|
295
|
+
const anteil = roundDiv(micros * BigInt(months), BigInt(interval));
|
|
296
296
|
if (unitPriceMicros % 10_000 !== 0)
|
|
297
297
|
return Number(anteil);
|
|
298
|
-
return Number(
|
|
298
|
+
return Number(roundDiv(anteil, 10000n) * 10000n);
|
|
299
299
|
}
|
|
300
300
|
/**
|
|
301
301
|
* Schluessel eines USt-Satzes in den gespeicherten Maps (`creditedCents.byRate`,
|
|
302
302
|
* `invoice_stats.vatByRate`): der Prozenttext mit Punkt, genau wie
|
|
303
303
|
* `String(satz)` ihn bisher gebildet hat. NICHT fuer die Anzeige — dafuer gibt
|
|
304
|
-
* es `
|
|
304
|
+
* es `formatVatRate`.
|
|
305
305
|
*/
|
|
306
|
-
function
|
|
306
|
+
function vatRateMapKey(rateBp) {
|
|
307
307
|
return String(rateBp / 100);
|
|
308
308
|
}
|
|
309
309
|
/** Ein USt-Satz fuer die Anzeige: oesterreichisch mit Komma, ohne nachlaufende Nullen. */
|
|
310
|
-
function
|
|
311
|
-
return
|
|
310
|
+
function formatVatRate(rateBp) {
|
|
311
|
+
return vatRateMapKey(rateBp).replace('.', ',');
|
|
312
312
|
}
|
|
313
313
|
/**
|
|
314
314
|
* Ein Einzelpreis fuer die Anzeige: mindestens zwei, hoechstens sechs
|
|
315
315
|
* Nachkommastellen, Tausenderpunkt, Komma als Trennzeichen — in jeder Sprache
|
|
316
316
|
* oesterreichisch, wie die Betraege auf dem Blatt.
|
|
317
317
|
*/
|
|
318
|
-
function
|
|
318
|
+
function formatUnitPrice(unitPriceMicros) {
|
|
319
319
|
const negativ = unitPriceMicros < 0;
|
|
320
320
|
const betrag = Math.abs(unitPriceMicros);
|
|
321
321
|
const ganz = Math.trunc(betrag / 1_000_000);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Die Aufrufe der Rechnungs-API — Kunden, Rechnungen, Gutschriften, Dateien.
|
|
3
3
|
*
|
|
4
4
|
* Jede Funktion nimmt den Transport als ersten Parameter und ist einzeln
|
|
5
|
-
* importierbar; die Fassade [
|
|
5
|
+
* importierbar; die Fassade [createInvoiceApi] bindet ihn nur einmal.
|
|
6
6
|
*
|
|
7
7
|
* **Geprueft wird hier nichts Fachliches.** Die Anfrage geht unveraendert an
|
|
8
8
|
* das Backend, das sie gegen denselben Vertrag prueft (`vertrag.ts`) und einen
|
|
@@ -17,19 +17,19 @@
|
|
|
17
17
|
* der Aufruf `KasseneckValidationError` mit `scope:'response'`.
|
|
18
18
|
*/
|
|
19
19
|
import type { InternerBinaerTransport, InternerTransport } from '../client/aufrufe.js';
|
|
20
|
-
import type
|
|
21
|
-
import type { Brand, CancelInvoiceRequest, CancelResult, CreditNoteRequest, CreditNoteResult, Customer, CustomerInput, CustomerPage, CustomerSearch, InvoiceDetail, InvoiceListQuery, InvoicePage, InvoiceSetupStatus, IssueInvoiceRequest, IssueResult, PreviewResult, RecordPaymentRequest, RecordPaymentResult } from './typen.js';
|
|
22
|
-
export declare function createCustomer(
|
|
20
|
+
import { type EInvoiceFormat, type InvoiceLanguage } from './vertrag.js';
|
|
21
|
+
import type { Brand, CancelInvoiceRequest, CancelResult, CreditNoteRequest, CreditNoteResult, Customer, CustomerInput, CustomerPage, CustomerSearch, InvoiceDetail, InvoiceListQuery, InvoicePage, InvoiceSetupStatus, InvoiceXml, IssueInvoiceRequest, IssueResult, PreviewResult, RecordPaymentRequest, RecordPaymentResult } from './typen.js';
|
|
22
|
+
export declare function createCustomer(transport: InternerTransport, customer: CustomerInput, options?: {
|
|
23
23
|
idempotencyKey?: string;
|
|
24
24
|
}): Promise<Customer>;
|
|
25
|
-
export declare function getCustomer(
|
|
25
|
+
export declare function getCustomer(transport: InternerTransport, ref: {
|
|
26
26
|
customerId: string;
|
|
27
27
|
} | {
|
|
28
28
|
externalId: string;
|
|
29
29
|
}): Promise<Customer>;
|
|
30
|
-
export declare function updateCustomer(
|
|
31
|
-
export declare function searchCustomers(
|
|
32
|
-
export declare function issueInvoice(
|
|
30
|
+
export declare function updateCustomer(transport: InternerTransport, customerId: string, patch: Partial<CustomerInput>): Promise<Customer>;
|
|
31
|
+
export declare function searchCustomers(transport: InternerTransport, search: CustomerSearch): Promise<CustomerPage>;
|
|
32
|
+
export declare function issueInvoice(transport: InternerTransport, request: IssueInvoiceRequest): Promise<IssueResult>;
|
|
33
33
|
/**
|
|
34
34
|
* Probelauf von `issueInvoice`: dieselbe Anfrage wird geprueft und gerechnet
|
|
35
35
|
* wie beim Ausstellen, aber nichts festgeschrieben. Die Antwort nennt Summen,
|
|
@@ -40,28 +40,28 @@ export declare function issueInvoice(rufen: InternerTransport, anfrage: IssueInv
|
|
|
40
40
|
* danach unveraendert ausstellen. Verbindlich ist das Ausstellen — zwischen
|
|
41
41
|
* Probelauf und Ausstellen kann sich der Kunde oder das Konto aendern.
|
|
42
42
|
*/
|
|
43
|
-
export declare function previewInvoice(
|
|
44
|
-
export declare function cancelInvoice(
|
|
45
|
-
export declare function createCreditNote(
|
|
46
|
-
export declare function getInvoice(
|
|
43
|
+
export declare function previewInvoice(transport: InternerTransport, request: IssueInvoiceRequest): Promise<PreviewResult>;
|
|
44
|
+
export declare function cancelInvoice(transport: InternerTransport, request: CancelInvoiceRequest): Promise<CancelResult>;
|
|
45
|
+
export declare function createCreditNote(transport: InternerTransport, request: CreditNoteRequest): Promise<CreditNoteResult>;
|
|
46
|
+
export declare function getInvoice(transport: InternerTransport, ref: {
|
|
47
47
|
invoiceId: string;
|
|
48
48
|
} | {
|
|
49
49
|
number: string;
|
|
50
50
|
}): Promise<InvoiceDetail>;
|
|
51
|
-
export declare function listInvoices(
|
|
51
|
+
export declare function listInvoices(transport: InternerTransport, query?: InvoiceListQuery): Promise<InvoicePage>;
|
|
52
52
|
/**
|
|
53
53
|
* Darf dieses Konto ueber die API ausstellen, und was fehlt noch? Laeuft auch
|
|
54
54
|
* ohne Freigabe und vor der Live-Freischaltung — genau dann braucht man die
|
|
55
55
|
* Antwort. Vor dem ersten `issueInvoice` aufrufen und `missing` anzeigen.
|
|
56
56
|
*/
|
|
57
|
-
export declare function getInvoiceSetupStatus(
|
|
57
|
+
export declare function getInvoiceSetupStatus(transport: InternerTransport): Promise<InvoiceSetupStatus>;
|
|
58
58
|
/**
|
|
59
59
|
* Das PDF der Rechnung (bei Gutschriften: der Gutschrift), mit eingebetteter
|
|
60
60
|
* Factur-X-Datei. Mit `language` in der anderen Sprache als der Rechnung kommt
|
|
61
61
|
* eine **Uebersetzungskopie**: dieselbe Nummer, auf jeder Seite als Uebersetzung
|
|
62
62
|
* gekennzeichnet, ohne eingebettete E-Rechnung — keine eigene Rechnung.
|
|
63
63
|
*/
|
|
64
|
-
export declare function getInvoicePdf(
|
|
64
|
+
export declare function getInvoicePdf(binaryTransport: InternerBinaerTransport, invoiceId: string, options?: {
|
|
65
65
|
language?: InvoiceLanguage;
|
|
66
66
|
}): Promise<Uint8Array>;
|
|
67
67
|
/**
|
|
@@ -73,12 +73,14 @@ export declare function getInvoicePdf(rufenBinaer: InternerBinaerTransport, invo
|
|
|
73
73
|
* zusaetzlich `notice` — eine Barzahlung ist ein Barumsatz und braucht einen
|
|
74
74
|
* Beleg (§ 132a BAO), den dieser Vermerk nicht ersetzt.
|
|
75
75
|
*/
|
|
76
|
-
export declare function recordInvoicePayment(
|
|
76
|
+
export declare function recordInvoicePayment(transport: InternerTransport, request: RecordPaymentRequest): Promise<RecordPaymentResult>;
|
|
77
77
|
/** Die Marken des Kontos — die Kennung geht als `brandId` in `issueInvoice`. */
|
|
78
|
-
export declare function listBrands(
|
|
78
|
+
export declare function listBrands(transport: InternerTransport): Promise<Brand[]>;
|
|
79
79
|
/**
|
|
80
|
-
* Die E-Rechnung
|
|
81
|
-
* und nicht als rohe Datei: so
|
|
82
|
-
* (`einvoice_incomplete` mit `missing[]`) ein
|
|
80
|
+
* Die E-Rechnung samt Format und Dateiname, genau wie der Server sie schickt.
|
|
81
|
+
* Sie kommt im gewohnten Umschlag (`data.xml`) und nicht als rohe Datei: so
|
|
82
|
+
* bleibt ein fachlicher Fehler (`einvoice_incomplete` mit `missing[]`) ein
|
|
83
|
+
* gewoehnlicher Fehler. Den Dateinamen nicht selbst bauen, sondern
|
|
84
|
+
* `filename` nehmen (`invoice-<Nummer>.xml`).
|
|
83
85
|
*/
|
|
84
|
-
export declare function getInvoiceXml(
|
|
86
|
+
export declare function getInvoiceXml(transport: InternerTransport, invoiceId: string, format?: EInvoiceFormat): Promise<InvoiceXml>;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Die Aufrufe der Rechnungs-API — Kunden, Rechnungen, Gutschriften, Dateien.
|
|
4
4
|
*
|
|
5
5
|
* Jede Funktion nimmt den Transport als ersten Parameter und ist einzeln
|
|
6
|
-
* importierbar; die Fassade [
|
|
6
|
+
* importierbar; die Fassade [createInvoiceApi] bindet ihn nur einmal.
|
|
7
7
|
*
|
|
8
8
|
* **Geprueft wird hier nichts Fachliches.** Die Anfrage geht unveraendert an
|
|
9
9
|
* das Backend, das sie gegen denselben Vertrag prueft (`vertrag.ts`) und einen
|
|
@@ -34,6 +34,7 @@ exports.recordInvoicePayment = recordInvoicePayment;
|
|
|
34
34
|
exports.listBrands = listBrands;
|
|
35
35
|
exports.getInvoiceXml = getInvoiceXml;
|
|
36
36
|
const errors_js_1 = require("../client/errors.js");
|
|
37
|
+
const vertrag_js_1 = require("./vertrag.js");
|
|
37
38
|
function objekt(wert) {
|
|
38
39
|
return wert !== null && typeof wert === 'object' && !Array.isArray(wert)
|
|
39
40
|
? wert
|
|
@@ -86,30 +87,30 @@ function kennungVerlangen(aufruf, kennung, felder) {
|
|
|
86
87
|
/** Anfrageobjekt als Nutzlast — flache Kopie, damit der Aufrufer sein Objekt behaelt. */
|
|
87
88
|
const nutzlast = (anfrage) => ({ ...anfrage });
|
|
88
89
|
// ---- Kunden -----------------------------------------------------------------
|
|
89
|
-
async function createCustomer(
|
|
90
|
+
async function createCustomer(transport, customer, options = {}) {
|
|
90
91
|
const params = { customer };
|
|
91
|
-
if (
|
|
92
|
-
params['idempotencyKey'] =
|
|
93
|
-
const daten = await
|
|
92
|
+
if (options.idempotencyKey)
|
|
93
|
+
params['idempotencyKey'] = options.idempotencyKey;
|
|
94
|
+
const daten = await transport('createCustomer', params);
|
|
94
95
|
return pflichtObjekt('createCustomer', daten, 'customer');
|
|
95
96
|
}
|
|
96
|
-
async function getCustomer(
|
|
97
|
-
kennungVerlangen('getCustomer',
|
|
98
|
-
const daten = await
|
|
97
|
+
async function getCustomer(transport, ref) {
|
|
98
|
+
kennungVerlangen('getCustomer', ref, '{ customerId } oder { externalId }');
|
|
99
|
+
const daten = await transport('getCustomer', nutzlast(ref));
|
|
99
100
|
return pflichtObjekt('getCustomer', daten, 'customer');
|
|
100
101
|
}
|
|
101
|
-
async function updateCustomer(
|
|
102
|
-
const daten = await
|
|
102
|
+
async function updateCustomer(transport, customerId, patch) {
|
|
103
|
+
const daten = await transport('updateCustomer', { customerId, customer: patch });
|
|
103
104
|
return pflichtObjekt('updateCustomer', daten, 'customer');
|
|
104
105
|
}
|
|
105
|
-
async function searchCustomers(
|
|
106
|
-
const daten = await
|
|
106
|
+
async function searchCustomers(transport, search) {
|
|
107
|
+
const daten = await transport('searchCustomers', nutzlast(search));
|
|
107
108
|
const { eintraege, nextCursor } = seite('searchCustomers', daten, 'customers');
|
|
108
109
|
return { customers: eintraege, nextCursor };
|
|
109
110
|
}
|
|
110
111
|
// ---- Rechnungen -------------------------------------------------------------
|
|
111
|
-
async function issueInvoice(
|
|
112
|
-
const daten = await
|
|
112
|
+
async function issueInvoice(transport, request) {
|
|
113
|
+
const daten = await transport('issueInvoice', nutzlast(request));
|
|
113
114
|
const ergebnis = {
|
|
114
115
|
invoice: pflichtObjekt('issueInvoice', daten, 'invoice'),
|
|
115
116
|
replayed: objekt(daten)['replayed'] === true,
|
|
@@ -129,16 +130,16 @@ async function issueInvoice(rufen, anfrage) {
|
|
|
129
130
|
* danach unveraendert ausstellen. Verbindlich ist das Ausstellen — zwischen
|
|
130
131
|
* Probelauf und Ausstellen kann sich der Kunde oder das Konto aendern.
|
|
131
132
|
*/
|
|
132
|
-
async function previewInvoice(
|
|
133
|
-
const daten = await
|
|
133
|
+
async function previewInvoice(transport, request) {
|
|
134
|
+
const daten = await transport('issueInvoice', { ...nutzlast(request), dryRun: true });
|
|
134
135
|
const ergebnis = { preview: pflichtObjekt('issueInvoice', daten, 'preview') };
|
|
135
136
|
const notice = hinweise(daten);
|
|
136
137
|
if (notice)
|
|
137
138
|
ergebnis.notice = notice;
|
|
138
139
|
return ergebnis;
|
|
139
140
|
}
|
|
140
|
-
async function cancelInvoice(
|
|
141
|
-
const daten = await
|
|
141
|
+
async function cancelInvoice(transport, request) {
|
|
142
|
+
const daten = await transport('cancelInvoice', nutzlast(request));
|
|
142
143
|
return {
|
|
143
144
|
creditNote: pflichtObjekt('cancelInvoice', daten, 'creditNote'),
|
|
144
145
|
original: pflichtObjekt('cancelInvoice', daten, 'original'),
|
|
@@ -146,21 +147,21 @@ async function cancelInvoice(rufen, anfrage) {
|
|
|
146
147
|
replayed: objekt(daten)['replayed'] === true,
|
|
147
148
|
};
|
|
148
149
|
}
|
|
149
|
-
async function createCreditNote(
|
|
150
|
-
const daten = await
|
|
150
|
+
async function createCreditNote(transport, request) {
|
|
151
|
+
const daten = await transport('createCreditNote', nutzlast(request));
|
|
151
152
|
return {
|
|
152
153
|
creditNote: pflichtObjekt('createCreditNote', daten, 'creditNote'),
|
|
153
154
|
remainingCents: zahl(objekt(daten)['remainingCents']),
|
|
154
155
|
replayed: objekt(daten)['replayed'] === true,
|
|
155
156
|
};
|
|
156
157
|
}
|
|
157
|
-
async function getInvoice(
|
|
158
|
-
kennungVerlangen('getInvoice',
|
|
159
|
-
const daten = await
|
|
158
|
+
async function getInvoice(transport, ref) {
|
|
159
|
+
kennungVerlangen('getInvoice', ref, '{ invoiceId } oder { number }');
|
|
160
|
+
const daten = await transport('getInvoice', nutzlast(ref));
|
|
160
161
|
return pflichtObjekt('getInvoice', daten, 'invoice');
|
|
161
162
|
}
|
|
162
|
-
async function listInvoices(
|
|
163
|
-
const daten = await
|
|
163
|
+
async function listInvoices(transport, query = {}) {
|
|
164
|
+
const daten = await transport('listInvoices', nutzlast(query));
|
|
164
165
|
const { eintraege, nextCursor } = seite('listInvoices', daten, 'invoices');
|
|
165
166
|
return { invoices: eintraege, nextCursor };
|
|
166
167
|
}
|
|
@@ -170,8 +171,8 @@ async function listInvoices(rufen, abfrage = {}) {
|
|
|
170
171
|
* ohne Freigabe und vor der Live-Freischaltung — genau dann braucht man die
|
|
171
172
|
* Antwort. Vor dem ersten `issueInvoice` aufrufen und `missing` anzeigen.
|
|
172
173
|
*/
|
|
173
|
-
async function getInvoiceSetupStatus(
|
|
174
|
-
const daten = objekt(await
|
|
174
|
+
async function getInvoiceSetupStatus(transport) {
|
|
175
|
+
const daten = objekt(await transport('getInvoiceSetupStatus', {}));
|
|
175
176
|
if (typeof daten['ready'] !== 'boolean' || !Array.isArray(daten['missing'])) {
|
|
176
177
|
throw new errors_js_1.KasseneckValidationError('getInvoiceSetupStatus', 'Antwort ohne ready/missing', 'response');
|
|
177
178
|
}
|
|
@@ -188,11 +189,11 @@ async function getInvoiceSetupStatus(rufen) {
|
|
|
188
189
|
* eine **Uebersetzungskopie**: dieselbe Nummer, auf jeder Seite als Uebersetzung
|
|
189
190
|
* gekennzeichnet, ohne eingebettete E-Rechnung — keine eigene Rechnung.
|
|
190
191
|
*/
|
|
191
|
-
function getInvoicePdf(
|
|
192
|
+
function getInvoicePdf(binaryTransport, invoiceId, options = {}) {
|
|
192
193
|
const params = { invoiceId };
|
|
193
|
-
if (
|
|
194
|
-
params['language'] =
|
|
195
|
-
return
|
|
194
|
+
if (options.language)
|
|
195
|
+
params['language'] = options.language;
|
|
196
|
+
return binaryTransport('getInvoicePdf', params);
|
|
196
197
|
}
|
|
197
198
|
/**
|
|
198
199
|
* Eine Zahlung nachtragen, die nach dem Ausstellen eingetroffen ist
|
|
@@ -203,8 +204,8 @@ function getInvoicePdf(rufenBinaer, invoiceId, optionen = {}) {
|
|
|
203
204
|
* zusaetzlich `notice` — eine Barzahlung ist ein Barumsatz und braucht einen
|
|
204
205
|
* Beleg (§ 132a BAO), den dieser Vermerk nicht ersetzt.
|
|
205
206
|
*/
|
|
206
|
-
async function recordInvoicePayment(
|
|
207
|
-
const daten = await
|
|
207
|
+
async function recordInvoicePayment(transport, request) {
|
|
208
|
+
const daten = await transport('recordInvoicePayment', nutzlast(request));
|
|
208
209
|
const roh = objekt(daten);
|
|
209
210
|
const ergebnis = {
|
|
210
211
|
invoice: pflichtObjekt('recordInvoicePayment', daten, 'invoice'),
|
|
@@ -217,22 +218,31 @@ async function recordInvoicePayment(rufen, anfrage) {
|
|
|
217
218
|
return ergebnis;
|
|
218
219
|
}
|
|
219
220
|
/** Die Marken des Kontos — die Kennung geht als `brandId` in `issueInvoice`. */
|
|
220
|
-
async function listBrands(
|
|
221
|
-
const brands = objekt(await
|
|
221
|
+
async function listBrands(transport) {
|
|
222
|
+
const brands = objekt(await transport('listBrands', {}))['brands'];
|
|
222
223
|
if (!Array.isArray(brands))
|
|
223
224
|
throw new errors_js_1.KasseneckValidationError('listBrands', 'Antwort ohne brands', 'response');
|
|
224
225
|
return brands;
|
|
225
226
|
}
|
|
226
227
|
/**
|
|
227
|
-
* Die E-Rechnung
|
|
228
|
-
* und nicht als rohe Datei: so
|
|
229
|
-
* (`einvoice_incomplete` mit `missing[]`) ein
|
|
228
|
+
* Die E-Rechnung samt Format und Dateiname, genau wie der Server sie schickt.
|
|
229
|
+
* Sie kommt im gewohnten Umschlag (`data.xml`) und nicht als rohe Datei: so
|
|
230
|
+
* bleibt ein fachlicher Fehler (`einvoice_incomplete` mit `missing[]`) ein
|
|
231
|
+
* gewoehnlicher Fehler. Den Dateinamen nicht selbst bauen, sondern
|
|
232
|
+
* `filename` nehmen (`invoice-<Nummer>.xml`).
|
|
230
233
|
*/
|
|
231
|
-
async function getInvoiceXml(
|
|
232
|
-
const daten = await
|
|
233
|
-
const xml =
|
|
234
|
+
async function getInvoiceXml(transport, invoiceId, format = 'ubl') {
|
|
235
|
+
const daten = objekt(await transport('getInvoiceXml', { invoiceId, format }));
|
|
236
|
+
const { xml, filename } = daten;
|
|
237
|
+
const gesendet = daten['format'];
|
|
234
238
|
if (typeof xml !== 'string' || !xml) {
|
|
235
239
|
throw new errors_js_1.KasseneckValidationError('getInvoiceXml', 'Antwort ohne xml', 'response');
|
|
236
240
|
}
|
|
237
|
-
|
|
241
|
+
if (typeof gesendet !== 'string' || !vertrag_js_1.EINVOICE_FORMATS.includes(gesendet)) {
|
|
242
|
+
throw new errors_js_1.KasseneckValidationError('getInvoiceXml', 'Antwort ohne gueltiges format', 'response');
|
|
243
|
+
}
|
|
244
|
+
if (typeof filename !== 'string' || !filename) {
|
|
245
|
+
throw new errors_js_1.KasseneckValidationError('getInvoiceXml', 'Antwort ohne filename', 'response');
|
|
246
|
+
}
|
|
247
|
+
return { xml, format: gesendet, filename };
|
|
238
248
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fehler der Rechnungs-API auswerten: am Code, nie am Text.
|
|
3
|
+
*
|
|
4
|
+
* Es zaehlen die Codes des Vertrags ([INVOICE_ERROR_CODES]) und die, die
|
|
5
|
+
* Anmeldung und Rand auf jedem Rechnungsaufruf erzeugen koennen
|
|
6
|
+
* ([INVOICE_REQUEST_ERROR_CODES], z. B. `dialect_mismatch`, `not_found`,
|
|
7
|
+
* `route_missing`). Ein fremder Code ist fuer diese Helfer kein
|
|
8
|
+
* Rechnungs-Fehler: wer darauf verzweigt, soll es bewusst ueber
|
|
9
|
+
* `KasseneckApiError.code` tun.
|
|
10
|
+
*/
|
|
11
|
+
import type { KasseneckApiError } from '../client/errors.js';
|
|
12
|
+
import { type InvoiceErrorCode, type InvoiceRequestErrorCode } from './vertrag.js';
|
|
13
|
+
/** Ein Code, den ein Rechnungsaufruf liefern kann. */
|
|
14
|
+
export type InvoiceApiErrorCode = InvoiceErrorCode | InvoiceRequestErrorCode;
|
|
15
|
+
/** `true` fuer einen Code aus [INVOICE_ERROR_CODES] oder [INVOICE_REQUEST_ERROR_CODES]. */
|
|
16
|
+
export declare function isInvoiceErrorCode(value: unknown): value is InvoiceApiErrorCode;
|
|
17
|
+
/** Der Fehlercode eines geworfenen Fehlers; `undefined`, wenn es keiner der Rechnungs-API ist. */
|
|
18
|
+
export declare function invoiceErrorCode(error: unknown): InvoiceApiErrorCode | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Kurzform fuer `catch (e) { if (isInvoiceError(e, 'customer_exists')) … }`.
|
|
21
|
+
* Ohne `code`: ist es ueberhaupt ein Fehler der Rechnungs-API?
|
|
22
|
+
*/
|
|
23
|
+
export declare function isInvoiceError(error: unknown, code?: InvoiceApiErrorCode): error is KasseneckApiError;
|
|
24
|
+
/** Ein Feldfehler aus `data.errors[]` einer `validation`-Antwort. */
|
|
25
|
+
export interface InvoiceFieldError {
|
|
26
|
+
/** Feldpfad in der gesendeten Anfrage, z. B. `items[2].vatRate` oder `customer.vatId`. */
|
|
27
|
+
field: string;
|
|
28
|
+
message: string;
|
|
29
|
+
}
|
|
30
|
+
/** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
|
|
31
|
+
export declare function invoiceFieldErrors(error: unknown): InvoiceFieldError[];
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Fehler der Rechnungs-API auswerten: am Code, nie am Text.
|
|
4
|
+
*
|
|
5
|
+
* Es zaehlen die Codes des Vertrags ([INVOICE_ERROR_CODES]) und die, die
|
|
6
|
+
* Anmeldung und Rand auf jedem Rechnungsaufruf erzeugen koennen
|
|
7
|
+
* ([INVOICE_REQUEST_ERROR_CODES], z. B. `dialect_mismatch`, `not_found`,
|
|
8
|
+
* `route_missing`). Ein fremder Code ist fuer diese Helfer kein
|
|
9
|
+
* Rechnungs-Fehler: wer darauf verzweigt, soll es bewusst ueber
|
|
10
|
+
* `KasseneckApiError.code` tun.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.isInvoiceErrorCode = isInvoiceErrorCode;
|
|
14
|
+
exports.invoiceErrorCode = invoiceErrorCode;
|
|
15
|
+
exports.isInvoiceError = isInvoiceError;
|
|
16
|
+
exports.invoiceFieldErrors = invoiceFieldErrors;
|
|
17
|
+
const fehlercodes_js_1 = require("../client/fehlercodes.js");
|
|
18
|
+
const vertrag_js_1 = require("./vertrag.js");
|
|
19
|
+
const BEKANNT = new Set([...vertrag_js_1.INVOICE_ERROR_CODES, ...vertrag_js_1.INVOICE_REQUEST_ERROR_CODES]);
|
|
20
|
+
/** `true` fuer einen Code aus [INVOICE_ERROR_CODES] oder [INVOICE_REQUEST_ERROR_CODES]. */
|
|
21
|
+
function isInvoiceErrorCode(value) {
|
|
22
|
+
return typeof value === 'string' && BEKANNT.has(value);
|
|
23
|
+
}
|
|
24
|
+
/** Der Fehlercode eines geworfenen Fehlers; `undefined`, wenn es keiner der Rechnungs-API ist. */
|
|
25
|
+
function invoiceErrorCode(error) {
|
|
26
|
+
return (0, fehlercodes_js_1.bekannterCode)(error, BEKANNT);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Kurzform fuer `catch (e) { if (isInvoiceError(e, 'customer_exists')) … }`.
|
|
30
|
+
* Ohne `code`: ist es ueberhaupt ein Fehler der Rechnungs-API?
|
|
31
|
+
*/
|
|
32
|
+
function isInvoiceError(error, code) {
|
|
33
|
+
const gefunden = invoiceErrorCode(error);
|
|
34
|
+
return gefunden !== undefined && (code === undefined || gefunden === code);
|
|
35
|
+
}
|
|
36
|
+
/** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
|
|
37
|
+
function invoiceFieldErrors(error) {
|
|
38
|
+
return (0, fehlercodes_js_1.feldfehlerVon)(error);
|
|
39
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@kreiseck/kasseneck-api/invoice` – Rechnungen (§ 11 UStG, keine Belege)
|
|
3
|
+
* und Kunden ueber die Rechnungs-API.
|
|
4
|
+
*
|
|
5
|
+
* Ein eigener Unterpfad wie `partner`: der `api_key` eines Kontos, mit dem
|
|
6
|
+
* Rechnungen ausgestellt werden, gehoert auf einen **Server** und soll nicht
|
|
7
|
+
* versehentlich in ein Browser-Buendel der Kasse wandern.
|
|
8
|
+
*
|
|
9
|
+
* Die Beschreibung der Endpunkte steht in der Referenz des Backends
|
|
10
|
+
* (`docs/api/rechnungen.md`). Was hier steht, ist der Vertrag als Daten und die
|
|
11
|
+
* Benutzung des Clients.
|
|
12
|
+
*/
|
|
13
|
+
export { createInvoiceApi, type InvoiceApi, type InvoiceApiOptions } from './api.js';
|
|
14
|
+
export { invoiceKeyAuth, type InvoiceKeyAuthOptions } from './auth.js';
|
|
15
|
+
export { isInvoiceError, isInvoiceErrorCode, invoiceErrorCode, invoiceFieldErrors, type InvoiceApiErrorCode, type InvoiceFieldError, } from './fehler.js';
|
|
16
|
+
export { cancelInvoice, createCreditNote, createCustomer, getCustomer, getInvoice, getInvoicePdf, getInvoiceSetupStatus, getInvoiceXml, issueInvoice, listBrands, listInvoices, previewInvoice, recordInvoicePayment, searchCustomers, updateCustomer, } from './endpunkte.js';
|
|
17
|
+
export type { Brand, CancelInvoiceRequest, CancelResult, CreditNoteRequest, CreditNoteResult, Customer, CustomerInput, CustomerPage, CustomerSearch, EInvoiceStatus, Invoice, InvoiceDetail, InvoiceDetailPayment, InvoiceItem, InvoiceItemInput, InvoiceListQuery, InvoicePage, InvoiceRecipient, InvoiceSetupGap, InvoiceSetupStatus, InvoiceTotals, InvoiceXml, InvoiceNotice, InvoicePayment, InvoicePreview, InvoiceRateTotals, IssueInvoiceRequest, IssueResult, PaymentInput, PreviewResult, RecordPaymentRequest, RecordPaymentResult, } from './typen.js';
|
|
18
|
+
export { INVOICE_TEXTS, invoiceText, type InvoiceTextKey } from './texte.js';
|
|
19
|
+
export { computeInvoiceTotals, ZERO_RATED_TAX_SCHEMES, type TotalsItem } from './summen.js';
|
|
20
|
+
export { proratedPriceMicros, MAX_AMOUNT_CENTS, itemFromEuro, formatUnitPrice, CalcError, calculateInvoice, roundDiv, vatRateMapKey, formatVatRate, type CalcResult, type CalcErrorCode, type CalcOptions, type CalcItem, type RateTotal, type ItemConversion, type ConversionReason, type LineAmount, } from './calc.js';
|
|
21
|
+
export { INVOICE_CONTRACT_VERSION, INVOICE_ENDPOINTS, INVOICE_ERROR_CODES, INVOICE_REQUEST_ERROR_CODES, CREDIT_NOTE_REASONS, TAX_SCHEMES, PRICE_MODES, VAT_RATES, CUSTOMER_TYPES, INVOICE_LIST_STATUS, DOC_TYPES, EINVOICE_FORMATS, EINVOICE_MISSING_CODES, WRITE_OFF_REASON_CODES, INVOICE_LANGUAGES, INVOICE_PAYMENT_METHODS, ITEM_KINDS, REVERSE_CHARGE_REASONS, INVOICE_NOTICE_CODES, INVOICE_UNITS, INVOICE_UNIT_CODES, INVOICE_SETUP_REQUIREMENTS, CUSTOMER_FIELDS, ITEM_FIELDS, ITEM_PRICE_EXACTLY_ONE, INVOICE_REQUESTS, INVOICE_EXACTLY_ONE, INVOICE_AT_LEAST_ONE, type InvoiceEndpoint, type InvoiceErrorCode, type InvoiceRequestErrorCode, type CreditNoteReason, type TaxScheme, type PriceMode, type VatRatePercent, type CustomerType, type InvoiceListStatus, type DocType, type EInvoiceFormat, type EInvoiceMissingCode, type WriteOffReasonCode, type InvoiceLanguage, type InvoicePaymentMethod, type ItemKind, type ReverseChargeReason, type InvoiceNoticeCode, type InvoiceUnit, type InvoiceSetupRequirement, type FieldFormat, type Field, } from './vertrag.js';
|