@kreiseck/kasseneck-api 0.13.2 → 0.15.0
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 +98 -0
- package/README.md +96 -5
- package/dist/cjs/client/aufrufe.d.ts +1 -1
- package/dist/cjs/client/aufrufe.js +11 -0
- package/dist/cjs/client/receipts.d.ts +7 -0
- package/dist/cjs/client/receipts.js +1 -0
- package/dist/cjs/kasse/drucker.d.ts +5 -0
- package/dist/cjs/kasse/drucker.js +9 -0
- package/dist/cjs/kasse/settings.js +5 -2
- package/dist/cjs/printing/escpos.d.ts +38 -4
- package/dist/cjs/printing/escpos.js +87 -15
- package/dist/cjs/printing/index.d.ts +2 -2
- package/dist/cjs/printing/index.js +5 -1
- package/dist/cjs/printing/qr-groesse.d.ts +26 -21
- package/dist/cjs/printing/qr-groesse.js +22 -8
- package/dist/cjs/react/index.d.ts +53 -0
- package/dist/cjs/react/index.js +81 -0
- package/dist/cjs/receipt/bild.d.ts +14 -0
- package/dist/cjs/receipt/bild.js +65 -0
- package/dist/cjs/receipt/blatt.d.ts +107 -0
- package/dist/cjs/receipt/blatt.js +137 -0
- package/dist/cjs/receipt/epos.d.ts +19 -8
- package/dist/cjs/receipt/epos.js +39 -20
- package/dist/cjs/receipt/grid.d.ts +1 -1
- package/dist/cjs/receipt/grid.js +9 -1
- package/dist/cjs/receipt/index.d.ts +4 -2
- package/dist/cjs/receipt/index.js +17 -1
- package/dist/cjs/receipt/layout-escpos.d.ts +31 -3
- package/dist/cjs/receipt/layout-escpos.js +58 -18
- package/dist/cjs/rechnung/api.d.ts +43 -0
- package/dist/cjs/rechnung/api.js +35 -0
- package/dist/cjs/rechnung/auth.d.ts +21 -0
- package/dist/cjs/rechnung/auth.js +36 -0
- package/dist/cjs/rechnung/endpunkte.d.ts +48 -0
- package/dist/cjs/rechnung/endpunkte.js +129 -0
- package/dist/cjs/rechnung/fehler.d.ts +21 -0
- package/dist/cjs/rechnung/fehler.js +44 -0
- package/dist/cjs/rechnung/index.d.ts +18 -0
- package/dist/cjs/rechnung/index.js +52 -0
- package/dist/cjs/rechnung/typen.d.ts +224 -0
- package/dist/cjs/rechnung/typen.js +9 -0
- package/dist/cjs/rechnung/vertrag.d.ts +98 -0
- package/dist/cjs/rechnung/vertrag.js +191 -0
- package/dist/esm/client/aufrufe.d.ts +1 -1
- package/dist/esm/client/aufrufe.js +11 -0
- package/dist/esm/client/receipts.d.ts +7 -0
- package/dist/esm/client/receipts.js +1 -0
- package/dist/esm/kasse/drucker.d.ts +5 -0
- package/dist/esm/kasse/drucker.js +9 -0
- package/dist/esm/kasse/settings.js +5 -2
- package/dist/esm/printing/escpos.d.ts +38 -4
- package/dist/esm/printing/escpos.js +84 -15
- 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 +26 -21
- package/dist/esm/printing/qr-groesse.js +21 -8
- package/dist/esm/react/index.d.ts +53 -0
- package/dist/esm/react/index.js +80 -1
- package/dist/esm/receipt/bild.d.ts +14 -0
- package/dist/esm/receipt/bild.js +62 -0
- package/dist/esm/receipt/blatt.d.ts +107 -0
- package/dist/esm/receipt/blatt.js +128 -0
- package/dist/esm/receipt/epos.d.ts +19 -8
- package/dist/esm/receipt/epos.js +40 -22
- package/dist/esm/receipt/grid.d.ts +1 -1
- package/dist/esm/receipt/grid.js +9 -1
- package/dist/esm/receipt/index.d.ts +4 -2
- package/dist/esm/receipt/index.js +4 -2
- package/dist/esm/receipt/layout-escpos.d.ts +31 -3
- package/dist/esm/receipt/layout-escpos.js +58 -20
- package/dist/esm/rechnung/api.d.ts +43 -0
- package/dist/esm/rechnung/api.js +32 -0
- package/dist/esm/rechnung/auth.d.ts +21 -0
- package/dist/esm/rechnung/auth.js +33 -0
- package/dist/esm/rechnung/endpunkte.d.ts +48 -0
- package/dist/esm/rechnung/endpunkte.js +116 -0
- package/dist/esm/rechnung/fehler.d.ts +21 -0
- package/dist/esm/rechnung/fehler.js +39 -0
- package/dist/esm/rechnung/index.d.ts +18 -0
- package/dist/esm/rechnung/index.js +17 -0
- package/dist/esm/rechnung/typen.d.ts +224 -0
- package/dist/esm/rechnung/typen.js +8 -0
- package/dist/esm/rechnung/vertrag.d.ts +98 -0
- package/dist/esm/rechnung/vertrag.js +188 -0
- package/fixtures/erwartet/karte-eigener.blatt32.json +159 -0
- package/fixtures/erwartet/karte-eigener.blatt48.json +159 -0
- package/fixtures/erwartet/karte-gptom-ios.blatt32.json +231 -0
- package/fixtures/erwartet/karte-gptom-ios.blatt48.json +231 -0
- package/fixtures/erwartet/karte-gptom.blatt32.json +231 -0
- package/fixtures/erwartet/karte-gptom.blatt48.json +231 -0
- package/fixtures/erwartet/karte-hobex-cloud.blatt32.json +201 -0
- package/fixtures/erwartet/karte-hobex-cloud.blatt48.json +201 -0
- package/fixtures/erwartet/karte-hobex-hps.blatt32.json +225 -0
- package/fixtures/erwartet/karte-hobex-hps.blatt48.json +225 -0
- package/fixtures/erwartet/karte-mypos.blatt32.json +255 -0
- package/fixtures/erwartet/karte-mypos.blatt48.json +243 -0
- package/fixtures/erwartet/karte-stripe-eps.blatt32.json +195 -0
- package/fixtures/erwartet/karte-stripe-eps.blatt48.json +195 -0
- package/fixtures/erwartet/karte-stripe.blatt32.json +213 -0
- package/fixtures/erwartet/karte-stripe.blatt48.json +213 -0
- package/fixtures/erwartet/karte-sumup.blatt32.json +219 -0
- package/fixtures/erwartet/karte-sumup.blatt48.json +207 -0
- package/fixtures/erwartet/langer-artikelname.blatt32.json +177 -0
- package/fixtures/erwartet/langer-artikelname.blatt48.json +171 -0
- package/fixtures/erwartet/logo-probe-hoch.raster32.txt +120 -0
- package/fixtures/erwartet/logo-probe.raster32.txt +54 -0
- package/fixtures/erwartet/null-ausfall.blatt32.json +207 -0
- package/fixtures/erwartet/null-ausfall.blatt48.json +189 -0
- package/fixtures/erwartet/null-ausfall.grid32.txt +2 -0
- package/fixtures/erwartet/null-ausfall.grid48.txt +2 -0
- package/fixtures/erwartet/null-jahr.blatt32.json +213 -0
- package/fixtures/erwartet/null-jahr.blatt48.json +189 -0
- package/fixtures/erwartet/null-jahr.grid32.txt +2 -0
- package/fixtures/erwartet/null-jahr.grid48.txt +2 -0
- package/fixtures/erwartet/null-monat.blatt32.json +207 -0
- package/fixtures/erwartet/null-monat.blatt48.json +189 -0
- package/fixtures/erwartet/null-monat.grid32.txt +2 -0
- package/fixtures/erwartet/null-monat.grid48.txt +2 -0
- package/fixtures/erwartet/null-pruef.blatt32.json +207 -0
- package/fixtures/erwartet/null-pruef.blatt48.json +189 -0
- package/fixtures/erwartet/null-pruef.grid32.txt +2 -0
- package/fixtures/erwartet/null-pruef.grid48.txt +2 -0
- package/fixtures/erwartet/null-schluss.blatt32.json +207 -0
- package/fixtures/erwartet/null-schluss.blatt48.json +189 -0
- package/fixtures/erwartet/null-schluss.grid32.txt +2 -0
- package/fixtures/erwartet/null-schluss.grid48.txt +2 -0
- package/fixtures/erwartet/null-start.blatt32.json +207 -0
- package/fixtures/erwartet/null-start.blatt48.json +189 -0
- package/fixtures/erwartet/null-start.grid32.txt +2 -0
- package/fixtures/erwartet/null-start.grid48.txt +2 -0
- package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt32.json +213 -0
- package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt48.json +207 -0
- package/fixtures/erwartet/rabatt-einfach.blatt32.json +183 -0
- package/fixtures/erwartet/rabatt-einfach.blatt48.json +177 -0
- package/fixtures/erwartet/rabatt-trinkgeld.blatt32.json +213 -0
- package/fixtures/erwartet/rabatt-trinkgeld.blatt48.json +207 -0
- package/fixtures/erwartet/rabatt-wertgutschein.blatt32.json +219 -0
- package/fixtures/erwartet/rabatt-wertgutschein.blatt48.json +213 -0
- package/fixtures/erwartet/rabattzeilen.blatt32.json +201 -0
- package/fixtures/erwartet/rabattzeilen.blatt48.json +195 -0
- package/fixtures/erwartet/signaturausfall-verkauf.blatt32.json +195 -0
- package/fixtures/erwartet/signaturausfall-verkauf.blatt48.json +183 -0
- package/fixtures/erwartet/storno-rabatt.blatt32.json +249 -0
- package/fixtures/erwartet/storno-rabatt.blatt48.json +237 -0
- package/fixtures/erwartet/storno-rabatt.grid32.txt +2 -0
- package/fixtures/erwartet/storno-rabatt.grid48.txt +2 -0
- package/fixtures/erwartet/storno-teil.blatt32.json +207 -0
- package/fixtures/erwartet/storno-teil.blatt48.json +201 -0
- package/fixtures/erwartet/storno-teil.grid32.txt +2 -0
- package/fixtures/erwartet/storno-teil.grid48.txt +2 -0
- package/fixtures/erwartet/storno-voll.blatt32.json +219 -0
- package/fixtures/erwartet/storno-voll.blatt48.json +213 -0
- package/fixtures/erwartet/storno-voll.grid32.txt +2 -0
- package/fixtures/erwartet/storno-voll.grid48.txt +2 -0
- package/fixtures/erwartet/testkasse-verkauf.blatt32.json +225 -0
- package/fixtures/erwartet/testkasse-verkauf.blatt48.json +219 -0
- package/fixtures/erwartet/testkasse-verkauf.grid32.txt +5 -1
- package/fixtures/erwartet/testkasse-verkauf.grid48.txt +5 -1
- package/fixtures/erwartet/testsignatur-verkauf.blatt32.json +237 -0
- package/fixtures/erwartet/testsignatur-verkauf.blatt48.json +219 -0
- package/fixtures/erwartet/testsignatur-verkauf.grid32.txt +5 -1
- package/fixtures/erwartet/testsignatur-verkauf.grid48.txt +5 -1
- package/fixtures/erwartet/training.blatt32.json +237 -0
- package/fixtures/erwartet/training.blatt48.json +219 -0
- package/fixtures/erwartet/training.grid32.txt +2 -0
- package/fixtures/erwartet/training.grid48.txt +2 -0
- package/fixtures/erwartet/verkauf-bar.blatt32.json +177 -0
- package/fixtures/erwartet/verkauf-bar.blatt48.json +171 -0
- package/fixtures/erwartet/verkauf-karte.blatt32.json +177 -0
- package/fixtures/erwartet/verkauf-karte.blatt48.json +171 -0
- package/fixtures/erwartet/verkauf-kleinunternehmer.blatt32.json +183 -0
- package/fixtures/erwartet/verkauf-kleinunternehmer.blatt48.json +177 -0
- package/fixtures/hobex-hps-codes.json +1 -1
- package/fixtures/kasse-settings-standard.json +1 -1
- package/fixtures/kasse-texte.json +1 -1
- package/fixtures/manifest.json +109 -43
- package/fixtures/oberflaeche.json +87 -1
- package/fixtures/rechnung-api-beispiele/credit-fehler-grund.json +24 -0
- package/fixtures/rechnung-api-beispiele/credit-ok.json +20 -0
- package/fixtures/rechnung-api-beispiele/customer-fehler-uid.json +25 -0
- package/fixtures/rechnung-api-beispiele/customer-get-fehler-beide.json +15 -0
- package/fixtures/rechnung-api-beispiele/customer-ok.json +20 -0
- package/fixtures/rechnung-api-beispiele/customer-search-fehler-leer.json +14 -0
- package/fixtures/rechnung-api-beispiele/issue-brutto-20.json +27 -0
- package/fixtures/rechnung-api-beispiele/issue-fehler-cent.json +26 -0
- package/fixtures/rechnung-api-beispiele/issue-fehler-menge.json +26 -0
- package/fixtures/rechnung-api-beispiele/issue-fehler-negativ.json +26 -0
- package/fixtures/rechnung-api-beispiele/issue-fehler-satz.json +26 -0
- package/fixtures/rechnung-api-beispiele/issue-fehler-unbekannt.json +27 -0
- package/fixtures/rechnung-api-beispiele/issue-gemischt.json +33 -0
- package/fixtures/rechnung-api-beispiele/issue-kleinunternehmer.json +27 -0
- package/fixtures/rechnung-api-beispiele/issue-netto-20.json +28 -0
- package/fixtures/rechnung-api-beispiele/issue-rabatt.json +28 -0
- package/fixtures/rechnung-api.schema.json +672 -0
- package/package.json +12 -1
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Der Vertrag der Rechnungs-API — als Daten, nicht als Prosa.
|
|
3
|
+
*
|
|
4
|
+
* Aus dieser Datei entstehen drei Dinge, damit sie nicht auseinanderlaufen
|
|
5
|
+
* koennen:
|
|
6
|
+
*
|
|
7
|
+
* 1. `fixtures/rechnung-api.schema.json` (`npm run fixtures:rechnung`) — das
|
|
8
|
+
* Backend liest es aus dem vendorierten Paket und vergleicht es in beide
|
|
9
|
+
* Richtungen mit seiner eigenen Pruefung; der Dart-Zwilling zieht es byteweise.
|
|
10
|
+
* 2. Die Listen unter `rechnung` in `fixtures/oberflaeche.json` (Codes, Gruende,
|
|
11
|
+
* Enums) — ueber denselben Namensraum-Scan wie der Partner-Teil.
|
|
12
|
+
* 3. Die TypeScript-Typen in `typen.ts`.
|
|
13
|
+
*
|
|
14
|
+
* Nach aussen spricht die Schnittstelle Englisch: Feldnamen, Codes, Gruende.
|
|
15
|
+
* Deutsch bleibt, was ein Mensch liest (`message`, der Aufdruck eines Grundes).
|
|
16
|
+
*
|
|
17
|
+
* Beschrieben wird die Anfrage. Was der Server daraus macht — Rechnungsdatum,
|
|
18
|
+
* Nummer, Summen — ist bewusst **nicht** setzbar.
|
|
19
|
+
*/
|
|
20
|
+
export const RECHNUNG_VERTRAG_VERSION = 1;
|
|
21
|
+
export const RECHNUNG_AUFRUFE = [
|
|
22
|
+
'createCustomer',
|
|
23
|
+
'getCustomer',
|
|
24
|
+
'updateCustomer',
|
|
25
|
+
'searchCustomers',
|
|
26
|
+
'issueInvoice',
|
|
27
|
+
'cancelInvoice',
|
|
28
|
+
'createCreditNote',
|
|
29
|
+
'getInvoice',
|
|
30
|
+
'listInvoices',
|
|
31
|
+
'getInvoicePdf',
|
|
32
|
+
'getInvoiceXml',
|
|
33
|
+
];
|
|
34
|
+
/**
|
|
35
|
+
* Stabile Fehlercodes. Das Fremdsystem verzweigt am Code, der Text darf sich
|
|
36
|
+
* aendern. `validation` traegt zusaetzlich `errors: [{ field, message }]`.
|
|
37
|
+
*/
|
|
38
|
+
export const INVOICE_ERROR_CODES = [
|
|
39
|
+
'validation',
|
|
40
|
+
'idempotency_conflict',
|
|
41
|
+
'module_inactive',
|
|
42
|
+
'customer_not_found',
|
|
43
|
+
'customer_exists',
|
|
44
|
+
'short_code_taken',
|
|
45
|
+
'short_code_immutable',
|
|
46
|
+
'recipient_required',
|
|
47
|
+
'invoice_requirements_missing',
|
|
48
|
+
'invoice_not_found',
|
|
49
|
+
'invoice_ambiguous',
|
|
50
|
+
'not_cancellable',
|
|
51
|
+
'partial_credit_exists',
|
|
52
|
+
'credit_exceeds_invoice',
|
|
53
|
+
'einvoice_incomplete',
|
|
54
|
+
];
|
|
55
|
+
/** Gruende einer Gutschrift. Der Server druckt den deutschen Anzeigetext. */
|
|
56
|
+
export const CREDIT_NOTE_REASONS = [
|
|
57
|
+
'cancellation',
|
|
58
|
+
'price_reduction',
|
|
59
|
+
'return',
|
|
60
|
+
'incorrect_invoice',
|
|
61
|
+
'other',
|
|
62
|
+
];
|
|
63
|
+
export const TAX_SCHEMES = ['normal', 'smallBusiness', 'reverseCharge', 'igLieferung', 'exportThirdCountry'];
|
|
64
|
+
export const PRICE_MODES = ['net', 'gross'];
|
|
65
|
+
export const VAT_RATES = [0, 10, 13, 20];
|
|
66
|
+
export const CUSTOMER_TYPES = ['private', 'company'];
|
|
67
|
+
export const INVOICE_LIST_STATUS = ['final', 'paid', 'cancelled', 'open', 'overdue'];
|
|
68
|
+
export const DOC_TYPES = ['RE', 'GU'];
|
|
69
|
+
export const EINVOICE_FORMATS = ['ubl', 'cii'];
|
|
70
|
+
const text = (max, pflicht = false, extra = {}) => ({ typ: 'string', pflicht, max, ...(pflicht && extra.min === undefined ? { min: 1 } : {}), ...extra });
|
|
71
|
+
const idempotencyKey = (pflicht) => ({ typ: 'string', pflicht, min: 1, max: 120 });
|
|
72
|
+
const id = { typ: 'string', pflicht: false, min: 1, max: 128 };
|
|
73
|
+
const idPflicht = { typ: 'string', pflicht: true, min: 1, max: 128 };
|
|
74
|
+
const datum = (pflicht = false) => ({ typ: 'string', pflicht, min: 10, max: 10, format: 'date' });
|
|
75
|
+
const limit = { typ: 'integer', pflicht: false, min: 1, max: 100 };
|
|
76
|
+
const cursor = { typ: 'string', pflicht: false, min: 1, max: 500 };
|
|
77
|
+
/** Kunde, wie das Fremdsystem ihn schickt. `vatId` ist die UID-Nummer. */
|
|
78
|
+
export const KUNDE_FELDER = Object.freeze({
|
|
79
|
+
type: { typ: 'enum', pflicht: true, werte: CUSTOMER_TYPES },
|
|
80
|
+
name: text(200, true),
|
|
81
|
+
legalForm: text(40),
|
|
82
|
+
email: text(254, false, { format: 'email' }),
|
|
83
|
+
phone: text(40, false, { format: 'phone' }),
|
|
84
|
+
street: text(200),
|
|
85
|
+
houseNumber: text(20),
|
|
86
|
+
zip: text(10),
|
|
87
|
+
city: text(100),
|
|
88
|
+
country: text(2, true, { min: 2, format: 'country' }),
|
|
89
|
+
vatId: text(20, false, { format: 'vatId' }),
|
|
90
|
+
shortCode: text(8, false, { format: 'shortCode' }),
|
|
91
|
+
isAuthority: { typ: 'boolean', pflicht: false },
|
|
92
|
+
note: text(1000),
|
|
93
|
+
externalId: { typ: 'string', pflicht: false, min: 1, max: 120 },
|
|
94
|
+
});
|
|
95
|
+
/** Beim Aendern ist jedes Kundenfeld optional. */
|
|
96
|
+
const KUNDE_PATCH = Object.freeze(Object.fromEntries(Object.entries(KUNDE_FELDER).map(([name, feld]) => [name, { ...feld, pflicht: false }])));
|
|
97
|
+
/** Eine Rechnungs- oder Gutschriftsposition. Preise in ganzen Cent. */
|
|
98
|
+
export const POSITION_FELDER = Object.freeze({
|
|
99
|
+
description: text(300, true),
|
|
100
|
+
subtitle: text(1000),
|
|
101
|
+
quantity: { typ: 'number', pflicht: true, min: 0, exklusivMin: true, max: 1_000_000, nachkomma: 3 },
|
|
102
|
+
unit: text(20),
|
|
103
|
+
unitPriceCents: { typ: 'integer', pflicht: true, min: 0, max: 100_000_000 },
|
|
104
|
+
vatRate: { typ: 'enum', pflicht: true, werte: VAT_RATES },
|
|
105
|
+
discountPct: { typ: 'number', pflicht: false, min: 0, max: 100, nachkomma: 2 },
|
|
106
|
+
});
|
|
107
|
+
const positionen = { typ: 'list', pflicht: true, min: 1, max: 500, eintrag: { typ: 'object', pflicht: true, felder: POSITION_FELDER } };
|
|
108
|
+
export const RECHNUNG_ANFRAGEN = Object.freeze({
|
|
109
|
+
createCustomer: {
|
|
110
|
+
customer: { typ: 'object', pflicht: true, felder: KUNDE_FELDER },
|
|
111
|
+
idempotencyKey: idempotencyKey(false),
|
|
112
|
+
},
|
|
113
|
+
getCustomer: {
|
|
114
|
+
customerId: id,
|
|
115
|
+
externalId: { typ: 'string', pflicht: false, min: 1, max: 120 },
|
|
116
|
+
},
|
|
117
|
+
updateCustomer: {
|
|
118
|
+
customerId: idPflicht,
|
|
119
|
+
customer: { typ: 'object', pflicht: true, felder: KUNDE_PATCH },
|
|
120
|
+
},
|
|
121
|
+
searchCustomers: {
|
|
122
|
+
externalId: { typ: 'string', pflicht: false, min: 1, max: 120 },
|
|
123
|
+
vatId: text(20),
|
|
124
|
+
email: text(254),
|
|
125
|
+
name: text(200),
|
|
126
|
+
limit,
|
|
127
|
+
cursor,
|
|
128
|
+
},
|
|
129
|
+
issueInvoice: {
|
|
130
|
+
idempotencyKey: idempotencyKey(true),
|
|
131
|
+
customerId: id,
|
|
132
|
+
taxScheme: { typ: 'enum', pflicht: true, werte: TAX_SCHEMES },
|
|
133
|
+
priceMode: { typ: 'enum', pflicht: true, werte: PRICE_MODES },
|
|
134
|
+
serviceStart: datum(true),
|
|
135
|
+
serviceEnd: datum(),
|
|
136
|
+
paymentTermDays: { typ: 'integer', pflicht: false, min: 0, max: 365 },
|
|
137
|
+
orderReference: text(200),
|
|
138
|
+
intro: text(2000),
|
|
139
|
+
note: text(2000),
|
|
140
|
+
paymentReference: text(140),
|
|
141
|
+
girocode: { typ: 'boolean', pflicht: false },
|
|
142
|
+
tracking: { typ: 'boolean', pflicht: false },
|
|
143
|
+
items: positionen,
|
|
144
|
+
metadata: { typ: 'map', pflicht: false, maxSchluessel: 20, schluesselMuster: '^[a-zA-Z0-9_]{1,40}$', wertMax: 500 },
|
|
145
|
+
},
|
|
146
|
+
cancelInvoice: {
|
|
147
|
+
idempotencyKey: idempotencyKey(true),
|
|
148
|
+
invoiceId: idPflicht,
|
|
149
|
+
reason: { typ: 'enum', pflicht: true, werte: CREDIT_NOTE_REASONS },
|
|
150
|
+
note: text(2000),
|
|
151
|
+
},
|
|
152
|
+
createCreditNote: {
|
|
153
|
+
idempotencyKey: idempotencyKey(true),
|
|
154
|
+
invoiceId: idPflicht,
|
|
155
|
+
reason: { typ: 'enum', pflicht: true, werte: CREDIT_NOTE_REASONS },
|
|
156
|
+
note: text(2000),
|
|
157
|
+
items: positionen,
|
|
158
|
+
},
|
|
159
|
+
getInvoice: {
|
|
160
|
+
invoiceId: id,
|
|
161
|
+
number: { typ: 'string', pflicht: false, min: 1, max: 100 },
|
|
162
|
+
},
|
|
163
|
+
listInvoices: {
|
|
164
|
+
from: datum(),
|
|
165
|
+
to: datum(),
|
|
166
|
+
status: { typ: 'enum', pflicht: false, werte: INVOICE_LIST_STATUS },
|
|
167
|
+
docType: { typ: 'enum', pflicht: false, werte: DOC_TYPES },
|
|
168
|
+
customerId: id,
|
|
169
|
+
limit,
|
|
170
|
+
cursor,
|
|
171
|
+
},
|
|
172
|
+
getInvoicePdf: {
|
|
173
|
+
invoiceId: idPflicht,
|
|
174
|
+
},
|
|
175
|
+
getInvoiceXml: {
|
|
176
|
+
invoiceId: idPflicht,
|
|
177
|
+
format: { typ: 'enum', pflicht: false, werte: EINVOICE_FORMATS },
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
/** Genau eines dieser Felder muss gesetzt sein (je Aufruf, je Gruppe). */
|
|
181
|
+
export const RECHNUNG_GENAU_EINS = Object.freeze({
|
|
182
|
+
getCustomer: [['customerId', 'externalId']],
|
|
183
|
+
getInvoice: [['invoiceId', 'number']],
|
|
184
|
+
});
|
|
185
|
+
/** Mindestens eines dieser Felder muss gesetzt sein (je Aufruf, je Gruppe). */
|
|
186
|
+
export const RECHNUNG_MINDESTENS_EINS = Object.freeze({
|
|
187
|
+
searchCustomers: [['externalId', 'vatId', 'email', 'name']],
|
|
188
|
+
});
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
{
|
|
2
|
+
"zeichen": 32,
|
|
3
|
+
"bloecke": [
|
|
4
|
+
{
|
|
5
|
+
"art": "logo",
|
|
6
|
+
"breiteAnteil": 0.62,
|
|
7
|
+
"hoeheZeilen": 3.968
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"art": "zeile",
|
|
11
|
+
"text": " ",
|
|
12
|
+
"fett": false,
|
|
13
|
+
"leer": true
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"art": "zeile",
|
|
17
|
+
"text": " Bäckerei Muster ",
|
|
18
|
+
"fett": true,
|
|
19
|
+
"leer": false
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"art": "zeile",
|
|
23
|
+
"text": " Hauptplatz 1 ",
|
|
24
|
+
"fett": false,
|
|
25
|
+
"leer": false
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"art": "zeile",
|
|
29
|
+
"text": " 4830 Hallstatt ",
|
|
30
|
+
"fett": false,
|
|
31
|
+
"leer": false
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"art": "zeile",
|
|
35
|
+
"text": " ATU12345678 ",
|
|
36
|
+
"fett": false,
|
|
37
|
+
"leer": false
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"art": "zeile",
|
|
41
|
+
"text": " +43 6134 12345 ",
|
|
42
|
+
"fett": false,
|
|
43
|
+
"leer": false
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"art": "zeile",
|
|
47
|
+
"text": " ",
|
|
48
|
+
"fett": false,
|
|
49
|
+
"leer": true
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"art": "zeile",
|
|
53
|
+
"text": "Datum: 13.08.2026 10:15:30",
|
|
54
|
+
"fett": false,
|
|
55
|
+
"leer": false
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"art": "zeile",
|
|
59
|
+
"text": "Kassen-ID: KASSE1",
|
|
60
|
+
"fett": false,
|
|
61
|
+
"leer": false
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"art": "zeile",
|
|
65
|
+
"text": "Beleg-ID: AT0-KASSE1-66",
|
|
66
|
+
"fett": false,
|
|
67
|
+
"leer": false
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"art": "zeile",
|
|
71
|
+
"text": " ",
|
|
72
|
+
"fett": false,
|
|
73
|
+
"leer": true
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"art": "zeile",
|
|
77
|
+
"text": "1 x Behandlung 120,00 A",
|
|
78
|
+
"fett": false,
|
|
79
|
+
"leer": false
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"art": "zeile",
|
|
83
|
+
"text": " ",
|
|
84
|
+
"fett": false,
|
|
85
|
+
"leer": true
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"art": "zeile",
|
|
89
|
+
"text": "MwSt% MwSt Netto Brutto",
|
|
90
|
+
"fett": false,
|
|
91
|
+
"leer": false
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"art": "zeile",
|
|
95
|
+
"text": "A 20% 20,00 100,00 120,00",
|
|
96
|
+
"fett": false,
|
|
97
|
+
"leer": false
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"art": "zeile",
|
|
101
|
+
"text": "--------------------------------",
|
|
102
|
+
"fett": false,
|
|
103
|
+
"leer": false
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"art": "zeile",
|
|
107
|
+
"text": "Gesamt: 120,00 €",
|
|
108
|
+
"fett": false,
|
|
109
|
+
"leer": false
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"art": "zeile",
|
|
113
|
+
"text": "Zahlungsart: Kartenzahlung",
|
|
114
|
+
"fett": false,
|
|
115
|
+
"leer": false
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"art": "zeile",
|
|
119
|
+
"text": " ",
|
|
120
|
+
"fett": false,
|
|
121
|
+
"leer": true
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"art": "qr",
|
|
125
|
+
"nutzlast": "_R1-AT1_KASSE1_AT0-KASSE1-66_2026-08-13T10:15:30_120,00_0,00_0,00_0,00_0,00_UMSATZ_VORGAENGER_6F0404F0_SIGNATUR",
|
|
126
|
+
"breiteAnteil": 0.828125
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"art": "zeile",
|
|
130
|
+
"text": " ",
|
|
131
|
+
"fett": false,
|
|
132
|
+
"leer": true
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"art": "zeile",
|
|
136
|
+
"text": " Vielen Dank für Ihren Einkauf ",
|
|
137
|
+
"fett": false,
|
|
138
|
+
"leer": false
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"art": "zeile",
|
|
142
|
+
"text": " www.baeckerei-muster.at ",
|
|
143
|
+
"fett": false,
|
|
144
|
+
"leer": false
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"art": "zeile",
|
|
148
|
+
"text": " ",
|
|
149
|
+
"fett": false,
|
|
150
|
+
"leer": true
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"art": "zeile",
|
|
154
|
+
"text": " erstellt mit Kasseneck ",
|
|
155
|
+
"fett": false,
|
|
156
|
+
"leer": false
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
{
|
|
2
|
+
"zeichen": 48,
|
|
3
|
+
"bloecke": [
|
|
4
|
+
{
|
|
5
|
+
"art": "logo",
|
|
6
|
+
"breiteAnteil": 0.5208333333333334,
|
|
7
|
+
"hoeheZeilen": 5
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"art": "zeile",
|
|
11
|
+
"text": " ",
|
|
12
|
+
"fett": false,
|
|
13
|
+
"leer": true
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"art": "zeile",
|
|
17
|
+
"text": " Bäckerei Muster ",
|
|
18
|
+
"fett": true,
|
|
19
|
+
"leer": false
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"art": "zeile",
|
|
23
|
+
"text": " Hauptplatz 1 ",
|
|
24
|
+
"fett": false,
|
|
25
|
+
"leer": false
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"art": "zeile",
|
|
29
|
+
"text": " 4830 Hallstatt ",
|
|
30
|
+
"fett": false,
|
|
31
|
+
"leer": false
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"art": "zeile",
|
|
35
|
+
"text": " ATU12345678 ",
|
|
36
|
+
"fett": false,
|
|
37
|
+
"leer": false
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"art": "zeile",
|
|
41
|
+
"text": " +43 6134 12345 ",
|
|
42
|
+
"fett": false,
|
|
43
|
+
"leer": false
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"art": "zeile",
|
|
47
|
+
"text": " ",
|
|
48
|
+
"fett": false,
|
|
49
|
+
"leer": true
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"art": "zeile",
|
|
53
|
+
"text": "Datum: 13.08.2026 10:15:30",
|
|
54
|
+
"fett": false,
|
|
55
|
+
"leer": false
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"art": "zeile",
|
|
59
|
+
"text": "Kassen-ID: KASSE1",
|
|
60
|
+
"fett": false,
|
|
61
|
+
"leer": false
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"art": "zeile",
|
|
65
|
+
"text": "Beleg-ID: AT0-KASSE1-66",
|
|
66
|
+
"fett": false,
|
|
67
|
+
"leer": false
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"art": "zeile",
|
|
71
|
+
"text": " ",
|
|
72
|
+
"fett": false,
|
|
73
|
+
"leer": true
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"art": "zeile",
|
|
77
|
+
"text": "1 x Behandlung 120,00 A",
|
|
78
|
+
"fett": false,
|
|
79
|
+
"leer": false
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"art": "zeile",
|
|
83
|
+
"text": " ",
|
|
84
|
+
"fett": false,
|
|
85
|
+
"leer": true
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"art": "zeile",
|
|
89
|
+
"text": "MwSt% MwSt Netto Brutto",
|
|
90
|
+
"fett": false,
|
|
91
|
+
"leer": false
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"art": "zeile",
|
|
95
|
+
"text": "A 20% 20,00 100,00 120,00",
|
|
96
|
+
"fett": false,
|
|
97
|
+
"leer": false
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"art": "zeile",
|
|
101
|
+
"text": "------------------------------------------------",
|
|
102
|
+
"fett": false,
|
|
103
|
+
"leer": false
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"art": "zeile",
|
|
107
|
+
"text": "Gesamt: 120,00 €",
|
|
108
|
+
"fett": false,
|
|
109
|
+
"leer": false
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"art": "zeile",
|
|
113
|
+
"text": "Zahlungsart: Kartenzahlung",
|
|
114
|
+
"fett": false,
|
|
115
|
+
"leer": false
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"art": "zeile",
|
|
119
|
+
"text": " ",
|
|
120
|
+
"fett": false,
|
|
121
|
+
"leer": true
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"art": "qr",
|
|
125
|
+
"nutzlast": "_R1-AT1_KASSE1_AT0-KASSE1-66_2026-08-13T10:15:30_120,00_0,00_0,00_0,00_0,00_UMSATZ_VORGAENGER_6F0404F0_SIGNATUR",
|
|
126
|
+
"breiteAnteil": 0.5520833333333334
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"art": "zeile",
|
|
130
|
+
"text": " ",
|
|
131
|
+
"fett": false,
|
|
132
|
+
"leer": true
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"art": "zeile",
|
|
136
|
+
"text": " Vielen Dank für Ihren Einkauf ",
|
|
137
|
+
"fett": false,
|
|
138
|
+
"leer": false
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"art": "zeile",
|
|
142
|
+
"text": " www.baeckerei-muster.at ",
|
|
143
|
+
"fett": false,
|
|
144
|
+
"leer": false
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"art": "zeile",
|
|
148
|
+
"text": " ",
|
|
149
|
+
"fett": false,
|
|
150
|
+
"leer": true
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"art": "zeile",
|
|
154
|
+
"text": " erstellt mit Kasseneck ",
|
|
155
|
+
"fett": false,
|
|
156
|
+
"leer": false
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
}
|