@kreiseck/kasseneck-api 0.15.0 → 0.17.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 +46 -0
- package/README.md +45 -0
- package/dist/cjs/client/aufrufe.d.ts +1 -1
- package/dist/cjs/client/aufrufe.js +2 -0
- package/dist/cjs/rechnung/api.d.ts +10 -3
- package/dist/cjs/rechnung/api.js +3 -1
- package/dist/cjs/rechnung/endpunkte.d.ts +19 -4
- package/dist/cjs/rechnung/endpunkte.js +37 -3
- package/dist/cjs/rechnung/index.d.ts +4 -3
- package/dist/cjs/rechnung/index.js +10 -1
- package/dist/cjs/rechnung/texte.d.ts +202 -0
- package/dist/cjs/rechnung/texte.js +377 -0
- package/dist/cjs/rechnung/typen.d.ts +37 -2
- package/dist/cjs/rechnung/vertrag.d.ts +40 -2
- package/dist/cjs/rechnung/vertrag.js +166 -2
- package/dist/esm/client/aufrufe.d.ts +1 -1
- package/dist/esm/client/aufrufe.js +2 -0
- package/dist/esm/rechnung/api.d.ts +10 -3
- package/dist/esm/rechnung/api.js +4 -2
- package/dist/esm/rechnung/endpunkte.d.ts +19 -4
- package/dist/esm/rechnung/endpunkte.js +35 -3
- package/dist/esm/rechnung/index.d.ts +4 -3
- package/dist/esm/rechnung/index.js +3 -2
- package/dist/esm/rechnung/texte.d.ts +202 -0
- package/dist/esm/rechnung/texte.js +373 -0
- package/dist/esm/rechnung/typen.d.ts +37 -2
- package/dist/esm/rechnung/vertrag.d.ts +40 -2
- package/dist/esm/rechnung/vertrag.js +165 -1
- package/fixtures/hobex-hps-codes.json +1 -1
- package/fixtures/kasse-texte.json +1 -1
- package/fixtures/oberflaeche.json +76 -3
- package/fixtures/rechnung-api-beispiele/brands-ok.json +8 -0
- package/fixtures/rechnung-api-beispiele/issue-englisch.json +30 -0
- package/fixtures/rechnung-api-beispiele/issue-fehler-einheit.json +26 -0
- package/fixtures/rechnung-api-beispiele/issue-fehler-sprache.json +26 -0
- package/fixtures/rechnung-api-beispiele/issue-netto-20.json +1 -1
- package/fixtures/rechnung-api-beispiele/setup-status-fehler-feld.json +14 -0
- package/fixtures/rechnung-api-beispiele/setup-status-ok.json +8 -0
- package/fixtures/rechnung-api.schema.json +151 -6
- package/fixtures/rechnung-texte.json +424 -0
- package/package.json +2 -1
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
const DE = {
|
|
2
|
+
'pdf.titel.rechnung': 'RECHNUNG',
|
|
3
|
+
'pdf.titel.gutschrift': 'GUTSCHRIFT',
|
|
4
|
+
'pdf.pille.bezahlt': 'BEZAHLT',
|
|
5
|
+
'pdf.pille.lastschrift': 'SEPA-LASTSCHRIFT',
|
|
6
|
+
'pdf.meta.nummer.rechnung': 'Rechnungsnr.',
|
|
7
|
+
'pdf.meta.nummer.gutschrift': 'Gutschriftsnr.',
|
|
8
|
+
'pdf.meta.datum.rechnung': 'Rechnungsdatum',
|
|
9
|
+
'pdf.meta.datum.gutschrift': 'Gutschriftsdatum',
|
|
10
|
+
'pdf.meta.leistungszeitraum': 'Leistungszeitraum',
|
|
11
|
+
'pdf.meta.faelligkeit': 'Fälligkeit',
|
|
12
|
+
'pdf.bezug.gutschrift': 'Gutschrift zu Rechnung {nummer}',
|
|
13
|
+
'pdf.bezug.vom': ' vom {datum}',
|
|
14
|
+
'pdf.bezeichnung.rechnung': 'Rechnung {nummer}',
|
|
15
|
+
'pdf.bezeichnung.gutschrift': 'Gutschrift {nummer}',
|
|
16
|
+
'pdf.uid': 'UID: {uid}',
|
|
17
|
+
'pdf.tabelle.pos': 'POS',
|
|
18
|
+
'pdf.tabelle.beschreibung': 'BESCHREIBUNG',
|
|
19
|
+
'pdf.tabelle.menge': 'MENGE',
|
|
20
|
+
'pdf.tabelle.ust': 'UST',
|
|
21
|
+
'pdf.tabelle.einzelNetto': 'EINZEL NETTO',
|
|
22
|
+
'pdf.tabelle.betragNetto': 'BETRAG NETTO',
|
|
23
|
+
'pdf.summe.zwischensumme': 'Zwischensumme netto',
|
|
24
|
+
'pdf.summe.umsatzsteuer': 'Umsatzsteuer {satz}%',
|
|
25
|
+
'pdf.summe.gesamt.rechnung': 'Gesamtbetrag',
|
|
26
|
+
'pdf.summe.gesamt.gutschrift': 'Gutschriftsbetrag',
|
|
27
|
+
'steuer.kleinunternehmer': 'Gemäß § 6 Abs. 1 Z 27 UStG wird keine Umsatzsteuer verrechnet (Kleinunternehmer).',
|
|
28
|
+
'steuer.igLieferung': 'Steuerfreie innergemeinschaftliche Lieferung (Art. 6 Abs. 1 UStG).',
|
|
29
|
+
'steuer.ausfuhr': 'Steuerfreie Ausfuhrlieferung (§ 6 Abs. 1 Z 1 UStG).',
|
|
30
|
+
'steuer.reverseCharge.titel': 'Steuerfreie Leistung – Reverse Charge. ',
|
|
31
|
+
'steuer.reverseCharge.text': 'Übergang der Steuerschuldnerschaft auf den Leistungsempfänger gem. Art. 196 MwSt-RL 2006/112/EG (innergemeinschaftliche Leistung). Die Umsatzsteuer ist vom Leistungsempfänger im Bestimmungsland abzuführen.',
|
|
32
|
+
'steuer.reverseCharge.uid': 'UID Leistungserbringer: {verkaeufer} · UID Leistungsempfänger: {kaeufer}',
|
|
33
|
+
'pdf.zahlung.titel': 'ZAHLUNGSINFORMATIONEN',
|
|
34
|
+
'pdf.zahlung.empfaenger': 'Empfänger',
|
|
35
|
+
'pdf.zahlung.iban': 'IBAN',
|
|
36
|
+
'pdf.zahlung.bic': 'BIC',
|
|
37
|
+
'pdf.zahlung.verwendungszweck': 'Verwendungszweck',
|
|
38
|
+
'pdf.zahlung.hinweisBis': 'Zahlbar ohne Abzug bis {datum}. Vielen Dank für Ihren Auftrag.',
|
|
39
|
+
'pdf.zahlung.hinweis': 'Zahlbar ohne Abzug. Vielen Dank für Ihren Auftrag.',
|
|
40
|
+
'pdf.zahlung.qr': 'Mit Banking-App scannen & zahlen',
|
|
41
|
+
'pdf.bezahlt.text': 'Diese Rechnung ist beglichen. Es ist nichts weiter zu tun.',
|
|
42
|
+
'pdf.bezahlt.am': 'Bezahlt am',
|
|
43
|
+
'pdf.bezahlt.zahlungsart': 'Zahlungsart',
|
|
44
|
+
'zahlungsart.cash': 'Bar',
|
|
45
|
+
'zahlungsart.transfer': 'Überweisung',
|
|
46
|
+
'zahlungsart.card': 'Karte',
|
|
47
|
+
'zahlungsart.online': 'Online',
|
|
48
|
+
'pdf.lastschrift.text': 'Der Betrag wird per SEPA-Lastschrift eingezogen. Sie müssen nichts veranlassen.',
|
|
49
|
+
'pdf.lastschrift.einzugAm': 'Einzug am',
|
|
50
|
+
'pdf.lastschrift.konto': 'Konto',
|
|
51
|
+
'pdf.lastschrift.mandatsreferenz': 'Mandatsreferenz',
|
|
52
|
+
'pdf.lastschrift.mandatVom': 'Mandat vom',
|
|
53
|
+
'pdf.lastschrift.warnung': 'Bitte für Deckung sorgen — die Kosten einer Rücklastschrift werden weiterverrechnet.',
|
|
54
|
+
'pdf.erstattung.text': 'Der Betrag wird auf dem ursprünglichen Zahlungsweg erstattet. Sie müssen nichts veranlassen.',
|
|
55
|
+
'pdf.erstattung.bezug': 'Bezug',
|
|
56
|
+
'pdf.erstattung.betrag': 'Erstattungsbetrag',
|
|
57
|
+
'pdf.status.titel': 'Zahlungsstatus online verfolgen',
|
|
58
|
+
'pdf.status.text': 'Zahlung bzw. Einzug prüfen und Benachrichtigungen aktivieren.',
|
|
59
|
+
'pdf.status.link': 'Link',
|
|
60
|
+
'pdf.status.passwort': 'Passwort',
|
|
61
|
+
'pdf.fuss.kontakt': 'Kontakt',
|
|
62
|
+
'pdf.fuss.register': 'Register & Steuer',
|
|
63
|
+
'pdf.fuss.sitz': 'Sitz: {ort}',
|
|
64
|
+
'pdf.fuss.hinweis': 'Erstellt mit Kasseneck — ein Produkt der Kreiseck',
|
|
65
|
+
'pdf.seite': 'Seite {nummer} / {gesamt}',
|
|
66
|
+
'land.AT': 'Österreich',
|
|
67
|
+
'land.DE': 'Deutschland',
|
|
68
|
+
'land.CH': 'Schweiz',
|
|
69
|
+
'land.IT': 'Italien',
|
|
70
|
+
'land.LI': 'Liechtenstein',
|
|
71
|
+
'kopie.rechnung': 'Übersetzung – keine eigene Rechnung · Original: Rechnung Nr. {nummer} vom {datum}',
|
|
72
|
+
'kopie.gutschrift': 'Übersetzung – keine eigene Gutschrift · Original: Gutschrift Nr. {nummer} vom {datum}',
|
|
73
|
+
'gutschrift.einleitung': 'Grund: {grund}',
|
|
74
|
+
'gutschrift.grund.cancellation': 'Stornierung',
|
|
75
|
+
'gutschrift.grund.price_reduction': 'Preisnachlass',
|
|
76
|
+
'gutschrift.grund.return': 'Rücksendung',
|
|
77
|
+
'gutschrift.grund.incorrect_invoice': 'Fehlerhafte Rechnung',
|
|
78
|
+
'gutschrift.grund.other': 'Sonstiges',
|
|
79
|
+
'einvoice.befreiung.reverseCharge': 'Steuerschuldnerschaft des Leistungsempfängers (Reverse Charge)',
|
|
80
|
+
'einvoice.befreiung.kleinunternehmer': 'Steuerbefreit — Kleinunternehmer gemäß §6 Abs. 1 Z 27 UStG',
|
|
81
|
+
'einvoice.befreiung.igLieferung': 'Steuerfreie innergemeinschaftliche Lieferung gemäß Art. 6 Abs. 1 UStG',
|
|
82
|
+
'einvoice.befreiung.ausfuhr': 'Steuerfreie Ausfuhrlieferung gemäß §6 Abs. 1 Z 1 UStG',
|
|
83
|
+
'einvoice.zahlbarBis': 'Zahlbar bis {datum}',
|
|
84
|
+
'einheit.piece': 'Stk',
|
|
85
|
+
'einheit.pair': 'Paar',
|
|
86
|
+
'einheit.set': 'Set',
|
|
87
|
+
'einheit.dozen': 'Dtzd.',
|
|
88
|
+
'einheit.second': 'Sek.',
|
|
89
|
+
'einheit.minute': 'Min.',
|
|
90
|
+
'einheit.hour': 'Std',
|
|
91
|
+
'einheit.day': 'Tag',
|
|
92
|
+
'einheit.night': 'Nacht',
|
|
93
|
+
'einheit.week': 'Woche',
|
|
94
|
+
'einheit.month': 'Monat',
|
|
95
|
+
'einheit.quarter': 'Quartal',
|
|
96
|
+
'einheit.half_year': 'Halbjahr',
|
|
97
|
+
'einheit.year': 'Jahr',
|
|
98
|
+
'einheit.milligram': 'mg',
|
|
99
|
+
'einheit.gram': 'g',
|
|
100
|
+
'einheit.kilogram': 'kg',
|
|
101
|
+
'einheit.tonne': 't',
|
|
102
|
+
'einheit.millimetre': 'mm',
|
|
103
|
+
'einheit.centimetre': 'cm',
|
|
104
|
+
'einheit.metre': 'm',
|
|
105
|
+
'einheit.running_metre': 'lfm',
|
|
106
|
+
'einheit.kilometre': 'km',
|
|
107
|
+
'einheit.square_metre': 'm²',
|
|
108
|
+
'einheit.hectare': 'ha',
|
|
109
|
+
'einheit.millilitre': 'ml',
|
|
110
|
+
'einheit.litre': 'l',
|
|
111
|
+
'einheit.cubic_metre': 'm³',
|
|
112
|
+
'einheit.kilowatt_hour': 'kWh',
|
|
113
|
+
'einheit.megawatt_hour': 'MWh',
|
|
114
|
+
'einheit.gigabyte': 'GB',
|
|
115
|
+
'einheit.terabyte': 'TB',
|
|
116
|
+
'einheit.flat_rate': 'Pauschal',
|
|
117
|
+
'einheit.person': 'Pers.',
|
|
118
|
+
'einheit.licence': 'Lizenz',
|
|
119
|
+
'einheit.user': 'Benutzer',
|
|
120
|
+
'einheit.device': 'Gerät',
|
|
121
|
+
'einheit.session': 'Sitzung',
|
|
122
|
+
'einheit.trip': 'Fahrt',
|
|
123
|
+
'einheit.page': 'Seite',
|
|
124
|
+
'einheit.sheet': 'Blatt',
|
|
125
|
+
'einheit.package': 'Pkg.',
|
|
126
|
+
'einheit.box': 'Box',
|
|
127
|
+
'einheit.carton': 'Karton',
|
|
128
|
+
'einheit.bottle': 'Fl.',
|
|
129
|
+
'einheit.can': 'Dose',
|
|
130
|
+
'einheit.roll': 'Rolle',
|
|
131
|
+
'einheit.bag': 'Sack',
|
|
132
|
+
'einheit.pallet': 'Palette',
|
|
133
|
+
'einheitName.piece': 'Stück',
|
|
134
|
+
'einheitName.pair': 'Paar',
|
|
135
|
+
'einheitName.set': 'Set',
|
|
136
|
+
'einheitName.dozen': 'Dutzend',
|
|
137
|
+
'einheitName.second': 'Sekunde',
|
|
138
|
+
'einheitName.minute': 'Minute',
|
|
139
|
+
'einheitName.hour': 'Stunde',
|
|
140
|
+
'einheitName.day': 'Tag',
|
|
141
|
+
'einheitName.night': 'Nacht',
|
|
142
|
+
'einheitName.week': 'Woche',
|
|
143
|
+
'einheitName.month': 'Monat',
|
|
144
|
+
'einheitName.quarter': 'Quartal',
|
|
145
|
+
'einheitName.half_year': 'Halbjahr',
|
|
146
|
+
'einheitName.year': 'Jahr',
|
|
147
|
+
'einheitName.milligram': 'Milligramm',
|
|
148
|
+
'einheitName.gram': 'Gramm',
|
|
149
|
+
'einheitName.kilogram': 'Kilogramm',
|
|
150
|
+
'einheitName.tonne': 'Tonne',
|
|
151
|
+
'einheitName.millimetre': 'Millimeter',
|
|
152
|
+
'einheitName.centimetre': 'Zentimeter',
|
|
153
|
+
'einheitName.metre': 'Meter',
|
|
154
|
+
'einheitName.running_metre': 'Laufmeter',
|
|
155
|
+
'einheitName.kilometre': 'Kilometer',
|
|
156
|
+
'einheitName.square_metre': 'Quadratmeter',
|
|
157
|
+
'einheitName.hectare': 'Hektar',
|
|
158
|
+
'einheitName.millilitre': 'Milliliter',
|
|
159
|
+
'einheitName.litre': 'Liter',
|
|
160
|
+
'einheitName.cubic_metre': 'Kubikmeter',
|
|
161
|
+
'einheitName.kilowatt_hour': 'Kilowattstunde',
|
|
162
|
+
'einheitName.megawatt_hour': 'Megawattstunde',
|
|
163
|
+
'einheitName.gigabyte': 'Gigabyte',
|
|
164
|
+
'einheitName.terabyte': 'Terabyte',
|
|
165
|
+
'einheitName.flat_rate': 'Pauschale',
|
|
166
|
+
'einheitName.person': 'Person',
|
|
167
|
+
'einheitName.licence': 'Lizenz',
|
|
168
|
+
'einheitName.user': 'Benutzer',
|
|
169
|
+
'einheitName.device': 'Gerät',
|
|
170
|
+
'einheitName.session': 'Sitzung',
|
|
171
|
+
'einheitName.trip': 'Fahrt',
|
|
172
|
+
'einheitName.page': 'Seite',
|
|
173
|
+
'einheitName.sheet': 'Blatt',
|
|
174
|
+
'einheitName.package': 'Packung',
|
|
175
|
+
'einheitName.box': 'Box',
|
|
176
|
+
'einheitName.carton': 'Karton',
|
|
177
|
+
'einheitName.bottle': 'Flasche',
|
|
178
|
+
'einheitName.can': 'Dose',
|
|
179
|
+
'einheitName.roll': 'Rolle',
|
|
180
|
+
'einheitName.bag': 'Sack',
|
|
181
|
+
'einheitName.pallet': 'Palette',
|
|
182
|
+
};
|
|
183
|
+
const EN = {
|
|
184
|
+
'pdf.titel.rechnung': 'INVOICE',
|
|
185
|
+
'pdf.titel.gutschrift': 'CREDIT NOTE',
|
|
186
|
+
'pdf.pille.bezahlt': 'PAID',
|
|
187
|
+
'pdf.pille.lastschrift': 'SEPA DIRECT DEBIT',
|
|
188
|
+
'pdf.meta.nummer.rechnung': 'Invoice no.',
|
|
189
|
+
'pdf.meta.nummer.gutschrift': 'Credit note no.',
|
|
190
|
+
'pdf.meta.datum.rechnung': 'Invoice date',
|
|
191
|
+
'pdf.meta.datum.gutschrift': 'Credit note date',
|
|
192
|
+
'pdf.meta.leistungszeitraum': 'Service period',
|
|
193
|
+
'pdf.meta.faelligkeit': 'Due date',
|
|
194
|
+
'pdf.bezug.gutschrift': 'Credit note for invoice {nummer}',
|
|
195
|
+
'pdf.bezug.vom': ' dated {datum}',
|
|
196
|
+
'pdf.bezeichnung.rechnung': 'Invoice {nummer}',
|
|
197
|
+
'pdf.bezeichnung.gutschrift': 'Credit note {nummer}',
|
|
198
|
+
'pdf.uid': 'VAT ID: {uid}',
|
|
199
|
+
'pdf.tabelle.pos': 'POS',
|
|
200
|
+
'pdf.tabelle.beschreibung': 'DESCRIPTION',
|
|
201
|
+
'pdf.tabelle.menge': 'QTY',
|
|
202
|
+
'pdf.tabelle.ust': 'VAT',
|
|
203
|
+
'pdf.tabelle.einzelNetto': 'UNIT NET',
|
|
204
|
+
'pdf.tabelle.betragNetto': 'AMOUNT NET',
|
|
205
|
+
'pdf.summe.zwischensumme': 'Subtotal net',
|
|
206
|
+
'pdf.summe.umsatzsteuer': 'VAT {satz}%',
|
|
207
|
+
'pdf.summe.gesamt.rechnung': 'Total',
|
|
208
|
+
'pdf.summe.gesamt.gutschrift': 'Credit total',
|
|
209
|
+
'steuer.kleinunternehmer': 'No VAT charged pursuant to § 6 (1) no. 27 UStG (small business exemption).',
|
|
210
|
+
'steuer.igLieferung': 'VAT-exempt intra-Community supply (Art. 6 (1) UStG).',
|
|
211
|
+
'steuer.ausfuhr': 'VAT-exempt export delivery (§ 6 (1) no. 1 UStG).',
|
|
212
|
+
'steuer.reverseCharge.titel': 'VAT-exempt service – reverse charge. ',
|
|
213
|
+
'steuer.reverseCharge.text': 'VAT liability transferred to the recipient pursuant to Art. 196 of VAT Directive 2006/112/EC (intra-Community service). VAT is to be accounted for by the recipient in the country of destination.',
|
|
214
|
+
'steuer.reverseCharge.uid': 'VAT ID supplier: {verkaeufer} · VAT ID recipient: {kaeufer}',
|
|
215
|
+
'pdf.zahlung.titel': 'PAYMENT DETAILS',
|
|
216
|
+
'pdf.zahlung.empfaenger': 'Payee',
|
|
217
|
+
'pdf.zahlung.iban': 'IBAN',
|
|
218
|
+
'pdf.zahlung.bic': 'BIC',
|
|
219
|
+
'pdf.zahlung.verwendungszweck': 'Payment reference',
|
|
220
|
+
'pdf.zahlung.hinweisBis': 'Payable without deduction by {datum}. Thank you for your business.',
|
|
221
|
+
'pdf.zahlung.hinweis': 'Payable without deduction. Thank you for your business.',
|
|
222
|
+
'pdf.zahlung.qr': 'Scan with your banking app to pay',
|
|
223
|
+
'pdf.bezahlt.text': 'This invoice has been paid. No further action is required.',
|
|
224
|
+
'pdf.bezahlt.am': 'Paid on',
|
|
225
|
+
'pdf.bezahlt.zahlungsart': 'Payment method',
|
|
226
|
+
'zahlungsart.cash': 'Cash',
|
|
227
|
+
'zahlungsart.transfer': 'Bank transfer',
|
|
228
|
+
'zahlungsart.card': 'Card',
|
|
229
|
+
'zahlungsart.online': 'Online',
|
|
230
|
+
'pdf.lastschrift.text': 'The amount will be collected by SEPA direct debit. No action is required on your part.',
|
|
231
|
+
'pdf.lastschrift.einzugAm': 'Collection date',
|
|
232
|
+
'pdf.lastschrift.konto': 'Account',
|
|
233
|
+
'pdf.lastschrift.mandatsreferenz': 'Mandate reference',
|
|
234
|
+
'pdf.lastschrift.mandatVom': 'Mandate date',
|
|
235
|
+
'pdf.lastschrift.warnung': 'Please ensure sufficient funds — the costs of a returned direct debit will be charged to you.',
|
|
236
|
+
'pdf.erstattung.text': 'The amount will be refunded via the original payment method. No action is required on your part.',
|
|
237
|
+
'pdf.erstattung.bezug': 'Reference',
|
|
238
|
+
'pdf.erstattung.betrag': 'Refund amount',
|
|
239
|
+
'pdf.status.titel': 'Track payment status online',
|
|
240
|
+
'pdf.status.text': 'Check payment or direct debit status and turn on notifications.',
|
|
241
|
+
'pdf.status.link': 'Link',
|
|
242
|
+
'pdf.status.passwort': 'Password',
|
|
243
|
+
'pdf.fuss.kontakt': 'Contact',
|
|
244
|
+
'pdf.fuss.register': 'Registration & tax',
|
|
245
|
+
'pdf.fuss.sitz': 'Registered office: {ort}',
|
|
246
|
+
'pdf.fuss.hinweis': 'Created with Kasseneck — a Kreiseck product',
|
|
247
|
+
'pdf.seite': 'Page {nummer} / {gesamt}',
|
|
248
|
+
'land.AT': 'Austria',
|
|
249
|
+
'land.DE': 'Germany',
|
|
250
|
+
'land.CH': 'Switzerland',
|
|
251
|
+
'land.IT': 'Italy',
|
|
252
|
+
'land.LI': 'Liechtenstein',
|
|
253
|
+
'kopie.rechnung': 'Translation – not a separate invoice · Original: Invoice No. {nummer} dated {datum}',
|
|
254
|
+
'kopie.gutschrift': 'Translation – not a separate credit note · Original: Credit note No. {nummer} dated {datum}',
|
|
255
|
+
'gutschrift.einleitung': 'Reason: {grund}',
|
|
256
|
+
'gutschrift.grund.cancellation': 'Cancellation',
|
|
257
|
+
'gutschrift.grund.price_reduction': 'Price reduction',
|
|
258
|
+
'gutschrift.grund.return': 'Return',
|
|
259
|
+
'gutschrift.grund.incorrect_invoice': 'Incorrect invoice',
|
|
260
|
+
'gutschrift.grund.other': 'Other',
|
|
261
|
+
'einvoice.befreiung.reverseCharge': 'Reverse charge – VAT liability of the recipient',
|
|
262
|
+
'einvoice.befreiung.kleinunternehmer': 'VAT exempt — small business pursuant to § 6 (1) no. 27 UStG',
|
|
263
|
+
'einvoice.befreiung.igLieferung': 'VAT-exempt intra-Community supply pursuant to Art. 6 (1) UStG',
|
|
264
|
+
'einvoice.befreiung.ausfuhr': 'VAT-exempt export delivery pursuant to § 6 (1) no. 1 UStG',
|
|
265
|
+
'einvoice.zahlbarBis': 'Payable by {datum}',
|
|
266
|
+
'einheit.piece': 'pcs',
|
|
267
|
+
'einheit.pair': 'pair',
|
|
268
|
+
'einheit.set': 'set',
|
|
269
|
+
'einheit.dozen': 'doz.',
|
|
270
|
+
'einheit.second': 'sec',
|
|
271
|
+
'einheit.minute': 'min',
|
|
272
|
+
'einheit.hour': 'h',
|
|
273
|
+
'einheit.day': 'day',
|
|
274
|
+
'einheit.night': 'night',
|
|
275
|
+
'einheit.week': 'wk',
|
|
276
|
+
'einheit.month': 'mo',
|
|
277
|
+
'einheit.quarter': 'qtr',
|
|
278
|
+
'einheit.half_year': 'half-yr',
|
|
279
|
+
'einheit.year': 'yr',
|
|
280
|
+
'einheit.milligram': 'mg',
|
|
281
|
+
'einheit.gram': 'g',
|
|
282
|
+
'einheit.kilogram': 'kg',
|
|
283
|
+
'einheit.tonne': 't',
|
|
284
|
+
'einheit.millimetre': 'mm',
|
|
285
|
+
'einheit.centimetre': 'cm',
|
|
286
|
+
'einheit.metre': 'm',
|
|
287
|
+
'einheit.running_metre': 'rm',
|
|
288
|
+
'einheit.kilometre': 'km',
|
|
289
|
+
'einheit.square_metre': 'm²',
|
|
290
|
+
'einheit.hectare': 'ha',
|
|
291
|
+
'einheit.millilitre': 'ml',
|
|
292
|
+
'einheit.litre': 'l',
|
|
293
|
+
'einheit.cubic_metre': 'm³',
|
|
294
|
+
'einheit.kilowatt_hour': 'kWh',
|
|
295
|
+
'einheit.megawatt_hour': 'MWh',
|
|
296
|
+
'einheit.gigabyte': 'GB',
|
|
297
|
+
'einheit.terabyte': 'TB',
|
|
298
|
+
'einheit.flat_rate': 'flat',
|
|
299
|
+
'einheit.person': 'pers.',
|
|
300
|
+
'einheit.licence': 'licence',
|
|
301
|
+
'einheit.user': 'user',
|
|
302
|
+
'einheit.device': 'device',
|
|
303
|
+
'einheit.session': 'session',
|
|
304
|
+
'einheit.trip': 'trip',
|
|
305
|
+
'einheit.page': 'page',
|
|
306
|
+
'einheit.sheet': 'sheet',
|
|
307
|
+
'einheit.package': 'pkg',
|
|
308
|
+
'einheit.box': 'box',
|
|
309
|
+
'einheit.carton': 'ctn',
|
|
310
|
+
'einheit.bottle': 'btl',
|
|
311
|
+
'einheit.can': 'can',
|
|
312
|
+
'einheit.roll': 'roll',
|
|
313
|
+
'einheit.bag': 'bag',
|
|
314
|
+
'einheit.pallet': 'plt',
|
|
315
|
+
'einheitName.piece': 'piece',
|
|
316
|
+
'einheitName.pair': 'pair',
|
|
317
|
+
'einheitName.set': 'set',
|
|
318
|
+
'einheitName.dozen': 'dozen',
|
|
319
|
+
'einheitName.second': 'second',
|
|
320
|
+
'einheitName.minute': 'minute',
|
|
321
|
+
'einheitName.hour': 'hour',
|
|
322
|
+
'einheitName.day': 'day',
|
|
323
|
+
'einheitName.night': 'night',
|
|
324
|
+
'einheitName.week': 'week',
|
|
325
|
+
'einheitName.month': 'month',
|
|
326
|
+
'einheitName.quarter': 'quarter',
|
|
327
|
+
'einheitName.half_year': 'half year',
|
|
328
|
+
'einheitName.year': 'year',
|
|
329
|
+
'einheitName.milligram': 'milligram',
|
|
330
|
+
'einheitName.gram': 'gram',
|
|
331
|
+
'einheitName.kilogram': 'kilogram',
|
|
332
|
+
'einheitName.tonne': 'tonne',
|
|
333
|
+
'einheitName.millimetre': 'millimetre',
|
|
334
|
+
'einheitName.centimetre': 'centimetre',
|
|
335
|
+
'einheitName.metre': 'metre',
|
|
336
|
+
'einheitName.running_metre': 'running metre',
|
|
337
|
+
'einheitName.kilometre': 'kilometre',
|
|
338
|
+
'einheitName.square_metre': 'square metre',
|
|
339
|
+
'einheitName.hectare': 'hectare',
|
|
340
|
+
'einheitName.millilitre': 'millilitre',
|
|
341
|
+
'einheitName.litre': 'litre',
|
|
342
|
+
'einheitName.cubic_metre': 'cubic metre',
|
|
343
|
+
'einheitName.kilowatt_hour': 'kilowatt hour',
|
|
344
|
+
'einheitName.megawatt_hour': 'megawatt hour',
|
|
345
|
+
'einheitName.gigabyte': 'gigabyte',
|
|
346
|
+
'einheitName.terabyte': 'terabyte',
|
|
347
|
+
'einheitName.flat_rate': 'flat rate',
|
|
348
|
+
'einheitName.person': 'person',
|
|
349
|
+
'einheitName.licence': 'licence',
|
|
350
|
+
'einheitName.user': 'user',
|
|
351
|
+
'einheitName.device': 'device',
|
|
352
|
+
'einheitName.session': 'session',
|
|
353
|
+
'einheitName.trip': 'trip',
|
|
354
|
+
'einheitName.page': 'page',
|
|
355
|
+
'einheitName.sheet': 'sheet',
|
|
356
|
+
'einheitName.package': 'package',
|
|
357
|
+
'einheitName.box': 'box',
|
|
358
|
+
'einheitName.carton': 'carton',
|
|
359
|
+
'einheitName.bottle': 'bottle',
|
|
360
|
+
'einheitName.can': 'can',
|
|
361
|
+
'einheitName.roll': 'roll',
|
|
362
|
+
'einheitName.bag': 'bag',
|
|
363
|
+
'einheitName.pallet': 'pallet',
|
|
364
|
+
};
|
|
365
|
+
export const RECHNUNG_TEXTE = Object.freeze({ de: Object.freeze({ ...DE }), en: Object.freeze({ ...EN }) });
|
|
366
|
+
/** Ein Text der gewaehlten Sprache mit eingesetzten Werten; ein fehlender Wert ist ein Programmierfehler. */
|
|
367
|
+
export function rechnungText(sprache, schluessel, werte = {}) {
|
|
368
|
+
return RECHNUNG_TEXTE[sprache][schluessel].replace(/\{([a-zA-Z]+)\}/g, (_voll, name) => {
|
|
369
|
+
if (!(name in werte))
|
|
370
|
+
throw new Error(`rechnungText ${schluessel}: Wert {${name}} fehlt`);
|
|
371
|
+
return String(werte[name]);
|
|
372
|
+
});
|
|
373
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Betraege sind ueberall ganze Cent. Datumsangaben sind `YYYY-MM-DD` nach
|
|
6
6
|
* Wiener Kalender.
|
|
7
7
|
*/
|
|
8
|
-
import type { CreditNoteReason, CustomerType, DocType, InvoiceListStatus, PriceMode, TaxScheme, VatRatePercent } from './vertrag.js';
|
|
8
|
+
import type { CreditNoteReason, CustomerType, DocType, InvoiceLanguage, InvoiceUnit, InvoiceSetupRequirement, InvoiceListStatus, PriceMode, TaxScheme, VatRatePercent } from './vertrag.js';
|
|
9
9
|
export interface CustomerInput {
|
|
10
10
|
type: CustomerType;
|
|
11
11
|
name: string;
|
|
@@ -27,6 +27,8 @@ export interface CustomerInput {
|
|
|
27
27
|
note?: string;
|
|
28
28
|
/** Kennung im eigenen System; je Konto eindeutig. */
|
|
29
29
|
externalId?: string;
|
|
30
|
+
/** Sprache der Rechnungen an diesen Kunden; fehlt = `de`. Behoerden immer `de`. */
|
|
31
|
+
language?: InvoiceLanguage;
|
|
30
32
|
}
|
|
31
33
|
export interface Customer {
|
|
32
34
|
id: string;
|
|
@@ -45,6 +47,7 @@ export interface Customer {
|
|
|
45
47
|
isAuthority: boolean;
|
|
46
48
|
note: string | null;
|
|
47
49
|
externalId: string | null;
|
|
50
|
+
language: InvoiceLanguage;
|
|
48
51
|
createdAt: string | null;
|
|
49
52
|
updatedAt: string | null;
|
|
50
53
|
}
|
|
@@ -66,7 +69,8 @@ export interface InvoiceItemInput {
|
|
|
66
69
|
subtitle?: string;
|
|
67
70
|
/** Hoechstens drei Nachkommastellen. */
|
|
68
71
|
quantity: number;
|
|
69
|
-
|
|
72
|
+
/** Einheit aus `INVOICE_UNITS`; ohne Angabe `piece`. */
|
|
73
|
+
unit?: InvoiceUnit;
|
|
70
74
|
/** Einzelpreis in ganzen Cent, im `priceMode` der Rechnung (netto oder brutto). */
|
|
71
75
|
unitPriceCents: number;
|
|
72
76
|
vatRate: VatRatePercent;
|
|
@@ -94,6 +98,10 @@ export interface IssueInvoiceRequest {
|
|
|
94
98
|
items: InvoiceItemInput[];
|
|
95
99
|
/** Eigene Merkmale (hoechstens 20), nie gedruckt. */
|
|
96
100
|
metadata?: Record<string, string>;
|
|
101
|
+
/** Sprache dieser Rechnung; sonst die des Kunden, sonst `de`. Eine Rechnung, eine Nummer, eine Sprache. */
|
|
102
|
+
language?: InvoiceLanguage;
|
|
103
|
+
/** Marke (Kennung aus `listBrands`); sonst die Standardmarke. Unbekannt = `brand_not_found`. */
|
|
104
|
+
brandId?: string;
|
|
97
105
|
}
|
|
98
106
|
export interface CancelInvoiceRequest {
|
|
99
107
|
idempotencyKey: string;
|
|
@@ -132,6 +140,19 @@ export interface Invoice {
|
|
|
132
140
|
statusUrl: string | null;
|
|
133
141
|
statusPassword: string | null;
|
|
134
142
|
metadata: Record<string, string>;
|
|
143
|
+
/** Beim Festschreiben eingefroren; aeltere Rechnungen `de`. */
|
|
144
|
+
language: InvoiceLanguage;
|
|
145
|
+
/** Die eingefrorene Marke; `id` ist `null` bei der Ersatzmarke ohne eigene Einrichtung. */
|
|
146
|
+
brand: {
|
|
147
|
+
id: string | null;
|
|
148
|
+
name: string | null;
|
|
149
|
+
} | null;
|
|
150
|
+
}
|
|
151
|
+
/** Eine Marke des Kontos (Logo, Farbe, Absender) — `id` geht als `brandId` in `issueInvoice`. */
|
|
152
|
+
export interface Brand {
|
|
153
|
+
id: string;
|
|
154
|
+
name: string;
|
|
155
|
+
isDefault: boolean;
|
|
135
156
|
}
|
|
136
157
|
export interface InvoiceRecipient {
|
|
137
158
|
name: string;
|
|
@@ -222,3 +243,17 @@ export interface CreditNoteResult {
|
|
|
222
243
|
remainingCents: number;
|
|
223
244
|
replayed: boolean;
|
|
224
245
|
}
|
|
246
|
+
/** Ein Punkt, der vor dem Ausstellen noch fehlt. */
|
|
247
|
+
export interface InvoiceSetupGap {
|
|
248
|
+
requirement: InvoiceSetupRequirement;
|
|
249
|
+
/** Was fehlt und wo es nachzutragen ist — fuer einen Menschen formuliert. */
|
|
250
|
+
message: string;
|
|
251
|
+
}
|
|
252
|
+
export interface InvoiceSetupStatus {
|
|
253
|
+
/** `true`: Rechnungen koennen ueber die API ausgestellt werden. */
|
|
254
|
+
ready: boolean;
|
|
255
|
+
/** Umgebung des Schluessels (`kr_live_…` bzw. `kr_test_…`). */
|
|
256
|
+
environment: 'live' | 'test';
|
|
257
|
+
/** Was fehlt, in der Reihenfolge von `INVOICE_SETUP_REQUIREMENTS` — leer, wenn `ready`. */
|
|
258
|
+
missing: InvoiceSetupGap[];
|
|
259
|
+
}
|
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
* Nummer, Summen — ist bewusst **nicht** setzbar.
|
|
19
19
|
*/
|
|
20
20
|
export declare const RECHNUNG_VERTRAG_VERSION = 1;
|
|
21
|
-
export declare const RECHNUNG_AUFRUFE: readonly ["createCustomer", "getCustomer", "updateCustomer", "searchCustomers", "issueInvoice", "cancelInvoice", "createCreditNote", "getInvoice", "listInvoices", "getInvoicePdf", "getInvoiceXml"];
|
|
21
|
+
export declare const RECHNUNG_AUFRUFE: readonly ["createCustomer", "getCustomer", "updateCustomer", "searchCustomers", "issueInvoice", "cancelInvoice", "createCreditNote", "getInvoice", "listInvoices", "getInvoicePdf", "getInvoiceXml", "getInvoiceSetupStatus", "listBrands"];
|
|
22
22
|
export type RechnungAufruf = (typeof RECHNUNG_AUFRUFE)[number];
|
|
23
23
|
/**
|
|
24
24
|
* Stabile Fehlercodes. Das Fremdsystem verzweigt am Code, der Text darf sich
|
|
25
25
|
* aendern. `validation` traegt zusaetzlich `errors: [{ field, message }]`.
|
|
26
26
|
*/
|
|
27
|
-
export declare const INVOICE_ERROR_CODES: readonly ["validation", "idempotency_conflict", "module_inactive", "customer_not_found", "customer_exists", "short_code_taken", "short_code_immutable", "recipient_required", "invoice_requirements_missing", "invoice_not_found", "invoice_ambiguous", "not_cancellable", "partial_credit_exists", "credit_exceeds_invoice", "einvoice_incomplete"];
|
|
27
|
+
export declare const INVOICE_ERROR_CODES: readonly ["validation", "idempotency_conflict", "module_inactive", "customer_not_found", "customer_exists", "short_code_taken", "short_code_immutable", "recipient_required", "invoice_requirements_missing", "invoice_not_found", "invoice_ambiguous", "not_cancellable", "partial_credit_exists", "credit_exceeds_invoice", "einvoice_incomplete", "invoice_api_not_enabled", "invoice_setup_incomplete", "language_not_allowed", "brand_not_found"];
|
|
28
28
|
export type InvoiceErrorCode = (typeof INVOICE_ERROR_CODES)[number];
|
|
29
29
|
/** Gruende einer Gutschrift. Der Server druckt den deutschen Anzeigetext. */
|
|
30
30
|
export declare const CREDIT_NOTE_REASONS: readonly ["cancellation", "price_reduction", "return", "incorrect_invoice", "other"];
|
|
@@ -43,6 +43,44 @@ export declare const DOC_TYPES: readonly ["RE", "GU"];
|
|
|
43
43
|
export type DocType = (typeof DOC_TYPES)[number];
|
|
44
44
|
export declare const EINVOICE_FORMATS: readonly ["ubl", "cii"];
|
|
45
45
|
export type EInvoiceFormat = (typeof EINVOICE_FORMATS)[number];
|
|
46
|
+
/**
|
|
47
|
+
* Sprachen einer Rechnung. Die Sprache wird beim Festschreiben eingefroren;
|
|
48
|
+
* fehlt sie an Kunde oder Rechnung, gilt `de`. Behoerden bekommen immer `de`
|
|
49
|
+
* (`language_not_allowed`). Datum und Betraege bleiben in jeder Sprache
|
|
50
|
+
* oesterreichisch formatiert.
|
|
51
|
+
*/
|
|
52
|
+
export declare const INVOICE_LANGUAGES: readonly ["de", "en"];
|
|
53
|
+
export type InvoiceLanguage = (typeof INVOICE_LANGUAGES)[number];
|
|
54
|
+
/**
|
|
55
|
+
* Einheiten einer Position. Die API nimmt nur diese Schluessel an; gedruckt
|
|
56
|
+
* wird das Kuerzel in der Sprache der Rechnung (`RECHNUNG_TEXTE`,
|
|
57
|
+
* `einheit.<schluessel>`), die E-Rechnung fuehrt den UN/ECE-Code
|
|
58
|
+
* (`RECHNUNG_EINHEITEN_CODES`). Ohne Angabe gilt `piece`.
|
|
59
|
+
*/
|
|
60
|
+
export declare const INVOICE_UNITS: readonly ["piece", "pair", "set", "dozen", "second", "minute", "hour", "day", "night", "week", "month", "quarter", "half_year", "year", "milligram", "gram", "kilogram", "tonne", "millimetre", "centimetre", "metre", "running_metre", "kilometre", "square_metre", "hectare", "millilitre", "litre", "cubic_metre", "kilowatt_hour", "megawatt_hour", "gigabyte", "terabyte", "flat_rate", "person", "licence", "user", "device", "session", "trip", "page", "sheet", "package", "box", "carton", "bottle", "can", "roll", "bag", "pallet"];
|
|
61
|
+
export type InvoiceUnit = (typeof INVOICE_UNITS)[number];
|
|
62
|
+
/**
|
|
63
|
+
* UN/ECE-Code je Einheit (Recommendation 20, Verpackungen aus Recommendation 21
|
|
64
|
+
* mit `X`). Mehrere Einheiten duerfen denselben Code tragen (Meter und
|
|
65
|
+
* Laufmeter; Lizenz, Benutzer, Geraet als Stueck). Die Validatoren der
|
|
66
|
+
* E-Rechnung pruefen jeden Code im Backend (Beispiel `api-einheiten`).
|
|
67
|
+
*/
|
|
68
|
+
export declare const RECHNUNG_EINHEITEN_CODES: Readonly<Record<InvoiceUnit, string>>;
|
|
69
|
+
/**
|
|
70
|
+
* Was erfuellt sein muss, bevor ueber die API ausgestellt werden darf — in
|
|
71
|
+
* dieser Reihenfolge meldet `getInvoiceSetupStatus`, was fehlt, und dieselben
|
|
72
|
+
* Schluessel stehen in `invoice_setup_incomplete`.
|
|
73
|
+
*
|
|
74
|
+
* - `module_active` Modul Rechnung aktiv
|
|
75
|
+
* - `api_enabled` Rechnungs-API fuer das Konto von Kasseneck freigegeben (nur live)
|
|
76
|
+
* - `live_enabled` Konto live freigeschaltet (nur live)
|
|
77
|
+
* - `business_name`, `address`, `vat_id` Pflichtangaben des Ausstellers (§ 11 UStG;
|
|
78
|
+
* `vat_id` entfaellt bei Kleinunternehmern)
|
|
79
|
+
* - `bank_account` IBAN und Kontoinhaber
|
|
80
|
+
* - `number_format` Rechnungsnummern-Format bewusst gespeichert
|
|
81
|
+
*/
|
|
82
|
+
export declare const INVOICE_SETUP_REQUIREMENTS: readonly ["module_active", "api_enabled", "live_enabled", "business_name", "address", "vat_id", "bank_account", "number_format"];
|
|
83
|
+
export type InvoiceSetupRequirement = (typeof INVOICE_SETUP_REQUIREMENTS)[number];
|
|
46
84
|
/** Formate, die der Server mit `@kreiseck/validator` bzw. einem Muster prueft. */
|
|
47
85
|
export type Format = 'email' | 'phone' | 'vatId' | 'country' | 'date' | 'shortCode';
|
|
48
86
|
export type Feld = {
|