@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.
Files changed (41) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +45 -0
  3. package/dist/cjs/client/aufrufe.d.ts +1 -1
  4. package/dist/cjs/client/aufrufe.js +2 -0
  5. package/dist/cjs/rechnung/api.d.ts +10 -3
  6. package/dist/cjs/rechnung/api.js +3 -1
  7. package/dist/cjs/rechnung/endpunkte.d.ts +19 -4
  8. package/dist/cjs/rechnung/endpunkte.js +37 -3
  9. package/dist/cjs/rechnung/index.d.ts +4 -3
  10. package/dist/cjs/rechnung/index.js +10 -1
  11. package/dist/cjs/rechnung/texte.d.ts +202 -0
  12. package/dist/cjs/rechnung/texte.js +377 -0
  13. package/dist/cjs/rechnung/typen.d.ts +37 -2
  14. package/dist/cjs/rechnung/vertrag.d.ts +40 -2
  15. package/dist/cjs/rechnung/vertrag.js +166 -2
  16. package/dist/esm/client/aufrufe.d.ts +1 -1
  17. package/dist/esm/client/aufrufe.js +2 -0
  18. package/dist/esm/rechnung/api.d.ts +10 -3
  19. package/dist/esm/rechnung/api.js +4 -2
  20. package/dist/esm/rechnung/endpunkte.d.ts +19 -4
  21. package/dist/esm/rechnung/endpunkte.js +35 -3
  22. package/dist/esm/rechnung/index.d.ts +4 -3
  23. package/dist/esm/rechnung/index.js +3 -2
  24. package/dist/esm/rechnung/texte.d.ts +202 -0
  25. package/dist/esm/rechnung/texte.js +373 -0
  26. package/dist/esm/rechnung/typen.d.ts +37 -2
  27. package/dist/esm/rechnung/vertrag.d.ts +40 -2
  28. package/dist/esm/rechnung/vertrag.js +165 -1
  29. package/fixtures/hobex-hps-codes.json +1 -1
  30. package/fixtures/kasse-texte.json +1 -1
  31. package/fixtures/oberflaeche.json +76 -3
  32. package/fixtures/rechnung-api-beispiele/brands-ok.json +8 -0
  33. package/fixtures/rechnung-api-beispiele/issue-englisch.json +30 -0
  34. package/fixtures/rechnung-api-beispiele/issue-fehler-einheit.json +26 -0
  35. package/fixtures/rechnung-api-beispiele/issue-fehler-sprache.json +26 -0
  36. package/fixtures/rechnung-api-beispiele/issue-netto-20.json +1 -1
  37. package/fixtures/rechnung-api-beispiele/setup-status-fehler-feld.json +14 -0
  38. package/fixtures/rechnung-api-beispiele/setup-status-ok.json +8 -0
  39. package/fixtures/rechnung-api.schema.json +151 -6
  40. package/fixtures/rechnung-texte.json +424 -0
  41. package/package.json +2 -1
