@kreiseck/kasseneck-api 0.19.0 → 0.21.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 +25 -0
- package/README.md +17 -4
- package/dist/cjs/rechnung/index.d.ts +1 -1
- package/dist/cjs/rechnung/index.js +3 -1
- package/dist/cjs/rechnung/texte.d.ts +20 -4
- package/dist/cjs/rechnung/texte.js +48 -8
- package/dist/cjs/rechnung/typen.d.ts +27 -2
- package/dist/cjs/rechnung/vertrag.d.ts +85 -7
- package/dist/cjs/rechnung/vertrag.js +90 -8
- package/dist/esm/rechnung/index.d.ts +1 -1
- package/dist/esm/rechnung/index.js +1 -1
- package/dist/esm/rechnung/texte.d.ts +20 -4
- package/dist/esm/rechnung/texte.js +48 -8
- package/dist/esm/rechnung/typen.d.ts +27 -2
- package/dist/esm/rechnung/vertrag.d.ts +85 -7
- package/dist/esm/rechnung/vertrag.js +89 -7
- package/fixtures/hobex-hps-codes.json +1 -1
- package/fixtures/kasse-texte.json +1 -1
- package/fixtures/oberflaeche.json +19 -4
- package/fixtures/rechnung-api-beispiele/zahlung-fehler-vor-ort.json +15 -0
- package/fixtures/rechnung-api.schema.json +45 -4
- package/fixtures/rechnung-texte.json +41 -9
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,31 @@ Was vor 0.7.0 geschah, steht in der Commit-Historie (`git log`); ab hier wird
|
|
|
4
4
|
es hier geführt. Ein Eintrag nennt die Änderung **und ihren Grund** —
|
|
5
5
|
nur der Grund überlebt den nächsten Umbau.
|
|
6
6
|
|
|
7
|
+
## 0.20.0
|
|
8
|
+
|
|
9
|
+
### Rechnung: richtige Steuerhinweise, Barumsatz auch mit Karte
|
|
10
|
+
|
|
11
|
+
**Anlass:** drei Befunde aus einer Durchsicht an den Primärquellen.
|
|
12
|
+
|
|
13
|
+
- **Reverse Charge ist keine Steuerbefreiung.** Der Aufdruck hiess
|
|
14
|
+
„Steuerfreie Leistung – Reverse Charge" und behauptete damit eine Befreiung,
|
|
15
|
+
die es nicht gibt: der Umsatz bleibt steuerpflichtig, nur die Steuer schuldet
|
|
16
|
+
der Empfänger. Das Gesetz trennt beides (§ 11 Abs. 1 Z 3 lit. e = Hinweis auf
|
|
17
|
+
eine Befreiung, § 11 Abs. 1a = Hinweis auf die Steuerschuldnerschaft); Art. 226
|
|
18
|
+
Nr. 11a MwSt-RL nennt den Begriff wörtlich. Jetzt:
|
|
19
|
+
„Steuerschuldnerschaft des Leistungsempfängers."
|
|
20
|
+
- **Ig. Lieferung** bekommt denselben Kasten wie Reverse Charge, mit **beiden**
|
|
21
|
+
UID-Nummern — Art. 11 Abs. 2 UStG verlangt sie auf der Rechnung. Der
|
|
22
|
+
Textschlüssel `steuer.reverseCharge.uid` heisst darum jetzt `steuer.uidZeile`,
|
|
23
|
+
neu sind `steuer.igLieferung.titel` und `steuer.igLieferung.text`
|
|
24
|
+
(`steuer.igLieferung` entfällt).
|
|
25
|
+
- **`onSite` an der Zahlung.** Ein Barumsatz ist nicht nur Bargeld: als
|
|
26
|
+
Barzahlung gilt auch die Karte **vor Ort** (§ 131b Abs. 1 Z 3 UStG), nicht
|
|
27
|
+
aber dieselbe Karte im Internet. Weil `card`/`online` beides sein können,
|
|
28
|
+
sagt es das Fremdsystem jetzt selbst — der Hinweis `cash_receipt_required`
|
|
29
|
+
kommt bei `cash` immer und sonst nur mit `onSite: true`. `transfer` mit
|
|
30
|
+
`onSite` wird abgewiesen.
|
|
31
|
+
|
|
7
32
|
## 0.19.0
|
|
8
33
|
|
|
9
34
|
### hobex HPS: TECS-Antwortcodes eingeordnet, Storno nach ausbleibender Host-Antwort
|
package/README.md
CHANGED
|
@@ -545,10 +545,23 @@ await rechnungen.recordInvoicePayment({
|
|
|
545
545
|
```
|
|
546
546
|
|
|
547
547
|
`reference` wird gespeichert, aber **nicht gedruckt**; Kartendaten gehören
|
|
548
|
-
ohnehin nicht auf eine Rechnung.
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
548
|
+
ohnehin nicht auf eine Rechnung.
|
|
549
|
+
|
|
550
|
+
**Barumsatz ist nicht nur Bargeld.** Als Barzahlung gilt auch die Karte **vor
|
|
551
|
+
Ort** an der Kasse (§ 131b Abs. 1 Z 3 UStG) — dieselbe Karte im Internet
|
|
552
|
+
dagegen nicht. Weil `card` und `online` beides sein können, sagt es das
|
|
553
|
+
Fremdsystem selbst:
|
|
554
|
+
|
|
555
|
+
```ts
|
|
556
|
+
payment: { method: 'card', onSite: true } // Terminal an der Kasse
|
|
557
|
+
payment: { method: 'card' } // Kartenzahlung im Shop
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
Bei `cash` (immer) und bei `onSite: true` trägt die Antwort
|
|
561
|
+
`notice.code = 'cash_receipt_required'`: ein Barumsatz braucht einen Beleg
|
|
562
|
+
(§ 132a BAO), bei Registrierkassenpflicht über die Registrierkasse — der
|
|
563
|
+
Vermerk an der Rechnung ersetzt ihn nicht. `transfer` mit `onSite` ist ein
|
|
564
|
+
Feldfehler, eine Überweisung erfolgt nicht vor Ort.
|
|
552
565
|
|
|
553
566
|
**Nach einem Zeitlimit mit demselben `idempotencyKey` wiederholen**, nie mit
|
|
554
567
|
einem neuen: dann kommt die schon ausgestellte Rechnung zurück
|
|
@@ -16,4 +16,4 @@ export { istRechnungFehler, rechnungFehlerCode, rechnungFeldFehler, type Rechnun
|
|
|
16
16
|
export { cancelInvoice, createCreditNote, createCustomer, getCustomer, getInvoice, getInvoicePdf, getInvoiceSetupStatus, getInvoiceXml, issueInvoice, listBrands, listInvoices, recordInvoicePayment, searchCustomers, updateCustomer, } from './endpunkte.js';
|
|
17
17
|
export type { Brand, CancelInvoiceRequest, CancelResult, CreditNoteRequest, CreditNoteResult, Customer, CustomerInput, CustomerPage, CustomerSearch, EInvoiceStatus, Invoice, InvoiceDetail, InvoiceItem, InvoiceItemInput, InvoiceListQuery, InvoicePage, InvoiceRecipient, InvoiceSetupGap, InvoiceSetupStatus, InvoiceTotals, InvoiceNotice, InvoicePayment, IssueInvoiceRequest, IssueResult, PaymentInput, RecordPaymentRequest, RecordPaymentResult, } from './typen.js';
|
|
18
18
|
export { RECHNUNG_TEXTE, rechnungText, type RechnungTextSchluessel } from './texte.js';
|
|
19
|
-
export { RECHNUNG_VERTRAG_VERSION, RECHNUNG_AUFRUFE, INVOICE_ERROR_CODES, CREDIT_NOTE_REASONS, TAX_SCHEMES, PRICE_MODES, VAT_RATES, CUSTOMER_TYPES, INVOICE_LIST_STATUS, DOC_TYPES, EINVOICE_FORMATS, INVOICE_LANGUAGES, INVOICE_PAYMENT_METHODS, INVOICE_NOTICE_CODES, INVOICE_UNITS, RECHNUNG_EINHEITEN_CODES, INVOICE_SETUP_REQUIREMENTS, KUNDE_FELDER, POSITION_FELDER, RECHNUNG_ANFRAGEN, RECHNUNG_GENAU_EINS, RECHNUNG_MINDESTENS_EINS, type RechnungAufruf, type InvoiceErrorCode, type CreditNoteReason, type TaxScheme, type PriceMode, type VatRatePercent, type CustomerType, type InvoiceListStatus, type DocType, type EInvoiceFormat, type InvoiceLanguage, type InvoicePaymentMethod, type InvoiceNoticeCode, type InvoiceUnit, type InvoiceSetupRequirement, type Format, type Feld, } from './vertrag.js';
|
|
19
|
+
export { RECHNUNG_VERTRAG_VERSION, RECHNUNG_AUFRUFE, INVOICE_ERROR_CODES, CREDIT_NOTE_REASONS, TAX_SCHEMES, PRICE_MODES, VAT_RATES, CUSTOMER_TYPES, INVOICE_LIST_STATUS, DOC_TYPES, EINVOICE_FORMATS, INVOICE_LANGUAGES, INVOICE_PAYMENT_METHODS, ITEM_KINDS, REVERSE_CHARGE_REASONS, INVOICE_NOTICE_CODES, INVOICE_UNITS, RECHNUNG_EINHEITEN_CODES, INVOICE_SETUP_REQUIREMENTS, KUNDE_FELDER, POSITION_FELDER, RECHNUNG_ANFRAGEN, RECHNUNG_GENAU_EINS, RECHNUNG_MINDESTENS_EINS, type RechnungAufruf, type InvoiceErrorCode, type CreditNoteReason, type TaxScheme, type PriceMode, type VatRatePercent, type CustomerType, type InvoiceListStatus, type DocType, type EInvoiceFormat, type InvoiceLanguage, type InvoicePaymentMethod, type ItemKind, type ReverseChargeReason, type InvoiceNoticeCode, type InvoiceUnit, type InvoiceSetupRequirement, type Format, type Feld, } from './vertrag.js';
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* Benutzung des Clients.
|
|
13
13
|
*/
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.RECHNUNG_MINDESTENS_EINS = exports.RECHNUNG_GENAU_EINS = exports.RECHNUNG_ANFRAGEN = exports.POSITION_FELDER = exports.KUNDE_FELDER = exports.INVOICE_SETUP_REQUIREMENTS = exports.RECHNUNG_EINHEITEN_CODES = exports.INVOICE_UNITS = exports.INVOICE_NOTICE_CODES = exports.INVOICE_PAYMENT_METHODS = exports.INVOICE_LANGUAGES = exports.EINVOICE_FORMATS = exports.DOC_TYPES = exports.INVOICE_LIST_STATUS = exports.CUSTOMER_TYPES = exports.VAT_RATES = exports.PRICE_MODES = exports.TAX_SCHEMES = exports.CREDIT_NOTE_REASONS = exports.INVOICE_ERROR_CODES = exports.RECHNUNG_AUFRUFE = exports.RECHNUNG_VERTRAG_VERSION = exports.rechnungText = exports.RECHNUNG_TEXTE = exports.updateCustomer = exports.searchCustomers = exports.recordInvoicePayment = exports.listInvoices = exports.listBrands = exports.issueInvoice = exports.getInvoiceXml = exports.getInvoiceSetupStatus = exports.getInvoicePdf = exports.getInvoice = exports.getCustomer = exports.createCustomer = exports.createCreditNote = exports.cancelInvoice = exports.rechnungFeldFehler = exports.rechnungFehlerCode = exports.istRechnungFehler = exports.rechnungKeyAuth = exports.createRechnungApi = void 0;
|
|
15
|
+
exports.RECHNUNG_MINDESTENS_EINS = exports.RECHNUNG_GENAU_EINS = exports.RECHNUNG_ANFRAGEN = exports.POSITION_FELDER = exports.KUNDE_FELDER = exports.INVOICE_SETUP_REQUIREMENTS = exports.RECHNUNG_EINHEITEN_CODES = exports.INVOICE_UNITS = exports.INVOICE_NOTICE_CODES = exports.REVERSE_CHARGE_REASONS = exports.ITEM_KINDS = exports.INVOICE_PAYMENT_METHODS = exports.INVOICE_LANGUAGES = exports.EINVOICE_FORMATS = exports.DOC_TYPES = exports.INVOICE_LIST_STATUS = exports.CUSTOMER_TYPES = exports.VAT_RATES = exports.PRICE_MODES = exports.TAX_SCHEMES = exports.CREDIT_NOTE_REASONS = exports.INVOICE_ERROR_CODES = exports.RECHNUNG_AUFRUFE = exports.RECHNUNG_VERTRAG_VERSION = exports.rechnungText = exports.RECHNUNG_TEXTE = exports.updateCustomer = exports.searchCustomers = exports.recordInvoicePayment = exports.listInvoices = exports.listBrands = exports.issueInvoice = exports.getInvoiceXml = exports.getInvoiceSetupStatus = exports.getInvoicePdf = exports.getInvoice = exports.getCustomer = exports.createCustomer = exports.createCreditNote = exports.cancelInvoice = exports.rechnungFeldFehler = exports.rechnungFehlerCode = exports.istRechnungFehler = exports.rechnungKeyAuth = exports.createRechnungApi = void 0;
|
|
16
16
|
var api_js_1 = require("./api.js");
|
|
17
17
|
Object.defineProperty(exports, "createRechnungApi", { enumerable: true, get: function () { return api_js_1.createRechnungApi; } });
|
|
18
18
|
var auth_js_1 = require("./auth.js");
|
|
@@ -53,6 +53,8 @@ Object.defineProperty(exports, "DOC_TYPES", { enumerable: true, get: function ()
|
|
|
53
53
|
Object.defineProperty(exports, "EINVOICE_FORMATS", { enumerable: true, get: function () { return vertrag_js_1.EINVOICE_FORMATS; } });
|
|
54
54
|
Object.defineProperty(exports, "INVOICE_LANGUAGES", { enumerable: true, get: function () { return vertrag_js_1.INVOICE_LANGUAGES; } });
|
|
55
55
|
Object.defineProperty(exports, "INVOICE_PAYMENT_METHODS", { enumerable: true, get: function () { return vertrag_js_1.INVOICE_PAYMENT_METHODS; } });
|
|
56
|
+
Object.defineProperty(exports, "ITEM_KINDS", { enumerable: true, get: function () { return vertrag_js_1.ITEM_KINDS; } });
|
|
57
|
+
Object.defineProperty(exports, "REVERSE_CHARGE_REASONS", { enumerable: true, get: function () { return vertrag_js_1.REVERSE_CHARGE_REASONS; } });
|
|
56
58
|
Object.defineProperty(exports, "INVOICE_NOTICE_CODES", { enumerable: true, get: function () { return vertrag_js_1.INVOICE_NOTICE_CODES; } });
|
|
57
59
|
Object.defineProperty(exports, "INVOICE_UNITS", { enumerable: true, get: function () { return vertrag_js_1.INVOICE_UNITS; } });
|
|
58
60
|
Object.defineProperty(exports, "RECHNUNG_EINHEITEN_CODES", { enumerable: true, get: function () { return vertrag_js_1.RECHNUNG_EINHEITEN_CODES; } });
|
|
@@ -40,11 +40,26 @@ declare const DE: {
|
|
|
40
40
|
readonly 'pdf.summe.gesamt.rechnung': "Gesamtbetrag";
|
|
41
41
|
readonly 'pdf.summe.gesamt.gutschrift': "Gutschriftsbetrag";
|
|
42
42
|
readonly 'steuer.kleinunternehmer': "Gemäß § 6 Abs. 1 Z 27 UStG wird keine Umsatzsteuer verrechnet (Kleinunternehmer).";
|
|
43
|
-
readonly 'steuer.igLieferung': "Steuerfreie innergemeinschaftliche Lieferung
|
|
43
|
+
readonly 'steuer.igLieferung.titel': "Steuerfreie innergemeinschaftliche Lieferung. ";
|
|
44
|
+
readonly 'steuer.igLieferung.text': "Gemäß Art. 6 Abs. 1 UStG (Art. 138 MwSt-RL 2006/112/EG). Die Erwerbsbesteuerung erfolgt durch den Abnehmer im Bestimmungsland.";
|
|
44
45
|
readonly 'steuer.ausfuhr': "Steuerfreie Ausfuhrlieferung (§ 6 Abs. 1 Z 1 UStG).";
|
|
45
|
-
readonly 'steuer.reverseCharge.titel': "
|
|
46
|
-
readonly 'steuer.reverseCharge.text': "Übergang der
|
|
47
|
-
readonly 'steuer.
|
|
46
|
+
readonly 'steuer.reverseCharge.titel': "Steuerschuldnerschaft des Leistungsempfängers. ";
|
|
47
|
+
readonly 'steuer.reverseCharge.text': "Übergang der Steuerschuld gem. Art. 196 MwSt-RL 2006/112/EG (innergemeinschaftliche Leistung). Die Leistung ist nicht steuerfrei — die Umsatzsteuer schuldet und entrichtet der Leistungsempfänger in seinem Land.";
|
|
48
|
+
readonly 'steuer.uidZeile': "UID Leistungserbringer: {verkaeufer} · UID Leistungsempfänger: {kaeufer}";
|
|
49
|
+
readonly 'steuer.rcGrund.construction': "Bauleistung gemäß § 19 Abs. 1a UStG.";
|
|
50
|
+
readonly 'steuer.rcGrund.scrap': "Schrott und Abfallstoffe gemäß Schrott-Umsatzsteuerverordnung (BGBl. II Nr. 129/2007).";
|
|
51
|
+
readonly 'steuer.rcGrund.mobile_devices': "Mobilfunkgeräte bzw. integrierte Schaltkreise gemäß § 19 Abs. 1e lit. b UStG.";
|
|
52
|
+
readonly 'steuer.rcGrund.it_devices': "Laptops, Tablets bzw. Videospielkonsolen gemäß § 2 Z 1 Umsatzsteuerbetrugsbekämpfungsverordnung (BGBl. II Nr. 369/2013).";
|
|
53
|
+
readonly 'steuer.rcGrund.metals': "Metalle gemäß § 2 Z 4 Umsatzsteuerbetrugsbekämpfungsverordnung.";
|
|
54
|
+
readonly 'steuer.rcGrund.emission_certificates': "Treibhausgasemissionszertifikate gemäß § 19 Abs. 1e lit. a UStG.";
|
|
55
|
+
readonly 'steuer.rcGrund.gas_electricity': "Lieferung von Gas oder Elektrizität an einen Wiederverkäufer gemäß § 2 Z 2 Umsatzsteuerbetrugsbekämpfungsverordnung.";
|
|
56
|
+
readonly 'steuer.rcGrund.energy_certificates': "Gas- und Elektrizitätszertifikate gemäß § 2 Z 3 Umsatzsteuerbetrugsbekämpfungsverordnung.";
|
|
57
|
+
readonly 'steuer.rcGrund.investment_gold': "Steuerpflichtige Lieferung von Anlagegold gemäß § 2 Z 5 Umsatzsteuerbetrugsbekämpfungsverordnung.";
|
|
58
|
+
readonly 'steuer.rcGrund.security_transfer': "Lieferung von Sicherungs- bzw. Vorbehaltseigentum gemäß § 19 Abs. 1b UStG.";
|
|
59
|
+
readonly 'steuer.rcGrund.foreign_supplier': "Leistung eines nicht im Inland ansässigen Unternehmers gemäß § 19 Abs. 1 zweiter Satz UStG.";
|
|
60
|
+
readonly 'steuer.domestic.text': "Die Umsatzsteuer schuldet und entrichtet der Leistungsempfänger. Die Leistung ist nicht steuerfrei.";
|
|
61
|
+
readonly 'steuer.outsideScope.titel': "Nicht steuerbarer Umsatz. ";
|
|
62
|
+
readonly 'steuer.outsideScope.text': "Der Leistungsort liegt gemäß § 3a Abs. 6 UStG im Ansässigkeitsstaat des Leistungsempfängers; in Österreich fällt keine Umsatzsteuer an.";
|
|
48
63
|
readonly 'pdf.zahlung.titel': "ZAHLUNGSINFORMATIONEN";
|
|
49
64
|
readonly 'pdf.zahlung.empfaenger': "Empfänger";
|
|
50
65
|
readonly 'pdf.zahlung.iban': "IBAN";
|
|
@@ -94,6 +109,7 @@ declare const DE: {
|
|
|
94
109
|
readonly 'einvoice.befreiung.reverseCharge': "Steuerschuldnerschaft des Leistungsempfängers (Reverse Charge)";
|
|
95
110
|
readonly 'einvoice.befreiung.kleinunternehmer': "Steuerbefreit — Kleinunternehmer gemäß §6 Abs. 1 Z 27 UStG";
|
|
96
111
|
readonly 'einvoice.befreiung.igLieferung': "Steuerfreie innergemeinschaftliche Lieferung gemäß Art. 6 Abs. 1 UStG";
|
|
112
|
+
readonly 'einvoice.befreiung.outsideScope': "Nicht steuerbarer Umsatz — Leistungsort im Ausland (§ 3a Abs. 6 UStG)";
|
|
97
113
|
readonly 'einvoice.befreiung.ausfuhr': "Steuerfreie Ausfuhrlieferung gemäß §6 Abs. 1 Z 1 UStG";
|
|
98
114
|
readonly 'einvoice.zahlbarBis': "Zahlbar bis {datum}";
|
|
99
115
|
readonly 'einheit.piece': "Stk";
|
|
@@ -29,11 +29,34 @@ const DE = {
|
|
|
29
29
|
'pdf.summe.gesamt.rechnung': 'Gesamtbetrag',
|
|
30
30
|
'pdf.summe.gesamt.gutschrift': 'Gutschriftsbetrag',
|
|
31
31
|
'steuer.kleinunternehmer': 'Gemäß § 6 Abs. 1 Z 27 UStG wird keine Umsatzsteuer verrechnet (Kleinunternehmer).',
|
|
32
|
-
'steuer.igLieferung': 'Steuerfreie innergemeinschaftliche Lieferung
|
|
32
|
+
'steuer.igLieferung.titel': 'Steuerfreie innergemeinschaftliche Lieferung. ',
|
|
33
|
+
'steuer.igLieferung.text': 'Gemäß Art. 6 Abs. 1 UStG (Art. 138 MwSt-RL 2006/112/EG). Die Erwerbsbesteuerung erfolgt durch den Abnehmer im Bestimmungsland.',
|
|
33
34
|
'steuer.ausfuhr': 'Steuerfreie Ausfuhrlieferung (§ 6 Abs. 1 Z 1 UStG).',
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
// Reverse Charge ist KEINE Steuerbefreiung: der Umsatz bleibt steuerpflichtig,
|
|
36
|
+
// nur die Steuer schuldet der Empfaenger (§ 11 Abs. 1a UStG; der Begriff steht
|
|
37
|
+
// wortgleich in Art. 226 Nr. 11a MwSt-RL). „Steuerfrei" waere sachlich falsch
|
|
38
|
+
// und erbraechte den vorgeschriebenen Hinweis nicht.
|
|
39
|
+
'steuer.reverseCharge.titel': 'Steuerschuldnerschaft des Leistungsempfängers. ',
|
|
40
|
+
'steuer.reverseCharge.text': 'Übergang der Steuerschuld gem. Art. 196 MwSt-RL 2006/112/EG (innergemeinschaftliche Leistung). Die Leistung ist nicht steuerfrei — die Umsatzsteuer schuldet und entrichtet der Leistungsempfänger in seinem Land.',
|
|
41
|
+
// Beide UID-Nummern: bei Reverse Charge § 11 Abs. 1a, bei der ig. Lieferung
|
|
42
|
+
// Art. 11 Abs. 2 UStG.
|
|
43
|
+
'steuer.uidZeile': 'UID Leistungserbringer: {verkaeufer} · UID Leistungsempfänger: {kaeufer}',
|
|
44
|
+
// Inlands-Reverse-Charge: je Grund ein Satz, der die Gesetzesstelle nennt —
|
|
45
|
+
// sie traegt den Hinweis nach § 11 Abs. 1a UStG.
|
|
46
|
+
'steuer.rcGrund.construction': 'Bauleistung gemäß § 19 Abs. 1a UStG.',
|
|
47
|
+
'steuer.rcGrund.scrap': 'Schrott und Abfallstoffe gemäß Schrott-Umsatzsteuerverordnung (BGBl. II Nr. 129/2007).',
|
|
48
|
+
'steuer.rcGrund.mobile_devices': 'Mobilfunkgeräte bzw. integrierte Schaltkreise gemäß § 19 Abs. 1e lit. b UStG.',
|
|
49
|
+
'steuer.rcGrund.it_devices': 'Laptops, Tablets bzw. Videospielkonsolen gemäß § 2 Z 1 Umsatzsteuerbetrugsbekämpfungsverordnung (BGBl. II Nr. 369/2013).',
|
|
50
|
+
'steuer.rcGrund.metals': 'Metalle gemäß § 2 Z 4 Umsatzsteuerbetrugsbekämpfungsverordnung.',
|
|
51
|
+
'steuer.rcGrund.emission_certificates': 'Treibhausgasemissionszertifikate gemäß § 19 Abs. 1e lit. a UStG.',
|
|
52
|
+
'steuer.rcGrund.gas_electricity': 'Lieferung von Gas oder Elektrizität an einen Wiederverkäufer gemäß § 2 Z 2 Umsatzsteuerbetrugsbekämpfungsverordnung.',
|
|
53
|
+
'steuer.rcGrund.energy_certificates': 'Gas- und Elektrizitätszertifikate gemäß § 2 Z 3 Umsatzsteuerbetrugsbekämpfungsverordnung.',
|
|
54
|
+
'steuer.rcGrund.investment_gold': 'Steuerpflichtige Lieferung von Anlagegold gemäß § 2 Z 5 Umsatzsteuerbetrugsbekämpfungsverordnung.',
|
|
55
|
+
'steuer.rcGrund.security_transfer': 'Lieferung von Sicherungs- bzw. Vorbehaltseigentum gemäß § 19 Abs. 1b UStG.',
|
|
56
|
+
'steuer.rcGrund.foreign_supplier': 'Leistung eines nicht im Inland ansässigen Unternehmers gemäß § 19 Abs. 1 zweiter Satz UStG.',
|
|
57
|
+
'steuer.domestic.text': 'Die Umsatzsteuer schuldet und entrichtet der Leistungsempfänger. Die Leistung ist nicht steuerfrei.',
|
|
58
|
+
'steuer.outsideScope.titel': 'Nicht steuerbarer Umsatz. ',
|
|
59
|
+
'steuer.outsideScope.text': 'Der Leistungsort liegt gemäß § 3a Abs. 6 UStG im Ansässigkeitsstaat des Leistungsempfängers; in Österreich fällt keine Umsatzsteuer an.',
|
|
37
60
|
'pdf.zahlung.titel': 'ZAHLUNGSINFORMATIONEN',
|
|
38
61
|
'pdf.zahlung.empfaenger': 'Empfänger',
|
|
39
62
|
'pdf.zahlung.iban': 'IBAN',
|
|
@@ -83,6 +106,7 @@ const DE = {
|
|
|
83
106
|
'einvoice.befreiung.reverseCharge': 'Steuerschuldnerschaft des Leistungsempfängers (Reverse Charge)',
|
|
84
107
|
'einvoice.befreiung.kleinunternehmer': 'Steuerbefreit — Kleinunternehmer gemäß §6 Abs. 1 Z 27 UStG',
|
|
85
108
|
'einvoice.befreiung.igLieferung': 'Steuerfreie innergemeinschaftliche Lieferung gemäß Art. 6 Abs. 1 UStG',
|
|
109
|
+
'einvoice.befreiung.outsideScope': 'Nicht steuerbarer Umsatz — Leistungsort im Ausland (§ 3a Abs. 6 UStG)',
|
|
86
110
|
'einvoice.befreiung.ausfuhr': 'Steuerfreie Ausfuhrlieferung gemäß §6 Abs. 1 Z 1 UStG',
|
|
87
111
|
'einvoice.zahlbarBis': 'Zahlbar bis {datum}',
|
|
88
112
|
'einheit.piece': 'Stk',
|
|
@@ -211,11 +235,26 @@ const EN = {
|
|
|
211
235
|
'pdf.summe.gesamt.rechnung': 'Total',
|
|
212
236
|
'pdf.summe.gesamt.gutschrift': 'Credit total',
|
|
213
237
|
'steuer.kleinunternehmer': 'No VAT charged pursuant to § 6 (1) no. 27 UStG (small business exemption).',
|
|
214
|
-
'steuer.igLieferung': 'VAT-exempt intra-Community supply
|
|
238
|
+
'steuer.igLieferung.titel': 'VAT-exempt intra-Community supply. ',
|
|
239
|
+
'steuer.igLieferung.text': 'Pursuant to Art. 6 (1) UStG (Art. 138 of VAT Directive 2006/112/EC). The acquisition is taxed by the customer in the country of destination.',
|
|
215
240
|
'steuer.ausfuhr': 'VAT-exempt export delivery (§ 6 (1) no. 1 UStG).',
|
|
216
|
-
'steuer.reverseCharge.titel': '
|
|
217
|
-
'steuer.reverseCharge.text': 'VAT liability transferred
|
|
218
|
-
'steuer.
|
|
241
|
+
'steuer.reverseCharge.titel': 'Reverse charge – VAT liability of the recipient. ',
|
|
242
|
+
'steuer.reverseCharge.text': 'VAT liability transferred pursuant to Art. 196 of VAT Directive 2006/112/EC (intra-Community service). The service is not VAT-exempt — the recipient owes and accounts for the VAT in their country.',
|
|
243
|
+
'steuer.uidZeile': 'VAT ID supplier: {verkaeufer} · VAT ID recipient: {kaeufer}',
|
|
244
|
+
'steuer.rcGrund.construction': 'Construction work pursuant to § 19 (1a) UStG.',
|
|
245
|
+
'steuer.rcGrund.scrap': 'Scrap and waste materials pursuant to the Austrian scrap VAT regulation (BGBl. II No. 129/2007).',
|
|
246
|
+
'steuer.rcGrund.mobile_devices': 'Mobile phones or integrated circuits pursuant to § 19 (1e) (b) UStG.',
|
|
247
|
+
'steuer.rcGrund.it_devices': 'Laptops, tablets or games consoles pursuant to § 2 no. 1 of the Austrian VAT anti-fraud regulation (BGBl. II No. 369/2013).',
|
|
248
|
+
'steuer.rcGrund.metals': 'Metals pursuant to § 2 no. 4 of the Austrian VAT anti-fraud regulation.',
|
|
249
|
+
'steuer.rcGrund.emission_certificates': 'Greenhouse gas emission allowances pursuant to § 19 (1e) (a) UStG.',
|
|
250
|
+
'steuer.rcGrund.gas_electricity': 'Supply of gas or electricity to a reseller pursuant to § 2 no. 2 of the Austrian VAT anti-fraud regulation.',
|
|
251
|
+
'steuer.rcGrund.energy_certificates': 'Gas and electricity certificates pursuant to § 2 no. 3 of the Austrian VAT anti-fraud regulation.',
|
|
252
|
+
'steuer.rcGrund.investment_gold': 'Taxable supply of investment gold pursuant to § 2 no. 5 of the Austrian VAT anti-fraud regulation.',
|
|
253
|
+
'steuer.rcGrund.security_transfer': 'Supply of goods under a security or retention of title arrangement pursuant to § 19 (1b) UStG.',
|
|
254
|
+
'steuer.rcGrund.foreign_supplier': 'Supply by a business not established in Austria pursuant to § 19 (1) second sentence UStG.',
|
|
255
|
+
'steuer.domestic.text': 'The recipient owes and accounts for the VAT. The supply is not VAT-exempt.',
|
|
256
|
+
'steuer.outsideScope.titel': 'Outside the scope of Austrian VAT. ',
|
|
257
|
+
'steuer.outsideScope.text': 'The place of supply is the recipient\'s country pursuant to § 3a (6) UStG; no Austrian VAT applies.',
|
|
219
258
|
'pdf.zahlung.titel': 'PAYMENT DETAILS',
|
|
220
259
|
'pdf.zahlung.empfaenger': 'Payee',
|
|
221
260
|
'pdf.zahlung.iban': 'IBAN',
|
|
@@ -265,6 +304,7 @@ const EN = {
|
|
|
265
304
|
'einvoice.befreiung.reverseCharge': 'Reverse charge – VAT liability of the recipient',
|
|
266
305
|
'einvoice.befreiung.kleinunternehmer': 'VAT exempt — small business pursuant to § 6 (1) no. 27 UStG',
|
|
267
306
|
'einvoice.befreiung.igLieferung': 'VAT-exempt intra-Community supply pursuant to Art. 6 (1) UStG',
|
|
307
|
+
'einvoice.befreiung.outsideScope': 'Outside the scope of VAT — place of supply abroad (§ 3a (6) UStG)',
|
|
268
308
|
'einvoice.befreiung.ausfuhr': 'VAT-exempt export delivery pursuant to § 6 (1) no. 1 UStG',
|
|
269
309
|
'einvoice.zahlbarBis': 'Payable by {datum}',
|
|
270
310
|
'einheit.piece': 'pcs',
|
|
@@ -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, InvoiceLanguage, InvoiceNoticeCode, InvoicePaymentMethod, InvoiceUnit, InvoiceSetupRequirement, InvoiceListStatus, PriceMode, TaxScheme, VatRatePercent } from './vertrag.js';
|
|
8
|
+
import type { CreditNoteReason, CustomerType, DocType, InvoiceLanguage, InvoiceNoticeCode, ItemKind, ReverseChargeReason, InvoicePaymentMethod, InvoiceUnit, InvoiceSetupRequirement, InvoiceListStatus, PriceMode, TaxScheme, VatRatePercent } from './vertrag.js';
|
|
9
9
|
export interface CustomerInput {
|
|
10
10
|
type: CustomerType;
|
|
11
11
|
name: string;
|
|
@@ -71,6 +71,8 @@ export interface InvoiceItemInput {
|
|
|
71
71
|
quantity: number;
|
|
72
72
|
/** Einheit aus `INVOICE_UNITS`; ohne Angabe `piece`. */
|
|
73
73
|
unit?: InvoiceUnit;
|
|
74
|
+
/** Ware oder Leistung; ohne Angabe `goods`. Entscheidet ueber den Steuerfall. */
|
|
75
|
+
kind?: ItemKind;
|
|
74
76
|
/** Einzelpreis in ganzen Cent, im `priceMode` der Rechnung (netto oder brutto). */
|
|
75
77
|
unitPriceCents: number;
|
|
76
78
|
vatRate: VatRatePercent;
|
|
@@ -82,7 +84,10 @@ export interface IssueInvoiceRequest {
|
|
|
82
84
|
idempotencyKey: string;
|
|
83
85
|
/** Pflicht ueber 400 € brutto sowie bei Reverse Charge und ig. Lieferung. */
|
|
84
86
|
customerId?: string;
|
|
85
|
-
|
|
87
|
+
/** Optional: der Server leitet den Fall ab und prueft eine Angabe dagegen. */
|
|
88
|
+
taxScheme?: TaxScheme;
|
|
89
|
+
/** Pflicht bei `domesticReverseCharge`. */
|
|
90
|
+
reverseChargeReason?: ReverseChargeReason;
|
|
86
91
|
priceMode: PriceMode;
|
|
87
92
|
/** Leistungsdatum bzw. Beginn des Leistungszeitraums. */
|
|
88
93
|
serviceStart: string;
|
|
@@ -118,6 +123,13 @@ export interface PaymentInput {
|
|
|
118
123
|
paidAt?: string;
|
|
119
124
|
/** Zahlungskennung des Fremdsystems — gespeichert, aber nicht gedruckt. */
|
|
120
125
|
reference?: string;
|
|
126
|
+
/**
|
|
127
|
+
* Die Zahlung erfolgte vor Ort beim Unternehmer (Terminal an der Kasse).
|
|
128
|
+
* Dann ist sie ein Barumsatz — auch mit Karte (§ 131b Abs. 1 Z 3 UStG) — und
|
|
129
|
+
* die Antwort traegt den Hinweis `cash_receipt_required`. Zu `transfer`
|
|
130
|
+
* passt das Kennzeichen nicht und wird abgewiesen.
|
|
131
|
+
*/
|
|
132
|
+
onSite?: boolean;
|
|
121
133
|
}
|
|
122
134
|
export interface RecordPaymentRequest extends PaymentInput {
|
|
123
135
|
/** Pflicht: ohne ihn bucht eine Wiederholung eine zweite Zahlung. */
|
|
@@ -220,6 +232,8 @@ export interface InvoiceItem {
|
|
|
220
232
|
subtitle: string;
|
|
221
233
|
quantity: number;
|
|
222
234
|
unit: string;
|
|
235
|
+
/** Ware oder Leistung — Altbestand ohne Angabe zaehlt als `goods`. */
|
|
236
|
+
kind: ItemKind;
|
|
223
237
|
unitPriceCents: number;
|
|
224
238
|
vatRate: number;
|
|
225
239
|
discountPct: number;
|
|
@@ -228,6 +242,10 @@ export interface InvoiceDetail extends Invoice {
|
|
|
228
242
|
items: InvoiceItem[];
|
|
229
243
|
customer: InvoiceRecipient | null;
|
|
230
244
|
taxScheme: TaxScheme;
|
|
245
|
+
/** Nur bei `domesticReverseCharge`. */
|
|
246
|
+
reverseChargeReason: ReverseChargeReason | null;
|
|
247
|
+
/** Land, dessen Steuer die Rechnung traegt; Altbestand `AT`. */
|
|
248
|
+
taxCountry: string;
|
|
231
249
|
priceMode: PriceMode;
|
|
232
250
|
serviceStart: string | null;
|
|
233
251
|
serviceEnd: string | null;
|
|
@@ -273,6 +291,13 @@ export interface IssueResult {
|
|
|
273
291
|
invoice: Invoice;
|
|
274
292
|
/** `true`, wenn die Anfrage schon einmal ausgefuehrt wurde und die bestehende Rechnung zurueckkommt. */
|
|
275
293
|
replayed: boolean;
|
|
294
|
+
/**
|
|
295
|
+
* Hinweise zu dieser Rechnung — kein Fehler, sondern etwas, das der Aufrufer
|
|
296
|
+
* wissen sollte. Eine **Liste**, weil mehrere zugleich anfallen koennen: eine
|
|
297
|
+
* bar bezahlte ig. Lieferung traegt sowohl `cash_receipt_required` als auch
|
|
298
|
+
* `recapitulative_statement_due`.
|
|
299
|
+
*/
|
|
300
|
+
notice?: InvoiceNotice[];
|
|
276
301
|
}
|
|
277
302
|
export interface CancelResult {
|
|
278
303
|
creditNote: Invoice;
|
|
@@ -24,13 +24,88 @@ export type RechnungAufruf = (typeof RECHNUNG_AUFRUFE)[number];
|
|
|
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", "invoice_api_not_enabled", "invoice_setup_incomplete", "language_not_allowed", "brand_not_found", "not_payable", "payment_exceeds_invoice"];
|
|
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", "not_payable", "payment_exceeds_invoice", "tax_scheme_mismatch", "vat_rate_not_in_country", "reverse_charge_reason_required", "reverse_charge_threshold", "mixed_supply_not_allowed", "oss_not_enabled"];
|
|
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"];
|
|
31
31
|
export type CreditNoteReason = (typeof CREDIT_NOTE_REASONS)[number];
|
|
32
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Der Steuerfall einer Rechnung. Er wird vom Server **abgeleitet** (Kundenland,
|
|
34
|
+
* Kundenart, UID, Ware oder Leistung); eine mitgeschickte Angabe muss dazu
|
|
35
|
+
* passen, sonst `tax_scheme_mismatch`. Neue Faelle stehen hinten, damit
|
|
36
|
+
* gespeicherte Reihenfolgen gueltig bleiben.
|
|
37
|
+
*
|
|
38
|
+
* - `normal` oesterreichische Umsatzsteuer
|
|
39
|
+
* - `smallBusiness` Kleinunternehmer (§ 6 Abs. 1 Z 27 UStG)
|
|
40
|
+
* - `reverseCharge` Leistung an ein Unternehmen in der EU (Art. 196 MwSt-RL)
|
|
41
|
+
* - `igLieferung` Ware an ein Unternehmen in der EU (Art. 6 Abs. 1 UStG)
|
|
42
|
+
* - `exportThirdCountry` Ware ins Drittland (§ 6 Abs. 1 Z 1 UStG)
|
|
43
|
+
* - `domesticReverseCharge` Uebergang der Steuerschuld im Inland, Grund aus `REVERSE_CHARGE_REASONS`
|
|
44
|
+
* - `oss` B2C in der EU ueber den One-Stop-Shop, Satz des Ziellandes
|
|
45
|
+
* - `outsideScope` Leistung an ein Drittlandsunternehmen — in Oesterreich nicht steuerbar
|
|
46
|
+
*/
|
|
47
|
+
export declare const TAX_SCHEMES: readonly ["normal", "smallBusiness", "reverseCharge", "igLieferung", "exportThirdCountry", "domesticReverseCharge", "oss", "outsideScope"];
|
|
33
48
|
export type TaxScheme = (typeof TAX_SCHEMES)[number];
|
|
49
|
+
/**
|
|
50
|
+
* Gruende fuer den Uebergang der Steuerschuld **im Inland**. Ohne Grund gibt es
|
|
51
|
+
* kein `domesticReverseCharge`: die Bedingungen sind je Fall verschieden, und
|
|
52
|
+
* keine davon laesst sich aus Betrag und Land erraten.
|
|
53
|
+
*
|
|
54
|
+
* `schwelleCents` ist das Entgelt, ab dem der Fall greift — maßgeblich ist das
|
|
55
|
+
* **in der Rechnung ausgewiesene** Entgelt, nicht der Einzelpreis; ein
|
|
56
|
+
* einheitlicher Liefervorgang darf dafuer nicht auf mehrere Rechnungen
|
|
57
|
+
* aufgeteilt werden (UStR Rz 2605d).
|
|
58
|
+
*/
|
|
59
|
+
export declare const REVERSE_CHARGE_REASONS: Readonly<{
|
|
60
|
+
construction: {
|
|
61
|
+
stelle: string;
|
|
62
|
+
schwelleCents: null;
|
|
63
|
+
};
|
|
64
|
+
scrap: {
|
|
65
|
+
stelle: string;
|
|
66
|
+
schwelleCents: null;
|
|
67
|
+
};
|
|
68
|
+
mobile_devices: {
|
|
69
|
+
stelle: string;
|
|
70
|
+
schwelleCents: number;
|
|
71
|
+
};
|
|
72
|
+
it_devices: {
|
|
73
|
+
stelle: string;
|
|
74
|
+
schwelleCents: number;
|
|
75
|
+
};
|
|
76
|
+
metals: {
|
|
77
|
+
stelle: string;
|
|
78
|
+
schwelleCents: null;
|
|
79
|
+
};
|
|
80
|
+
emission_certificates: {
|
|
81
|
+
stelle: string;
|
|
82
|
+
schwelleCents: null;
|
|
83
|
+
};
|
|
84
|
+
gas_electricity: {
|
|
85
|
+
stelle: string;
|
|
86
|
+
schwelleCents: null;
|
|
87
|
+
};
|
|
88
|
+
energy_certificates: {
|
|
89
|
+
stelle: string;
|
|
90
|
+
schwelleCents: null;
|
|
91
|
+
};
|
|
92
|
+
investment_gold: {
|
|
93
|
+
stelle: string;
|
|
94
|
+
schwelleCents: null;
|
|
95
|
+
};
|
|
96
|
+
security_transfer: {
|
|
97
|
+
stelle: string;
|
|
98
|
+
schwelleCents: null;
|
|
99
|
+
};
|
|
100
|
+
foreign_supplier: {
|
|
101
|
+
stelle: string;
|
|
102
|
+
schwelleCents: null;
|
|
103
|
+
};
|
|
104
|
+
}>;
|
|
105
|
+
export type ReverseChargeReason = keyof typeof REVERSE_CHARGE_REASONS;
|
|
106
|
+
/** Ware oder Leistung — ohne das laesst sich ig. Lieferung nicht von Reverse Charge trennen. */
|
|
107
|
+
export declare const ITEM_KINDS: readonly ["goods", "service"];
|
|
108
|
+
export type ItemKind = (typeof ITEM_KINDS)[number];
|
|
34
109
|
export declare const PRICE_MODES: readonly ["net", "gross"];
|
|
35
110
|
export type PriceMode = (typeof PRICE_MODES)[number];
|
|
36
111
|
export declare const VAT_RATES: readonly [0, 10, 13, 20];
|
|
@@ -52,10 +127,13 @@ export type EInvoiceFormat = (typeof EINVOICE_FORMATS)[number];
|
|
|
52
127
|
export declare const INVOICE_LANGUAGES: readonly ["de", "en"];
|
|
53
128
|
export type InvoiceLanguage = (typeof INVOICE_LANGUAGES)[number];
|
|
54
129
|
/**
|
|
55
|
-
* Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
130
|
+
* Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg.
|
|
131
|
+
*
|
|
132
|
+
* Ein **Barumsatz** ist nicht nur Bargeld: als Barzahlung gilt auch die Zahlung
|
|
133
|
+
* mit Bankomat- oder Kreditkarte **vor Ort** (§ 131b Abs. 1 Z 3 UStG), nicht
|
|
134
|
+
* aber dieselbe Karte im Internet. Weil `card` und `online` beides sein
|
|
135
|
+
* koennen, sagt das Feld `onSite` es dem Server — und nur dann traegt die
|
|
136
|
+
* Antwort den Hinweis `cash_receipt_required` (bei `cash` immer).
|
|
59
137
|
*/
|
|
60
138
|
export declare const INVOICE_PAYMENT_METHODS: readonly ["transfer", "card", "online", "cash"];
|
|
61
139
|
export type InvoicePaymentMethod = (typeof INVOICE_PAYMENT_METHODS)[number];
|
|
@@ -63,7 +141,7 @@ export type InvoicePaymentMethod = (typeof INVOICE_PAYMENT_METHODS)[number];
|
|
|
63
141
|
* Hinweise, die eine erfolgreiche Antwort zusaetzlich tragen kann (`data.notice`).
|
|
64
142
|
* Sie sind keine Fehler: der Aufruf hat gewirkt, es gibt nur etwas zu wissen.
|
|
65
143
|
*/
|
|
66
|
-
export declare const INVOICE_NOTICE_CODES: readonly ["cash_receipt_required"];
|
|
144
|
+
export declare const INVOICE_NOTICE_CODES: readonly ["cash_receipt_required", "recapitulative_statement_due", "place_of_supply_check"];
|
|
67
145
|
export type InvoiceNoticeCode = (typeof INVOICE_NOTICE_CODES)[number];
|
|
68
146
|
/**
|
|
69
147
|
* Einheiten einer Position. Die API nimmt nur diese Schluessel an; gedruckt
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* Nummer, Summen — ist bewusst **nicht** setzbar.
|
|
20
20
|
*/
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.RECHNUNG_MINDESTENS_EINS = exports.RECHNUNG_GENAU_EINS = exports.RECHNUNG_ANFRAGEN = exports.PAYMENT_FELDER = exports.POSITION_FELDER = exports.KUNDE_FELDER = exports.INVOICE_SETUP_REQUIREMENTS = exports.RECHNUNG_EINHEITEN_CODES = exports.INVOICE_UNITS = exports.INVOICE_NOTICE_CODES = exports.INVOICE_PAYMENT_METHODS = exports.INVOICE_LANGUAGES = exports.EINVOICE_FORMATS = exports.DOC_TYPES = exports.INVOICE_LIST_STATUS = exports.CUSTOMER_TYPES = exports.VAT_RATES = exports.PRICE_MODES = exports.TAX_SCHEMES = exports.CREDIT_NOTE_REASONS = exports.INVOICE_ERROR_CODES = exports.RECHNUNG_AUFRUFE = exports.RECHNUNG_VERTRAG_VERSION = void 0;
|
|
22
|
+
exports.RECHNUNG_MINDESTENS_EINS = exports.RECHNUNG_GENAU_EINS = exports.RECHNUNG_ANFRAGEN = exports.PAYMENT_FELDER = exports.POSITION_FELDER = exports.KUNDE_FELDER = exports.INVOICE_SETUP_REQUIREMENTS = exports.RECHNUNG_EINHEITEN_CODES = exports.INVOICE_UNITS = exports.INVOICE_NOTICE_CODES = exports.INVOICE_PAYMENT_METHODS = exports.INVOICE_LANGUAGES = exports.EINVOICE_FORMATS = exports.DOC_TYPES = exports.INVOICE_LIST_STATUS = exports.CUSTOMER_TYPES = exports.VAT_RATES = exports.PRICE_MODES = exports.ITEM_KINDS = exports.REVERSE_CHARGE_REASONS = exports.TAX_SCHEMES = exports.CREDIT_NOTE_REASONS = exports.INVOICE_ERROR_CODES = exports.RECHNUNG_AUFRUFE = exports.RECHNUNG_VERTRAG_VERSION = void 0;
|
|
23
23
|
exports.RECHNUNG_VERTRAG_VERSION = 1;
|
|
24
24
|
exports.RECHNUNG_AUFRUFE = [
|
|
25
25
|
'createCustomer',
|
|
@@ -63,6 +63,12 @@ exports.INVOICE_ERROR_CODES = [
|
|
|
63
63
|
'brand_not_found',
|
|
64
64
|
'not_payable',
|
|
65
65
|
'payment_exceeds_invoice',
|
|
66
|
+
'tax_scheme_mismatch',
|
|
67
|
+
'vat_rate_not_in_country',
|
|
68
|
+
'reverse_charge_reason_required',
|
|
69
|
+
'reverse_charge_threshold',
|
|
70
|
+
'mixed_supply_not_allowed',
|
|
71
|
+
'oss_not_enabled',
|
|
66
72
|
];
|
|
67
73
|
/** Gruende einer Gutschrift. Der Server druckt den deutschen Anzeigetext. */
|
|
68
74
|
exports.CREDIT_NOTE_REASONS = [
|
|
@@ -72,7 +78,56 @@ exports.CREDIT_NOTE_REASONS = [
|
|
|
72
78
|
'incorrect_invoice',
|
|
73
79
|
'other',
|
|
74
80
|
];
|
|
75
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Der Steuerfall einer Rechnung. Er wird vom Server **abgeleitet** (Kundenland,
|
|
83
|
+
* Kundenart, UID, Ware oder Leistung); eine mitgeschickte Angabe muss dazu
|
|
84
|
+
* passen, sonst `tax_scheme_mismatch`. Neue Faelle stehen hinten, damit
|
|
85
|
+
* gespeicherte Reihenfolgen gueltig bleiben.
|
|
86
|
+
*
|
|
87
|
+
* - `normal` oesterreichische Umsatzsteuer
|
|
88
|
+
* - `smallBusiness` Kleinunternehmer (§ 6 Abs. 1 Z 27 UStG)
|
|
89
|
+
* - `reverseCharge` Leistung an ein Unternehmen in der EU (Art. 196 MwSt-RL)
|
|
90
|
+
* - `igLieferung` Ware an ein Unternehmen in der EU (Art. 6 Abs. 1 UStG)
|
|
91
|
+
* - `exportThirdCountry` Ware ins Drittland (§ 6 Abs. 1 Z 1 UStG)
|
|
92
|
+
* - `domesticReverseCharge` Uebergang der Steuerschuld im Inland, Grund aus `REVERSE_CHARGE_REASONS`
|
|
93
|
+
* - `oss` B2C in der EU ueber den One-Stop-Shop, Satz des Ziellandes
|
|
94
|
+
* - `outsideScope` Leistung an ein Drittlandsunternehmen — in Oesterreich nicht steuerbar
|
|
95
|
+
*/
|
|
96
|
+
exports.TAX_SCHEMES = [
|
|
97
|
+
'normal',
|
|
98
|
+
'smallBusiness',
|
|
99
|
+
'reverseCharge',
|
|
100
|
+
'igLieferung',
|
|
101
|
+
'exportThirdCountry',
|
|
102
|
+
'domesticReverseCharge',
|
|
103
|
+
'oss',
|
|
104
|
+
'outsideScope',
|
|
105
|
+
];
|
|
106
|
+
/**
|
|
107
|
+
* Gruende fuer den Uebergang der Steuerschuld **im Inland**. Ohne Grund gibt es
|
|
108
|
+
* kein `domesticReverseCharge`: die Bedingungen sind je Fall verschieden, und
|
|
109
|
+
* keine davon laesst sich aus Betrag und Land erraten.
|
|
110
|
+
*
|
|
111
|
+
* `schwelleCents` ist das Entgelt, ab dem der Fall greift — maßgeblich ist das
|
|
112
|
+
* **in der Rechnung ausgewiesene** Entgelt, nicht der Einzelpreis; ein
|
|
113
|
+
* einheitlicher Liefervorgang darf dafuer nicht auf mehrere Rechnungen
|
|
114
|
+
* aufgeteilt werden (UStR Rz 2605d).
|
|
115
|
+
*/
|
|
116
|
+
exports.REVERSE_CHARGE_REASONS = Object.freeze({
|
|
117
|
+
construction: { stelle: '§ 19 Abs. 1a UStG', schwelleCents: null },
|
|
118
|
+
scrap: { stelle: 'Schrott-UStV, BGBl. II Nr. 129/2007', schwelleCents: null },
|
|
119
|
+
mobile_devices: { stelle: '§ 19 Abs. 1e lit. b UStG', schwelleCents: 500_000 },
|
|
120
|
+
it_devices: { stelle: '§ 2 Z 1 UStBBKV, BGBl. II Nr. 369/2013', schwelleCents: 500_000 },
|
|
121
|
+
metals: { stelle: '§ 2 Z 4 UStBBKV', schwelleCents: null },
|
|
122
|
+
emission_certificates: { stelle: '§ 19 Abs. 1e lit. a UStG', schwelleCents: null },
|
|
123
|
+
gas_electricity: { stelle: '§ 2 Z 2 UStBBKV', schwelleCents: null },
|
|
124
|
+
energy_certificates: { stelle: '§ 2 Z 3 UStBBKV', schwelleCents: null },
|
|
125
|
+
investment_gold: { stelle: '§ 2 Z 5 UStBBKV', schwelleCents: null },
|
|
126
|
+
security_transfer: { stelle: '§ 19 Abs. 1b UStG', schwelleCents: null },
|
|
127
|
+
foreign_supplier: { stelle: '§ 19 Abs. 1 zweiter Satz UStG', schwelleCents: null },
|
|
128
|
+
});
|
|
129
|
+
/** Ware oder Leistung — ohne das laesst sich ig. Lieferung nicht von Reverse Charge trennen. */
|
|
130
|
+
exports.ITEM_KINDS = ['goods', 'service'];
|
|
76
131
|
exports.PRICE_MODES = ['net', 'gross'];
|
|
77
132
|
exports.VAT_RATES = [0, 10, 13, 20];
|
|
78
133
|
exports.CUSTOMER_TYPES = ['private', 'company'];
|
|
@@ -87,17 +142,28 @@ exports.EINVOICE_FORMATS = ['ubl', 'cii'];
|
|
|
87
142
|
*/
|
|
88
143
|
exports.INVOICE_LANGUAGES = ['de', 'en'];
|
|
89
144
|
/**
|
|
90
|
-
* Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
145
|
+
* Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg.
|
|
146
|
+
*
|
|
147
|
+
* Ein **Barumsatz** ist nicht nur Bargeld: als Barzahlung gilt auch die Zahlung
|
|
148
|
+
* mit Bankomat- oder Kreditkarte **vor Ort** (§ 131b Abs. 1 Z 3 UStG), nicht
|
|
149
|
+
* aber dieselbe Karte im Internet. Weil `card` und `online` beides sein
|
|
150
|
+
* koennen, sagt das Feld `onSite` es dem Server — und nur dann traegt die
|
|
151
|
+
* Antwort den Hinweis `cash_receipt_required` (bei `cash` immer).
|
|
94
152
|
*/
|
|
95
153
|
exports.INVOICE_PAYMENT_METHODS = ['transfer', 'card', 'online', 'cash'];
|
|
96
154
|
/**
|
|
97
155
|
* Hinweise, die eine erfolgreiche Antwort zusaetzlich tragen kann (`data.notice`).
|
|
98
156
|
* Sie sind keine Fehler: der Aufruf hat gewirkt, es gibt nur etwas zu wissen.
|
|
99
157
|
*/
|
|
100
|
-
exports.INVOICE_NOTICE_CODES = [
|
|
158
|
+
exports.INVOICE_NOTICE_CODES = [
|
|
159
|
+
'cash_receipt_required',
|
|
160
|
+
/** Ig. Lieferung und grenzueberschreitendes Reverse Charge: die Zusammenfassende
|
|
161
|
+
* Meldung ist materielle Voraussetzung (Art. 7 Abs. 1 Z 5 UStG). */
|
|
162
|
+
'recapitulative_statement_due',
|
|
163
|
+
/** Leistung an eine Privatperson im Drittland: der Leistungsort haengt von der
|
|
164
|
+
* Art der Leistung ab — wir nehmen den oesterreichischen Fall an. */
|
|
165
|
+
'place_of_supply_check',
|
|
166
|
+
];
|
|
101
167
|
/**
|
|
102
168
|
* Einheiten einer Position. Die API nimmt nur diese Schluessel an; gedruckt
|
|
103
169
|
* wird das Kuerzel in der Sprache der Rechnung (`RECHNUNG_TEXTE`,
|
|
@@ -274,6 +340,8 @@ exports.POSITION_FELDER = Object.freeze({
|
|
|
274
340
|
quantity: { typ: 'number', pflicht: true, min: 0, exklusivMin: true, max: 1_000_000, nachkomma: 3 },
|
|
275
341
|
/** Einheit aus `INVOICE_UNITS`; ohne Angabe `piece`. */
|
|
276
342
|
unit: { typ: 'enum', pflicht: false, werte: exports.INVOICE_UNITS },
|
|
343
|
+
/** Ware oder Leistung; ohne Angabe `goods`. Entscheidet ueber den Steuerfall. */
|
|
344
|
+
kind: { typ: 'enum', pflicht: false, werte: exports.ITEM_KINDS },
|
|
277
345
|
unitPriceCents: { typ: 'integer', pflicht: true, min: 0, max: 100_000_000 },
|
|
278
346
|
vatRate: { typ: 'enum', pflicht: true, werte: exports.VAT_RATES },
|
|
279
347
|
discountPct: { typ: 'number', pflicht: false, min: 0, max: 100, nachkomma: 2 },
|
|
@@ -291,6 +359,12 @@ exports.PAYMENT_FELDER = Object.freeze({
|
|
|
291
359
|
amountCents: { typ: 'integer', pflicht: false, min: 1, max: 100_000_000 },
|
|
292
360
|
paidAt: datum(),
|
|
293
361
|
reference: text(100),
|
|
362
|
+
/**
|
|
363
|
+
* Die Zahlung erfolgte **vor Ort** beim Unternehmer (Terminal an der Kasse,
|
|
364
|
+
* Zahlung per App am Tresen). Dann ist sie ein Barumsatz. Zu `transfer` passt
|
|
365
|
+
* das nicht — eine Ueberweisung erfolgt nie vor Ort — und wird abgewiesen.
|
|
366
|
+
*/
|
|
367
|
+
onSite: { typ: 'boolean', pflicht: false },
|
|
294
368
|
});
|
|
295
369
|
exports.RECHNUNG_ANFRAGEN = Object.freeze({
|
|
296
370
|
createCustomer: {
|
|
@@ -316,7 +390,14 @@ exports.RECHNUNG_ANFRAGEN = Object.freeze({
|
|
|
316
390
|
issueInvoice: {
|
|
317
391
|
idempotencyKey: idempotencyKey(true),
|
|
318
392
|
customerId: id,
|
|
319
|
-
|
|
393
|
+
/**
|
|
394
|
+
* Optional: der Server leitet den Fall ab. Eine Angabe wird geprueft und
|
|
395
|
+
* muss passen (`tax_scheme_mismatch`) — so faellt eine falsche Zuordnung
|
|
396
|
+
* im Fremdsystem auf, statt eine falsche Rechnung zu erzeugen.
|
|
397
|
+
*/
|
|
398
|
+
taxScheme: { typ: 'enum', pflicht: false, werte: exports.TAX_SCHEMES },
|
|
399
|
+
/** Pflicht bei `domesticReverseCharge`, sonst nicht erlaubt. */
|
|
400
|
+
reverseChargeReason: { typ: 'enum', pflicht: false, werte: Object.keys(exports.REVERSE_CHARGE_REASONS) },
|
|
320
401
|
priceMode: { typ: 'enum', pflicht: true, werte: exports.PRICE_MODES },
|
|
321
402
|
serviceStart: datum(true),
|
|
322
403
|
serviceEnd: datum(),
|
|
@@ -384,6 +465,7 @@ exports.RECHNUNG_ANFRAGEN = Object.freeze({
|
|
|
384
465
|
amountCents: { typ: 'integer', pflicht: false, min: 1, max: 100_000_000 },
|
|
385
466
|
paidAt: datum(),
|
|
386
467
|
reference: text(100),
|
|
468
|
+
onSite: { typ: 'boolean', pflicht: false },
|
|
387
469
|
},
|
|
388
470
|
});
|
|
389
471
|
/** Genau eines dieser Felder muss gesetzt sein (je Aufruf, je Gruppe). */
|
|
@@ -16,4 +16,4 @@ export { istRechnungFehler, rechnungFehlerCode, rechnungFeldFehler, type Rechnun
|
|
|
16
16
|
export { cancelInvoice, createCreditNote, createCustomer, getCustomer, getInvoice, getInvoicePdf, getInvoiceSetupStatus, getInvoiceXml, issueInvoice, listBrands, listInvoices, recordInvoicePayment, searchCustomers, updateCustomer, } from './endpunkte.js';
|
|
17
17
|
export type { Brand, CancelInvoiceRequest, CancelResult, CreditNoteRequest, CreditNoteResult, Customer, CustomerInput, CustomerPage, CustomerSearch, EInvoiceStatus, Invoice, InvoiceDetail, InvoiceItem, InvoiceItemInput, InvoiceListQuery, InvoicePage, InvoiceRecipient, InvoiceSetupGap, InvoiceSetupStatus, InvoiceTotals, InvoiceNotice, InvoicePayment, IssueInvoiceRequest, IssueResult, PaymentInput, RecordPaymentRequest, RecordPaymentResult, } from './typen.js';
|
|
18
18
|
export { RECHNUNG_TEXTE, rechnungText, type RechnungTextSchluessel } from './texte.js';
|
|
19
|
-
export { RECHNUNG_VERTRAG_VERSION, RECHNUNG_AUFRUFE, INVOICE_ERROR_CODES, CREDIT_NOTE_REASONS, TAX_SCHEMES, PRICE_MODES, VAT_RATES, CUSTOMER_TYPES, INVOICE_LIST_STATUS, DOC_TYPES, EINVOICE_FORMATS, INVOICE_LANGUAGES, INVOICE_PAYMENT_METHODS, INVOICE_NOTICE_CODES, INVOICE_UNITS, RECHNUNG_EINHEITEN_CODES, INVOICE_SETUP_REQUIREMENTS, KUNDE_FELDER, POSITION_FELDER, RECHNUNG_ANFRAGEN, RECHNUNG_GENAU_EINS, RECHNUNG_MINDESTENS_EINS, type RechnungAufruf, type InvoiceErrorCode, type CreditNoteReason, type TaxScheme, type PriceMode, type VatRatePercent, type CustomerType, type InvoiceListStatus, type DocType, type EInvoiceFormat, type InvoiceLanguage, type InvoicePaymentMethod, type InvoiceNoticeCode, type InvoiceUnit, type InvoiceSetupRequirement, type Format, type Feld, } from './vertrag.js';
|
|
19
|
+
export { RECHNUNG_VERTRAG_VERSION, RECHNUNG_AUFRUFE, INVOICE_ERROR_CODES, CREDIT_NOTE_REASONS, TAX_SCHEMES, PRICE_MODES, VAT_RATES, CUSTOMER_TYPES, INVOICE_LIST_STATUS, DOC_TYPES, EINVOICE_FORMATS, INVOICE_LANGUAGES, INVOICE_PAYMENT_METHODS, ITEM_KINDS, REVERSE_CHARGE_REASONS, INVOICE_NOTICE_CODES, INVOICE_UNITS, RECHNUNG_EINHEITEN_CODES, INVOICE_SETUP_REQUIREMENTS, KUNDE_FELDER, POSITION_FELDER, RECHNUNG_ANFRAGEN, RECHNUNG_GENAU_EINS, RECHNUNG_MINDESTENS_EINS, type RechnungAufruf, type InvoiceErrorCode, type CreditNoteReason, type TaxScheme, type PriceMode, type VatRatePercent, type CustomerType, type InvoiceListStatus, type DocType, type EInvoiceFormat, type InvoiceLanguage, type InvoicePaymentMethod, type ItemKind, type ReverseChargeReason, type InvoiceNoticeCode, type InvoiceUnit, type InvoiceSetupRequirement, type Format, type Feld, } from './vertrag.js';
|
|
@@ -15,4 +15,4 @@ export { rechnungKeyAuth } from './auth.js';
|
|
|
15
15
|
export { istRechnungFehler, rechnungFehlerCode, rechnungFeldFehler, } from './fehler.js';
|
|
16
16
|
export { cancelInvoice, createCreditNote, createCustomer, getCustomer, getInvoice, getInvoicePdf, getInvoiceSetupStatus, getInvoiceXml, issueInvoice, listBrands, listInvoices, recordInvoicePayment, searchCustomers, updateCustomer, } from './endpunkte.js';
|
|
17
17
|
export { RECHNUNG_TEXTE, rechnungText } from './texte.js';
|
|
18
|
-
export { RECHNUNG_VERTRAG_VERSION, RECHNUNG_AUFRUFE, INVOICE_ERROR_CODES, CREDIT_NOTE_REASONS, TAX_SCHEMES, PRICE_MODES, VAT_RATES, CUSTOMER_TYPES, INVOICE_LIST_STATUS, DOC_TYPES, EINVOICE_FORMATS, INVOICE_LANGUAGES, INVOICE_PAYMENT_METHODS, INVOICE_NOTICE_CODES, INVOICE_UNITS, RECHNUNG_EINHEITEN_CODES, INVOICE_SETUP_REQUIREMENTS, KUNDE_FELDER, POSITION_FELDER, RECHNUNG_ANFRAGEN, RECHNUNG_GENAU_EINS, RECHNUNG_MINDESTENS_EINS, } from './vertrag.js';
|
|
18
|
+
export { RECHNUNG_VERTRAG_VERSION, RECHNUNG_AUFRUFE, INVOICE_ERROR_CODES, CREDIT_NOTE_REASONS, TAX_SCHEMES, PRICE_MODES, VAT_RATES, CUSTOMER_TYPES, INVOICE_LIST_STATUS, DOC_TYPES, EINVOICE_FORMATS, INVOICE_LANGUAGES, INVOICE_PAYMENT_METHODS, ITEM_KINDS, REVERSE_CHARGE_REASONS, INVOICE_NOTICE_CODES, INVOICE_UNITS, RECHNUNG_EINHEITEN_CODES, INVOICE_SETUP_REQUIREMENTS, KUNDE_FELDER, POSITION_FELDER, RECHNUNG_ANFRAGEN, RECHNUNG_GENAU_EINS, RECHNUNG_MINDESTENS_EINS, } from './vertrag.js';
|