@@ -0,0 +1,377 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RECHNUNG_TEXTE = void 0;
4
+ exports.rechnungText = rechnungText;
5
+ const DE = {
6
+ 'pdf.titel.rechnung': 'RECHNUNG',
7
+ 'pdf.titel.gutschrift': 'GUTSCHRIFT',
8
+ 'pdf.pille.bezahlt': 'BEZAHLT',
9
+ 'pdf.pille.lastschrift': 'SEPA-LASTSCHRIFT',
10
+ 'pdf.meta.nummer.rechnung': 'Rechnungsnr.',
11
+ 'pdf.meta.nummer.gutschrift': 'Gutschriftsnr.',
12
+ 'pdf.meta.datum.rechnung': 'Rechnungsdatum',
13
+ 'pdf.meta.datum.gutschrift': 'Gutschriftsdatum',
14
+ 'pdf.meta.leistungszeitraum': 'Leistungszeitraum',
15
+ 'pdf.meta.faelligkeit': 'Fälligkeit',
16
+ 'pdf.bezug.gutschrift': 'Gutschrift zu Rechnung {nummer}',
17
+ 'pdf.bezug.vom': ' vom {datum}',
18
+ 'pdf.bezeichnung.rechnung': 'Rechnung {nummer}',
19
+ 'pdf.bezeichnung.gutschrift': 'Gutschrift {nummer}',
20
+ 'pdf.uid': 'UID: {uid}',
21
+ 'pdf.tabelle.pos': 'POS',
22
+ 'pdf.tabelle.beschreibung': 'BESCHREIBUNG',
23
+ 'pdf.tabelle.menge': 'MENGE',
24
+ 'pdf.tabelle.ust': 'UST',
25
+ 'pdf.tabelle.einzelNetto': 'EINZEL NETTO',
26
+ 'pdf.tabelle.betragNetto': 'BETRAG NETTO',
27
+ 'pdf.summe.zwischensumme': 'Zwischensumme netto',
28
+ 'pdf.summe.umsatzsteuer': 'Umsatzsteuer {satz}%',
29
+ 'pdf.summe.gesamt.rechnung': 'Gesamtbetrag',
30
+ 'pdf.summe.gesamt.gutschrift': 'Gutschriftsbetrag',
31
+ 'steuer.kleinunternehmer': 'Gemäß § 6 Abs. 1 Z 27 UStG wird keine Umsatzsteuer verrechnet (Kleinunternehmer).',
32
+ 'steuer.igLieferung': 'Steuerfreie innergemeinschaftliche Lieferung (Art. 6 Abs. 1 UStG).',
33
+ 'steuer.ausfuhr': 'Steuerfreie Ausfuhrlieferung (§ 6 Abs. 1 Z 1 UStG).',
34
+ 'steuer.reverseCharge.titel': 'Steuerfreie Leistung – Reverse Charge. ',
35
+ '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.',
36
+ 'steuer.reverseCharge.uid': 'UID Leistungserbringer: {verkaeufer} · UID Leistungsempfänger: {kaeufer}',
37
+ 'pdf.zahlung.titel': 'ZAHLUNGSINFORMATIONEN',
38
+ 'pdf.zahlung.empfaenger': 'Empfänger',
39
+ 'pdf.zahlung.iban': 'IBAN',
40
+ 'pdf.zahlung.bic': 'BIC',
41
+ 'pdf.zahlung.verwendungszweck': 'Verwendungszweck',
42
+ 'pdf.zahlung.hinweisBis': 'Zahlbar ohne Abzug bis {datum}. Vielen Dank für Ihren Auftrag.',
43
+ 'pdf.zahlung.hinweis': 'Zahlbar ohne Abzug. Vielen Dank für Ihren Auftrag.',
44
+ 'pdf.zahlung.qr': 'Mit Banking-App scannen & zahlen',
45
+ 'pdf.bezahlt.text': 'Diese Rechnung ist beglichen. Es ist nichts weiter zu tun.',
46
+ 'pdf.bezahlt.am': 'Bezahlt am',
47
+ 'pdf.bezahlt.zahlungsart': 'Zahlungsart',
48
+ 'zahlungsart.cash': 'Bar',
49
+ 'zahlungsart.transfer': 'Überweisung',
50
+ 'zahlungsart.card': 'Karte',
51
+ 'zahlungsart.online': 'Online',
52
+ 'pdf.lastschrift.text': 'Der Betrag wird per SEPA-Lastschrift eingezogen. Sie müssen nichts veranlassen.',
53
+ 'pdf.lastschrift.einzugAm': 'Einzug am',
54
+ 'pdf.lastschrift.konto': 'Konto',
55
+ 'pdf.lastschrift.mandatsreferenz': 'Mandatsreferenz',
56
+ 'pdf.lastschrift.mandatVom': 'Mandat vom',
57
+ 'pdf.lastschrift.warnung': 'Bitte für Deckung sorgen — die Kosten einer Rücklastschrift werden weiterverrechnet.',
58
+ 'pdf.erstattung.text': 'Der Betrag wird auf dem ursprünglichen Zahlungsweg erstattet. Sie müssen nichts veranlassen.',
59
+ 'pdf.erstattung.bezug': 'Bezug',
60
+ 'pdf.erstattung.betrag': 'Erstattungsbetrag',
61
+ 'pdf.status.titel': 'Zahlungsstatus online verfolgen',
62
+ 'pdf.status.text': 'Zahlung bzw. Einzug prüfen und Benachrichtigungen aktivieren.',
63
+ 'pdf.status.link': 'Link',
64
+ 'pdf.status.passwort': 'Passwort',
65
+ 'pdf.fuss.kontakt': 'Kontakt',
66
+ 'pdf.fuss.register': 'Register & Steuer',
67
+ 'pdf.fuss.sitz': 'Sitz: {ort}',
68
+ 'pdf.fuss.hinweis': 'Erstellt mit Kasseneck — ein Produkt der Kreiseck',
69
+ 'pdf.seite': 'Seite {nummer} / {gesamt}',
70
+ 'land.AT': 'Österreich',
71
+ 'land.DE': 'Deutschland',
72
+ 'land.CH': 'Schweiz',
73
+ 'land.IT': 'Italien',
74
+ 'land.LI': 'Liechtenstein',
75
+ 'kopie.rechnung': 'Übersetzung – keine eigene Rechnung · Original: Rechnung Nr. {nummer} vom {datum}',
76
+ 'kopie.gutschrift': 'Übersetzung – keine eigene Gutschrift · Original: Gutschrift Nr. {nummer} vom {datum}',
77
+ 'gutschrift.einleitung': 'Grund: {grund}',
78
+ 'gutschrift.grund.cancellation': 'Stornierung',
79
+ 'gutschrift.grund.price_reduction': 'Preisnachlass',
80
+ 'gutschrift.grund.return': 'Rücksendung',
81
+ 'gutschrift.grund.incorrect_invoice': 'Fehlerhafte Rechnung',
82
+ 'gutschrift.grund.other': 'Sonstiges',
83
+ 'einvoice.befreiung.reverseCharge': 'Steuerschuldnerschaft des Leistungsempfängers (Reverse Charge)',
84
+ 'einvoice.befreiung.kleinunternehmer': 'Steuerbefreit — Kleinunternehmer gemäß §6 Abs. 1 Z 27 UStG',
85
+ 'einvoice.befreiung.igLieferung': 'Steuerfreie innergemeinschaftliche Lieferung gemäß Art. 6 Abs. 1 UStG',
86
+ 'einvoice.befreiung.ausfuhr': 'Steuerfreie Ausfuhrlieferung gemäß §6 Abs. 1 Z 1 UStG',
87
+ 'einvoice.zahlbarBis': 'Zahlbar bis {datum}',
88
+ 'einheit.piece': 'Stk',
89
+ 'einheit.pair': 'Paar',
90
+ 'einheit.set': 'Set',
91
+ 'einheit.dozen': 'Dtzd.',
92
+ 'einheit.second': 'Sek.',
93
+ 'einheit.minute': 'Min.',
94
+ 'einheit.hour': 'Std',
95
+ 'einheit.day': 'Tag',
96
+ 'einheit.night': 'Nacht',
97
+ 'einheit.week': 'Woche',
98
+ 'einheit.month': 'Monat',
99
+ 'einheit.quarter': 'Quartal',
100
+ 'einheit.half_year': 'Halbjahr',
101
+ 'einheit.year': 'Jahr',
102
+ 'einheit.milligram': 'mg',
103
+ 'einheit.gram': 'g',
104
+ 'einheit.kilogram': 'kg',
105
+ 'einheit.tonne': 't',
106
+ 'einheit.millimetre': 'mm',
107
+ 'einheit.centimetre': 'cm',
108
+ 'einheit.metre': 'm',
109
+ 'einheit.running_metre': 'lfm',
110
+ 'einheit.kilometre': 'km',
111
+ 'einheit.square_metre': 'm²',
112
+ 'einheit.hectare': 'ha',
113
+ 'einheit.millilitre': 'ml',
114
+ 'einheit.litre': 'l',
115
+ 'einheit.cubic_metre': 'm³',
116
+ 'einheit.kilowatt_hour': 'kWh',
117
+ 'einheit.megawatt_hour': 'MWh',
118
+ 'einheit.gigabyte': 'GB',
119
+ 'einheit.terabyte': 'TB',
120
+ 'einheit.flat_rate': 'Pauschal',
121
+ 'einheit.person': 'Pers.',
122
+ 'einheit.licence': 'Lizenz',
123
+ 'einheit.user': 'Benutzer',
124
+ 'einheit.device': 'Gerät',
125
+ 'einheit.session': 'Sitzung',
126
+ 'einheit.trip': 'Fahrt',
127
+ 'einheit.page': 'Seite',
128
+ 'einheit.sheet': 'Blatt',
129
+ 'einheit.package': 'Pkg.',
130
+ 'einheit.box': 'Box',
131
+ 'einheit.carton': 'Karton',
132
+ 'einheit.bottle': 'Fl.',
133
+ 'einheit.can': 'Dose',
134
+ 'einheit.roll': 'Rolle',
135
+ 'einheit.bag': 'Sack',
136
+ 'einheit.pallet': 'Palette',
137
+ 'einheitName.piece': 'Stück',
138
+ 'einheitName.pair': 'Paar',
139
+ 'einheitName.set': 'Set',
140
+ 'einheitName.dozen': 'Dutzend',
141
+ 'einheitName.second': 'Sekunde',
142
+ 'einheitName.minute': 'Minute',
143
+ 'einheitName.hour': 'Stunde',
144
+ 'einheitName.day': 'Tag',
145
+ 'einheitName.night': 'Nacht',
146
+ 'einheitName.week': 'Woche',
147
+ 'einheitName.month': 'Monat',
148
+ 'einheitName.quarter': 'Quartal',
149
+ 'einheitName.half_year': 'Halbjahr',
150
+ 'einheitName.year': 'Jahr',
151
+ 'einheitName.milligram': 'Milligramm',
152
+ 'einheitName.gram': 'Gramm',
153
+ 'einheitName.kilogram': 'Kilogramm',
154
+ 'einheitName.tonne': 'Tonne',
155
+ 'einheitName.millimetre': 'Millimeter',
156
+ 'einheitName.centimetre': 'Zentimeter',
157
+ 'einheitName.metre': 'Meter',
158
+ 'einheitName.running_metre': 'Laufmeter',
159
+ 'einheitName.kilometre': 'Kilometer',
160
+ 'einheitName.square_metre': 'Quadratmeter',
161
+ 'einheitName.hectare': 'Hektar',
162
+ 'einheitName.millilitre': 'Milliliter',
163
+ 'einheitName.litre': 'Liter',
164
+ 'einheitName.cubic_metre': 'Kubikmeter',
165
+ 'einheitName.kilowatt_hour': 'Kilowattstunde',
166
+ 'einheitName.megawatt_hour': 'Megawattstunde',
167
+ 'einheitName.gigabyte': 'Gigabyte',
168
+ 'einheitName.terabyte': 'Terabyte',
169
+ 'einheitName.flat_rate': 'Pauschale',
170
+ 'einheitName.person': 'Person',
171
+ 'einheitName.licence': 'Lizenz',
172
+ 'einheitName.user': 'Benutzer',
173
+ 'einheitName.device': 'Gerät',
174
+ 'einheitName.session': 'Sitzung',
175
+ 'einheitName.trip': 'Fahrt',
176
+ 'einheitName.page': 'Seite',
177
+ 'einheitName.sheet': 'Blatt',
178
+ 'einheitName.package': 'Packung',
179
+ 'einheitName.box': 'Box',
180
+ 'einheitName.carton': 'Karton',
181
+ 'einheitName.bottle': 'Flasche',
182
+ 'einheitName.can': 'Dose',
183
+ 'einheitName.roll': 'Rolle',
184
+ 'einheitName.bag': 'Sack',
185
+ 'einheitName.pallet': 'Palette',
186
+ };
187
+ const EN = {
188
+ 'pdf.titel.rechnung': 'INVOICE',
189
+ 'pdf.titel.gutschrift': 'CREDIT NOTE',
190
+ 'pdf.pille.bezahlt': 'PAID',
191
+ 'pdf.pille.lastschrift': 'SEPA DIRECT DEBIT',
192
+ 'pdf.meta.nummer.rechnung': 'Invoice no.',
193
+ 'pdf.meta.nummer.gutschrift': 'Credit note no.',
194
+ 'pdf.meta.datum.rechnung': 'Invoice date',
195
+ 'pdf.meta.datum.gutschrift': 'Credit note date',
196
+ 'pdf.meta.leistungszeitraum': 'Service period',
197
+ 'pdf.meta.faelligkeit': 'Due date',
198
+ 'pdf.bezug.gutschrift': 'Credit note for invoice {nummer}',
199
+ 'pdf.bezug.vom': ' dated {datum}',
200
+ 'pdf.bezeichnung.rechnung': 'Invoice {nummer}',
201
+ 'pdf.bezeichnung.gutschrift': 'Credit note {nummer}',
202
+ 'pdf.uid': 'VAT ID: {uid}',
203
+ 'pdf.tabelle.pos': 'POS',
204
+ 'pdf.tabelle.beschreibung': 'DESCRIPTION',
205
+ 'pdf.tabelle.menge': 'QTY',
206
+ 'pdf.tabelle.ust': 'VAT',
207
+ 'pdf.tabelle.einzelNetto': 'UNIT NET',
208
+ 'pdf.tabelle.betragNetto': 'AMOUNT NET',
209
+ 'pdf.summe.zwischensumme': 'Subtotal net',
210
+ 'pdf.summe.umsatzsteuer': 'VAT {satz}%',
211
+ 'pdf.summe.gesamt.rechnung': 'Total',
212
+ 'pdf.summe.gesamt.gutschrift': 'Credit total',
213
+ 'steuer.kleinunternehmer': 'No VAT charged pursuant to § 6 (1) no. 27 UStG (small business exemption).',
214
+ 'steuer.igLieferung': 'VAT-exempt intra-Community supply (Art. 6 (1) UStG).',
215
+ 'steuer.ausfuhr': 'VAT-exempt export delivery (§ 6 (1) no. 1 UStG).',
216
+ 'steuer.reverseCharge.titel': 'VAT-exempt service – reverse charge. ',
217
+ '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.',
218
+ 'steuer.reverseCharge.uid': 'VAT ID supplier: {verkaeufer} · VAT ID recipient: {kaeufer}',
219
+ 'pdf.zahlung.titel': 'PAYMENT DETAILS',
220
+ 'pdf.zahlung.empfaenger': 'Payee',
221
+ 'pdf.zahlung.iban': 'IBAN',
222
+ 'pdf.zahlung.bic': 'BIC',
223
+ 'pdf.zahlung.verwendungszweck': 'Payment reference',
224
+ 'pdf.zahlung.hinweisBis': 'Payable without deduction by {datum}. Thank you for your business.',
225
+ 'pdf.zahlung.hinweis': 'Payable without deduction. Thank you for your business.',
226
+ 'pdf.zahlung.qr': 'Scan with your banking app to pay',
227
+ 'pdf.bezahlt.text': 'This invoice has been paid. No further action is required.',
228
+ 'pdf.bezahlt.am': 'Paid on',
229
+ 'pdf.bezahlt.zahlungsart': 'Payment method',
230
+ 'zahlungsart.cash': 'Cash',
231
+ 'zahlungsart.transfer': 'Bank transfer',
232
+ 'zahlungsart.card': 'Card',
233
+ 'zahlungsart.online': 'Online',
234
+ 'pdf.lastschrift.text': 'The amount will be collected by SEPA direct debit. No action is required on your part.',
235
+ 'pdf.lastschrift.einzugAm': 'Collection date',
236
+ 'pdf.lastschrift.konto': 'Account',
237
+ 'pdf.lastschrift.mandatsreferenz': 'Mandate reference',
238
+ 'pdf.lastschrift.mandatVom': 'Mandate date',
239
+ 'pdf.lastschrift.warnung': 'Please ensure sufficient funds — the costs of a returned direct debit will be charged to you.',
240
+ 'pdf.erstattung.text': 'The amount will be refunded via the original payment method. No action is required on your part.',
241
+ 'pdf.erstattung.bezug': 'Reference',
242
+ 'pdf.erstattung.betrag': 'Refund amount',
243
+ 'pdf.status.titel': 'Track payment status online',
244
+ 'pdf.status.text': 'Check payment or direct debit status and turn on notifications.',
245
+ 'pdf.status.link': 'Link',
246
+ 'pdf.status.passwort': 'Password',
247
+ 'pdf.fuss.kontakt': 'Contact',
248
+ 'pdf.fuss.register': 'Registration & tax',
249
+ 'pdf.fuss.sitz': 'Registered office: {ort}',
250
+ 'pdf.fuss.hinweis': 'Created with Kasseneck — a Kreiseck product',
251
+ 'pdf.seite': 'Page {nummer} / {gesamt}',
252
+ 'land.AT': 'Austria',
253
+ 'land.DE': 'Germany',
254
+ 'land.CH': 'Switzerland',
255
+ 'land.IT': 'Italy',
256
+ 'land.LI': 'Liechtenstein',
257
+ 'kopie.rechnung': 'Translation – not a separate invoice · Original: Invoice No. {nummer} dated {datum}',
258
+ 'kopie.gutschrift': 'Translation – not a separate credit note · Original: Credit note No. {nummer} dated {datum}',
259
+ 'gutschrift.einleitung': 'Reason: {grund}',
260
+ 'gutschrift.grund.cancellation': 'Cancellation',
261
+ 'gutschrift.grund.price_reduction': 'Price reduction',
262
+ 'gutschrift.grund.return': 'Return',
263
+ 'gutschrift.grund.incorrect_invoice': 'Incorrect invoice',
264
+ 'gutschrift.grund.other': 'Other',
265
+ 'einvoice.befreiung.reverseCharge': 'Reverse charge – VAT liability of the recipient',
266
+ 'einvoice.befreiung.kleinunternehmer': 'VAT exempt — small business pursuant to § 6 (1) no. 27 UStG',
267
+ 'einvoice.befreiung.igLieferung': 'VAT-exempt intra-Community supply pursuant to Art. 6 (1) UStG',
268
+ 'einvoice.befreiung.ausfuhr': 'VAT-exempt export delivery pursuant to § 6 (1) no. 1 UStG',
269
+ 'einvoice.zahlbarBis': 'Payable by {datum}',
270
+ 'einheit.piece': 'pcs',
271
+ 'einheit.pair': 'pair',
272
+ 'einheit.set': 'set',
273
+ 'einheit.dozen': 'doz.',
274
+ 'einheit.second': 'sec',
275
+ 'einheit.minute': 'min',
276
+ 'einheit.hour': 'h',
277
+ 'einheit.day': 'day',
278
+ 'einheit.night': 'night',
279
+ 'einheit.week': 'wk',
280
+ 'einheit.month': 'mo',
281
+ 'einheit.quarter': 'qtr',
282
+ 'einheit.half_year': 'half-yr',
283
+ 'einheit.year': 'yr',
284
+ 'einheit.milligram': 'mg',
285
+ 'einheit.gram': 'g',
286
+ 'einheit.kilogram': 'kg',
287
+ 'einheit.tonne': 't',
288
+ 'einheit.millimetre': 'mm',
289
+ 'einheit.centimetre': 'cm',
290
+ 'einheit.metre': 'm',
291
+ 'einheit.running_metre': 'rm',
292
+ 'einheit.kilometre': 'km',
293
+ 'einheit.square_metre': 'm²',
294
+ 'einheit.hectare': 'ha',
295
+ 'einheit.millilitre': 'ml',
296
+ 'einheit.litre': 'l',
297
+ 'einheit.cubic_metre': 'm³',
298
+ 'einheit.kilowatt_hour': 'kWh',
299
+ 'einheit.megawatt_hour': 'MWh',
300
+ 'einheit.gigabyte': 'GB',
301
+ 'einheit.terabyte': 'TB',
302
+ 'einheit.flat_rate': 'flat',
303
+ 'einheit.person': 'pers.',
304
+ 'einheit.licence': 'licence',
305
+ 'einheit.user': 'user',
306
+ 'einheit.device': 'device',
307
+ 'einheit.session': 'session',
308
+ 'einheit.trip': 'trip',
309
+ 'einheit.page': 'page',
310
+ 'einheit.sheet': 'sheet',
311
+ 'einheit.package': 'pkg',
312
+ 'einheit.box': 'box',
313
+ 'einheit.carton': 'ctn',
314
+ 'einheit.bottle': 'btl',
315
+ 'einheit.can': 'can',
316
+ 'einheit.roll': 'roll',
317
+ 'einheit.bag': 'bag',
318
+ 'einheit.pallet': 'plt',
319
+ 'einheitName.piece': 'piece',
320
+ 'einheitName.pair': 'pair',
321
+ 'einheitName.set': 'set',
322
+ 'einheitName.dozen': 'dozen',
323
+ 'einheitName.second': 'second',
324
+ 'einheitName.minute': 'minute',
325
+ 'einheitName.hour': 'hour',
326
+ 'einheitName.day': 'day',
327
+ 'einheitName.night': 'night',
328
+ 'einheitName.week': 'week',
329
+ 'einheitName.month': 'month',
330
+ 'einheitName.quarter': 'quarter',
331
+ 'einheitName.half_year': 'half year',
332
+ 'einheitName.year': 'year',
333
+ 'einheitName.milligram': 'milligram',
334
+ 'einheitName.gram': 'gram',
335
+ 'einheitName.kilogram': 'kilogram',
336
+ 'einheitName.tonne': 'tonne',
337
+ 'einheitName.millimetre': 'millimetre',
338
+ 'einheitName.centimetre': 'centimetre',
339
+ 'einheitName.metre': 'metre',
340
+ 'einheitName.running_metre': 'running metre',
341
+ 'einheitName.kilometre': 'kilometre',
342
+ 'einheitName.square_metre': 'square metre',
343
+ 'einheitName.hectare': 'hectare',
344
+ 'einheitName.millilitre': 'millilitre',
345
+ 'einheitName.litre': 'litre',
346
+ 'einheitName.cubic_metre': 'cubic metre',
347
+ 'einheitName.kilowatt_hour': 'kilowatt hour',
348
+ 'einheitName.megawatt_hour': 'megawatt hour',
349
+ 'einheitName.gigabyte': 'gigabyte',
350
+ 'einheitName.terabyte': 'terabyte',
351
+ 'einheitName.flat_rate': 'flat rate',
352
+ 'einheitName.person': 'person',
353
+ 'einheitName.licence': 'licence',
354
+ 'einheitName.user': 'user',
355
+ 'einheitName.device': 'device',
356
+ 'einheitName.session': 'session',
357
+ 'einheitName.trip': 'trip',
358
+ 'einheitName.page': 'page',
359
+ 'einheitName.sheet': 'sheet',
360
+ 'einheitName.package': 'package',
361
+ 'einheitName.box': 'box',
362
+ 'einheitName.carton': 'carton',
363
+ 'einheitName.bottle': 'bottle',
364
+ 'einheitName.can': 'can',
365
+ 'einheitName.roll': 'roll',
366
+ 'einheitName.bag': 'bag',
367
+ 'einheitName.pallet': 'pallet',
368
+ };
369
+ exports.RECHNUNG_TEXTE = Object.freeze({ de: Object.freeze({ ...DE }), en: Object.freeze({ ...EN }) });
370
+ /** Ein Text der gewaehlten Sprache mit eingesetzten Werten; ein fehlender Wert ist ein Programmierfehler. */
371
+ function rechnungText(sprache, schluessel, werte = {}) {
372
+ return exports.RECHNUNG_TEXTE[sprache][schluessel].replace(/\{([a-zA-Z]+)\}/g, (_voll, name) => {
373
+ if (!(name in werte))
374
+ throw new Error(`rechnungText ${schluessel}: Wert {${name}} fehlt`);
375
+ return String(werte[name]);
376
+ });
377
+ }
@@ -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
- unit?: string;
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 = {