@kreiseck/kasseneck-api 0.20.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.
@@ -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; } });
@@ -46,6 +46,20 @@ declare const DE: {
46
46
  readonly 'steuer.reverseCharge.titel': "Steuerschuldnerschaft des Leistungsempfängers. ";
47
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
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.";
49
63
  readonly 'pdf.zahlung.titel': "ZAHLUNGSINFORMATIONEN";
50
64
  readonly 'pdf.zahlung.empfaenger': "Empfänger";
51
65
  readonly 'pdf.zahlung.iban': "IBAN";
@@ -95,6 +109,7 @@ declare const DE: {
95
109
  readonly 'einvoice.befreiung.reverseCharge': "Steuerschuldnerschaft des Leistungsempfängers (Reverse Charge)";
96
110
  readonly 'einvoice.befreiung.kleinunternehmer': "Steuerbefreit — Kleinunternehmer gemäß §6 Abs. 1 Z 27 UStG";
97
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)";
98
113
  readonly 'einvoice.befreiung.ausfuhr': "Steuerfreie Ausfuhrlieferung gemäß §6 Abs. 1 Z 1 UStG";
99
114
  readonly 'einvoice.zahlbarBis': "Zahlbar bis {datum}";
100
115
  readonly 'einheit.piece': "Stk";
@@ -41,6 +41,22 @@ const DE = {
41
41
  // Beide UID-Nummern: bei Reverse Charge § 11 Abs. 1a, bei der ig. Lieferung
42
42
  // Art. 11 Abs. 2 UStG.
43
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.',
44
60
  'pdf.zahlung.titel': 'ZAHLUNGSINFORMATIONEN',
45
61
  'pdf.zahlung.empfaenger': 'Empfänger',
46
62
  'pdf.zahlung.iban': 'IBAN',
@@ -90,6 +106,7 @@ const DE = {
90
106
  'einvoice.befreiung.reverseCharge': 'Steuerschuldnerschaft des Leistungsempfängers (Reverse Charge)',
91
107
  'einvoice.befreiung.kleinunternehmer': 'Steuerbefreit — Kleinunternehmer gemäß §6 Abs. 1 Z 27 UStG',
92
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)',
93
110
  'einvoice.befreiung.ausfuhr': 'Steuerfreie Ausfuhrlieferung gemäß §6 Abs. 1 Z 1 UStG',
94
111
  'einvoice.zahlbarBis': 'Zahlbar bis {datum}',
95
112
  'einheit.piece': 'Stk',
@@ -224,6 +241,20 @@ const EN = {
224
241
  'steuer.reverseCharge.titel': 'Reverse charge – VAT liability of the recipient. ',
225
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.',
226
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.',
227
258
  'pdf.zahlung.titel': 'PAYMENT DETAILS',
228
259
  'pdf.zahlung.empfaenger': 'Payee',
229
260
  'pdf.zahlung.iban': 'IBAN',
@@ -273,6 +304,7 @@ const EN = {
273
304
  'einvoice.befreiung.reverseCharge': 'Reverse charge – VAT liability of the recipient',
274
305
  'einvoice.befreiung.kleinunternehmer': 'VAT exempt — small business pursuant to § 6 (1) no. 27 UStG',
275
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)',
276
308
  'einvoice.befreiung.ausfuhr': 'VAT-exempt export delivery pursuant to § 6 (1) no. 1 UStG',
277
309
  'einvoice.zahlbarBis': 'Payable by {datum}',
278
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
- taxScheme: TaxScheme;
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;
@@ -227,6 +232,8 @@ export interface InvoiceItem {
227
232
  subtitle: string;
228
233
  quantity: number;
229
234
  unit: string;
235
+ /** Ware oder Leistung — Altbestand ohne Angabe zaehlt als `goods`. */
236
+ kind: ItemKind;
230
237
  unitPriceCents: number;
231
238
  vatRate: number;
232
239
  discountPct: number;
@@ -235,6 +242,10 @@ export interface InvoiceDetail extends Invoice {
235
242
  items: InvoiceItem[];
236
243
  customer: InvoiceRecipient | null;
237
244
  taxScheme: TaxScheme;
245
+ /** Nur bei `domesticReverseCharge`. */
246
+ reverseChargeReason: ReverseChargeReason | null;
247
+ /** Land, dessen Steuer die Rechnung traegt; Altbestand `AT`. */
248
+ taxCountry: string;
238
249
  priceMode: PriceMode;
239
250
  serviceStart: string | null;
240
251
  serviceEnd: string | null;
@@ -280,6 +291,13 @@ export interface IssueResult {
280
291
  invoice: Invoice;
281
292
  /** `true`, wenn die Anfrage schon einmal ausgefuehrt wurde und die bestehende Rechnung zurueckkommt. */
282
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[];
283
301
  }
284
302
  export interface CancelResult {
285
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
- export declare const TAX_SCHEMES: readonly ["normal", "smallBusiness", "reverseCharge", "igLieferung", "exportThirdCountry"];
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];
@@ -66,7 +141,7 @@ export type InvoicePaymentMethod = (typeof INVOICE_PAYMENT_METHODS)[number];
66
141
  * Hinweise, die eine erfolgreiche Antwort zusaetzlich tragen kann (`data.notice`).
67
142
  * Sie sind keine Fehler: der Aufruf hat gewirkt, es gibt nur etwas zu wissen.
68
143
  */
69
- 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"];
70
145
  export type InvoiceNoticeCode = (typeof INVOICE_NOTICE_CODES)[number];
71
146
  /**
72
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
- exports.TAX_SCHEMES = ['normal', 'smallBusiness', 'reverseCharge', 'igLieferung', 'exportThirdCountry'];
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'];
@@ -100,7 +155,15 @@ exports.INVOICE_PAYMENT_METHODS = ['transfer', 'card', 'online', 'cash'];
100
155
  * Hinweise, die eine erfolgreiche Antwort zusaetzlich tragen kann (`data.notice`).
101
156
  * Sie sind keine Fehler: der Aufruf hat gewirkt, es gibt nur etwas zu wissen.
102
157
  */
103
- exports.INVOICE_NOTICE_CODES = ['cash_receipt_required'];
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
+ ];
104
167
  /**
105
168
  * Einheiten einer Position. Die API nimmt nur diese Schluessel an; gedruckt
106
169
  * wird das Kuerzel in der Sprache der Rechnung (`RECHNUNG_TEXTE`,
@@ -277,6 +340,8 @@ exports.POSITION_FELDER = Object.freeze({
277
340
  quantity: { typ: 'number', pflicht: true, min: 0, exklusivMin: true, max: 1_000_000, nachkomma: 3 },
278
341
  /** Einheit aus `INVOICE_UNITS`; ohne Angabe `piece`. */
279
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 },
280
345
  unitPriceCents: { typ: 'integer', pflicht: true, min: 0, max: 100_000_000 },
281
346
  vatRate: { typ: 'enum', pflicht: true, werte: exports.VAT_RATES },
282
347
  discountPct: { typ: 'number', pflicht: false, min: 0, max: 100, nachkomma: 2 },
@@ -325,7 +390,14 @@ exports.RECHNUNG_ANFRAGEN = Object.freeze({
325
390
  issueInvoice: {
326
391
  idempotencyKey: idempotencyKey(true),
327
392
  customerId: id,
328
- taxScheme: { typ: 'enum', pflicht: true, werte: exports.TAX_SCHEMES },
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) },
329
401
  priceMode: { typ: 'enum', pflicht: true, werte: exports.PRICE_MODES },
330
402
  serviceStart: datum(true),
331
403
  serviceEnd: datum(),
@@ -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';
@@ -46,6 +46,20 @@ declare const DE: {
46
46
  readonly 'steuer.reverseCharge.titel': "Steuerschuldnerschaft des Leistungsempfängers. ";
47
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
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.";
49
63
  readonly 'pdf.zahlung.titel': "ZAHLUNGSINFORMATIONEN";
50
64
  readonly 'pdf.zahlung.empfaenger': "Empfänger";
51
65
  readonly 'pdf.zahlung.iban': "IBAN";
@@ -95,6 +109,7 @@ declare const DE: {
95
109
  readonly 'einvoice.befreiung.reverseCharge': "Steuerschuldnerschaft des Leistungsempfängers (Reverse Charge)";
96
110
  readonly 'einvoice.befreiung.kleinunternehmer': "Steuerbefreit — Kleinunternehmer gemäß §6 Abs. 1 Z 27 UStG";
97
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)";
98
113
  readonly 'einvoice.befreiung.ausfuhr': "Steuerfreie Ausfuhrlieferung gemäß §6 Abs. 1 Z 1 UStG";
99
114
  readonly 'einvoice.zahlbarBis': "Zahlbar bis {datum}";
100
115
  readonly 'einheit.piece': "Stk";
@@ -37,6 +37,22 @@ const DE = {
37
37
  // Beide UID-Nummern: bei Reverse Charge § 11 Abs. 1a, bei der ig. Lieferung
38
38
  // Art. 11 Abs. 2 UStG.
39
39
  'steuer.uidZeile': 'UID Leistungserbringer: {verkaeufer} · UID Leistungsempfänger: {kaeufer}',
40
+ // Inlands-Reverse-Charge: je Grund ein Satz, der die Gesetzesstelle nennt —
41
+ // sie traegt den Hinweis nach § 11 Abs. 1a UStG.
42
+ 'steuer.rcGrund.construction': 'Bauleistung gemäß § 19 Abs. 1a UStG.',
43
+ 'steuer.rcGrund.scrap': 'Schrott und Abfallstoffe gemäß Schrott-Umsatzsteuerverordnung (BGBl. II Nr. 129/2007).',
44
+ 'steuer.rcGrund.mobile_devices': 'Mobilfunkgeräte bzw. integrierte Schaltkreise gemäß § 19 Abs. 1e lit. b UStG.',
45
+ 'steuer.rcGrund.it_devices': 'Laptops, Tablets bzw. Videospielkonsolen gemäß § 2 Z 1 Umsatzsteuerbetrugsbekämpfungsverordnung (BGBl. II Nr. 369/2013).',
46
+ 'steuer.rcGrund.metals': 'Metalle gemäß § 2 Z 4 Umsatzsteuerbetrugsbekämpfungsverordnung.',
47
+ 'steuer.rcGrund.emission_certificates': 'Treibhausgasemissionszertifikate gemäß § 19 Abs. 1e lit. a UStG.',
48
+ 'steuer.rcGrund.gas_electricity': 'Lieferung von Gas oder Elektrizität an einen Wiederverkäufer gemäß § 2 Z 2 Umsatzsteuerbetrugsbekämpfungsverordnung.',
49
+ 'steuer.rcGrund.energy_certificates': 'Gas- und Elektrizitätszertifikate gemäß § 2 Z 3 Umsatzsteuerbetrugsbekämpfungsverordnung.',
50
+ 'steuer.rcGrund.investment_gold': 'Steuerpflichtige Lieferung von Anlagegold gemäß § 2 Z 5 Umsatzsteuerbetrugsbekämpfungsverordnung.',
51
+ 'steuer.rcGrund.security_transfer': 'Lieferung von Sicherungs- bzw. Vorbehaltseigentum gemäß § 19 Abs. 1b UStG.',
52
+ 'steuer.rcGrund.foreign_supplier': 'Leistung eines nicht im Inland ansässigen Unternehmers gemäß § 19 Abs. 1 zweiter Satz UStG.',
53
+ 'steuer.domestic.text': 'Die Umsatzsteuer schuldet und entrichtet der Leistungsempfänger. Die Leistung ist nicht steuerfrei.',
54
+ 'steuer.outsideScope.titel': 'Nicht steuerbarer Umsatz. ',
55
+ 'steuer.outsideScope.text': 'Der Leistungsort liegt gemäß § 3a Abs. 6 UStG im Ansässigkeitsstaat des Leistungsempfängers; in Österreich fällt keine Umsatzsteuer an.',
40
56
  'pdf.zahlung.titel': 'ZAHLUNGSINFORMATIONEN',
41
57
  'pdf.zahlung.empfaenger': 'Empfänger',
42
58
  'pdf.zahlung.iban': 'IBAN',
@@ -86,6 +102,7 @@ const DE = {
86
102
  'einvoice.befreiung.reverseCharge': 'Steuerschuldnerschaft des Leistungsempfängers (Reverse Charge)',
87
103
  'einvoice.befreiung.kleinunternehmer': 'Steuerbefreit — Kleinunternehmer gemäß §6 Abs. 1 Z 27 UStG',
88
104
  'einvoice.befreiung.igLieferung': 'Steuerfreie innergemeinschaftliche Lieferung gemäß Art. 6 Abs. 1 UStG',
105
+ 'einvoice.befreiung.outsideScope': 'Nicht steuerbarer Umsatz — Leistungsort im Ausland (§ 3a Abs. 6 UStG)',
89
106
  'einvoice.befreiung.ausfuhr': 'Steuerfreie Ausfuhrlieferung gemäß §6 Abs. 1 Z 1 UStG',
90
107
  'einvoice.zahlbarBis': 'Zahlbar bis {datum}',
91
108
  'einheit.piece': 'Stk',
@@ -220,6 +237,20 @@ const EN = {
220
237
  'steuer.reverseCharge.titel': 'Reverse charge – VAT liability of the recipient. ',
221
238
  '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.',
222
239
  'steuer.uidZeile': 'VAT ID supplier: {verkaeufer} · VAT ID recipient: {kaeufer}',
240
+ 'steuer.rcGrund.construction': 'Construction work pursuant to § 19 (1a) UStG.',
241
+ 'steuer.rcGrund.scrap': 'Scrap and waste materials pursuant to the Austrian scrap VAT regulation (BGBl. II No. 129/2007).',
242
+ 'steuer.rcGrund.mobile_devices': 'Mobile phones or integrated circuits pursuant to § 19 (1e) (b) UStG.',
243
+ '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).',
244
+ 'steuer.rcGrund.metals': 'Metals pursuant to § 2 no. 4 of the Austrian VAT anti-fraud regulation.',
245
+ 'steuer.rcGrund.emission_certificates': 'Greenhouse gas emission allowances pursuant to § 19 (1e) (a) UStG.',
246
+ 'steuer.rcGrund.gas_electricity': 'Supply of gas or electricity to a reseller pursuant to § 2 no. 2 of the Austrian VAT anti-fraud regulation.',
247
+ 'steuer.rcGrund.energy_certificates': 'Gas and electricity certificates pursuant to § 2 no. 3 of the Austrian VAT anti-fraud regulation.',
248
+ 'steuer.rcGrund.investment_gold': 'Taxable supply of investment gold pursuant to § 2 no. 5 of the Austrian VAT anti-fraud regulation.',
249
+ 'steuer.rcGrund.security_transfer': 'Supply of goods under a security or retention of title arrangement pursuant to § 19 (1b) UStG.',
250
+ 'steuer.rcGrund.foreign_supplier': 'Supply by a business not established in Austria pursuant to § 19 (1) second sentence UStG.',
251
+ 'steuer.domestic.text': 'The recipient owes and accounts for the VAT. The supply is not VAT-exempt.',
252
+ 'steuer.outsideScope.titel': 'Outside the scope of Austrian VAT. ',
253
+ 'steuer.outsideScope.text': 'The place of supply is the recipient\'s country pursuant to § 3a (6) UStG; no Austrian VAT applies.',
223
254
  'pdf.zahlung.titel': 'PAYMENT DETAILS',
224
255
  'pdf.zahlung.empfaenger': 'Payee',
225
256
  'pdf.zahlung.iban': 'IBAN',
@@ -269,6 +300,7 @@ const EN = {
269
300
  'einvoice.befreiung.reverseCharge': 'Reverse charge – VAT liability of the recipient',
270
301
  'einvoice.befreiung.kleinunternehmer': 'VAT exempt — small business pursuant to § 6 (1) no. 27 UStG',
271
302
  'einvoice.befreiung.igLieferung': 'VAT-exempt intra-Community supply pursuant to Art. 6 (1) UStG',
303
+ 'einvoice.befreiung.outsideScope': 'Outside the scope of VAT — place of supply abroad (§ 3a (6) UStG)',
272
304
  'einvoice.befreiung.ausfuhr': 'VAT-exempt export delivery pursuant to § 6 (1) no. 1 UStG',
273
305
  'einvoice.zahlbarBis': 'Payable by {datum}',
274
306
  '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
- taxScheme: TaxScheme;
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;
@@ -227,6 +232,8 @@ export interface InvoiceItem {
227
232
  subtitle: string;
228
233
  quantity: number;
229
234
  unit: string;
235
+ /** Ware oder Leistung — Altbestand ohne Angabe zaehlt als `goods`. */
236
+ kind: ItemKind;
230
237
  unitPriceCents: number;
231
238
  vatRate: number;
232
239
  discountPct: number;
@@ -235,6 +242,10 @@ export interface InvoiceDetail extends Invoice {
235
242
  items: InvoiceItem[];
236
243
  customer: InvoiceRecipient | null;
237
244
  taxScheme: TaxScheme;
245
+ /** Nur bei `domesticReverseCharge`. */
246
+ reverseChargeReason: ReverseChargeReason | null;
247
+ /** Land, dessen Steuer die Rechnung traegt; Altbestand `AT`. */
248
+ taxCountry: string;
238
249
  priceMode: PriceMode;
239
250
  serviceStart: string | null;
240
251
  serviceEnd: string | null;
@@ -280,6 +291,13 @@ export interface IssueResult {
280
291
  invoice: Invoice;
281
292
  /** `true`, wenn die Anfrage schon einmal ausgefuehrt wurde und die bestehende Rechnung zurueckkommt. */
282
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[];
283
301
  }
284
302
  export interface CancelResult {
285
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
- export declare const TAX_SCHEMES: readonly ["normal", "smallBusiness", "reverseCharge", "igLieferung", "exportThirdCountry"];
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];
@@ -66,7 +141,7 @@ export type InvoicePaymentMethod = (typeof INVOICE_PAYMENT_METHODS)[number];
66
141
  * Hinweise, die eine erfolgreiche Antwort zusaetzlich tragen kann (`data.notice`).
67
142
  * Sie sind keine Fehler: der Aufruf hat gewirkt, es gibt nur etwas zu wissen.
68
143
  */
69
- 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"];
70
145
  export type InvoiceNoticeCode = (typeof INVOICE_NOTICE_CODES)[number];
71
146
  /**
72
147
  * Einheiten einer Position. Die API nimmt nur diese Schluessel an; gedruckt
@@ -60,6 +60,12 @@ export const INVOICE_ERROR_CODES = [
60
60
  'brand_not_found',
61
61
  'not_payable',
62
62
  'payment_exceeds_invoice',
63
+ 'tax_scheme_mismatch',
64
+ 'vat_rate_not_in_country',
65
+ 'reverse_charge_reason_required',
66
+ 'reverse_charge_threshold',
67
+ 'mixed_supply_not_allowed',
68
+ 'oss_not_enabled',
63
69
  ];
64
70
  /** Gruende einer Gutschrift. Der Server druckt den deutschen Anzeigetext. */
65
71
  export const CREDIT_NOTE_REASONS = [
@@ -69,7 +75,56 @@ export const CREDIT_NOTE_REASONS = [
69
75
  'incorrect_invoice',
70
76
  'other',
71
77
  ];
72
- export const TAX_SCHEMES = ['normal', 'smallBusiness', 'reverseCharge', 'igLieferung', 'exportThirdCountry'];
78
+ /**
79
+ * Der Steuerfall einer Rechnung. Er wird vom Server **abgeleitet** (Kundenland,
80
+ * Kundenart, UID, Ware oder Leistung); eine mitgeschickte Angabe muss dazu
81
+ * passen, sonst `tax_scheme_mismatch`. Neue Faelle stehen hinten, damit
82
+ * gespeicherte Reihenfolgen gueltig bleiben.
83
+ *
84
+ * - `normal` oesterreichische Umsatzsteuer
85
+ * - `smallBusiness` Kleinunternehmer (§ 6 Abs. 1 Z 27 UStG)
86
+ * - `reverseCharge` Leistung an ein Unternehmen in der EU (Art. 196 MwSt-RL)
87
+ * - `igLieferung` Ware an ein Unternehmen in der EU (Art. 6 Abs. 1 UStG)
88
+ * - `exportThirdCountry` Ware ins Drittland (§ 6 Abs. 1 Z 1 UStG)
89
+ * - `domesticReverseCharge` Uebergang der Steuerschuld im Inland, Grund aus `REVERSE_CHARGE_REASONS`
90
+ * - `oss` B2C in der EU ueber den One-Stop-Shop, Satz des Ziellandes
91
+ * - `outsideScope` Leistung an ein Drittlandsunternehmen — in Oesterreich nicht steuerbar
92
+ */
93
+ export const TAX_SCHEMES = [
94
+ 'normal',
95
+ 'smallBusiness',
96
+ 'reverseCharge',
97
+ 'igLieferung',
98
+ 'exportThirdCountry',
99
+ 'domesticReverseCharge',
100
+ 'oss',
101
+ 'outsideScope',
102
+ ];
103
+ /**
104
+ * Gruende fuer den Uebergang der Steuerschuld **im Inland**. Ohne Grund gibt es
105
+ * kein `domesticReverseCharge`: die Bedingungen sind je Fall verschieden, und
106
+ * keine davon laesst sich aus Betrag und Land erraten.
107
+ *
108
+ * `schwelleCents` ist das Entgelt, ab dem der Fall greift — maßgeblich ist das
109
+ * **in der Rechnung ausgewiesene** Entgelt, nicht der Einzelpreis; ein
110
+ * einheitlicher Liefervorgang darf dafuer nicht auf mehrere Rechnungen
111
+ * aufgeteilt werden (UStR Rz 2605d).
112
+ */
113
+ export const REVERSE_CHARGE_REASONS = Object.freeze({
114
+ construction: { stelle: '§ 19 Abs. 1a UStG', schwelleCents: null },
115
+ scrap: { stelle: 'Schrott-UStV, BGBl. II Nr. 129/2007', schwelleCents: null },
116
+ mobile_devices: { stelle: '§ 19 Abs. 1e lit. b UStG', schwelleCents: 500_000 },
117
+ it_devices: { stelle: '§ 2 Z 1 UStBBKV, BGBl. II Nr. 369/2013', schwelleCents: 500_000 },
118
+ metals: { stelle: '§ 2 Z 4 UStBBKV', schwelleCents: null },
119
+ emission_certificates: { stelle: '§ 19 Abs. 1e lit. a UStG', schwelleCents: null },
120
+ gas_electricity: { stelle: '§ 2 Z 2 UStBBKV', schwelleCents: null },
121
+ energy_certificates: { stelle: '§ 2 Z 3 UStBBKV', schwelleCents: null },
122
+ investment_gold: { stelle: '§ 2 Z 5 UStBBKV', schwelleCents: null },
123
+ security_transfer: { stelle: '§ 19 Abs. 1b UStG', schwelleCents: null },
124
+ foreign_supplier: { stelle: '§ 19 Abs. 1 zweiter Satz UStG', schwelleCents: null },
125
+ });
126
+ /** Ware oder Leistung — ohne das laesst sich ig. Lieferung nicht von Reverse Charge trennen. */
127
+ export const ITEM_KINDS = ['goods', 'service'];
73
128
  export const PRICE_MODES = ['net', 'gross'];
74
129
  export const VAT_RATES = [0, 10, 13, 20];
75
130
  export const CUSTOMER_TYPES = ['private', 'company'];
@@ -97,7 +152,15 @@ export const INVOICE_PAYMENT_METHODS = ['transfer', 'card', 'online', 'cash'];
97
152
  * Hinweise, die eine erfolgreiche Antwort zusaetzlich tragen kann (`data.notice`).
98
153
  * Sie sind keine Fehler: der Aufruf hat gewirkt, es gibt nur etwas zu wissen.
99
154
  */
100
- export const INVOICE_NOTICE_CODES = ['cash_receipt_required'];
155
+ export const INVOICE_NOTICE_CODES = [
156
+ 'cash_receipt_required',
157
+ /** Ig. Lieferung und grenzueberschreitendes Reverse Charge: die Zusammenfassende
158
+ * Meldung ist materielle Voraussetzung (Art. 7 Abs. 1 Z 5 UStG). */
159
+ 'recapitulative_statement_due',
160
+ /** Leistung an eine Privatperson im Drittland: der Leistungsort haengt von der
161
+ * Art der Leistung ab — wir nehmen den oesterreichischen Fall an. */
162
+ 'place_of_supply_check',
163
+ ];
101
164
  /**
102
165
  * Einheiten einer Position. Die API nimmt nur diese Schluessel an; gedruckt
103
166
  * wird das Kuerzel in der Sprache der Rechnung (`RECHNUNG_TEXTE`,
@@ -274,6 +337,8 @@ export const POSITION_FELDER = Object.freeze({
274
337
  quantity: { typ: 'number', pflicht: true, min: 0, exklusivMin: true, max: 1_000_000, nachkomma: 3 },
275
338
  /** Einheit aus `INVOICE_UNITS`; ohne Angabe `piece`. */
276
339
  unit: { typ: 'enum', pflicht: false, werte: INVOICE_UNITS },
340
+ /** Ware oder Leistung; ohne Angabe `goods`. Entscheidet ueber den Steuerfall. */
341
+ kind: { typ: 'enum', pflicht: false, werte: ITEM_KINDS },
277
342
  unitPriceCents: { typ: 'integer', pflicht: true, min: 0, max: 100_000_000 },
278
343
  vatRate: { typ: 'enum', pflicht: true, werte: VAT_RATES },
279
344
  discountPct: { typ: 'number', pflicht: false, min: 0, max: 100, nachkomma: 2 },
@@ -322,7 +387,14 @@ export const RECHNUNG_ANFRAGEN = Object.freeze({
322
387
  issueInvoice: {
323
388
  idempotencyKey: idempotencyKey(true),
324
389
  customerId: id,
325
- taxScheme: { typ: 'enum', pflicht: true, werte: TAX_SCHEMES },
390
+ /**
391
+ * Optional: der Server leitet den Fall ab. Eine Angabe wird geprueft und
392
+ * muss passen (`tax_scheme_mismatch`) — so faellt eine falsche Zuordnung
393
+ * im Fremdsystem auf, statt eine falsche Rechnung zu erzeugen.
394
+ */
395
+ taxScheme: { typ: 'enum', pflicht: false, werte: TAX_SCHEMES },
396
+ /** Pflicht bei `domesticReverseCharge`, sonst nicht erlaubt. */
397
+ reverseChargeReason: { typ: 'enum', pflicht: false, werte: Object.keys(REVERSE_CHARGE_REASONS) },
326
398
  priceMode: { typ: 'enum', pflicht: true, werte: PRICE_MODES },
327
399
  serviceStart: datum(true),
328
400
  serviceEnd: datum(),
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.20.0",
2
+ "version": "0.21.0",
3
3
  "gemessenAn": {
4
4
  "tid": "3600335",
5
5
  "hpsVersion": "1.10.0",
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.20.0",
2
+ "version": "0.21.0",
3
3
  "meldungen": {
4
4
  "netz.keine_verbindung": {
5
5
  "text": "Keine Verbindung zum Server. Bitte die Internetverbindung prüfen und erneut versuchen."
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.20.0",
2
+ "version": "0.21.0",
3
3
  "aufrufe": [
4
4
  "activateCashregister",
5
5
  "cancelInvoice",
@@ -404,7 +404,13 @@
404
404
  "language_not_allowed",
405
405
  "brand_not_found",
406
406
  "not_payable",
407
- "payment_exceeds_invoice"
407
+ "payment_exceeds_invoice",
408
+ "tax_scheme_mismatch",
409
+ "vat_rate_not_in_country",
410
+ "reverse_charge_reason_required",
411
+ "reverse_charge_threshold",
412
+ "mixed_supply_not_allowed",
413
+ "oss_not_enabled"
408
414
  ],
409
415
  "invoiceLanguages": [
410
416
  "de",
@@ -418,7 +424,9 @@
418
424
  "overdue"
419
425
  ],
420
426
  "invoiceNoticeCodes": [
421
- "cash_receipt_required"
427
+ "cash_receipt_required",
428
+ "recapitulative_statement_due",
429
+ "place_of_supply_check"
422
430
  ],
423
431
  "invoicePaymentMethods": [
424
432
  "transfer",
@@ -487,6 +495,10 @@
487
495
  "bag",
488
496
  "pallet"
489
497
  ],
498
+ "itemKinds": [
499
+ "goods",
500
+ "service"
501
+ ],
490
502
  "priceModes": [
491
503
  "net",
492
504
  "gross"
@@ -512,7 +524,10 @@
512
524
  "smallBusiness",
513
525
  "reverseCharge",
514
526
  "igLieferung",
515
- "exportThirdCountry"
527
+ "exportThirdCountry",
528
+ "domesticReverseCharge",
529
+ "oss",
530
+ "outsideScope"
516
531
  ],
517
532
  "vatRates": [
518
533
  0,
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "title": "Kasseneck Rechnungs-API",
4
4
  "version": 1,
5
- "paket": "0.20.0",
5
+ "paket": "0.21.0",
6
6
  "aufrufe": {
7
7
  "createCustomer": {
8
8
  "anfrage": {
@@ -291,7 +291,25 @@
291
291
  "smallBusiness",
292
292
  "reverseCharge",
293
293
  "igLieferung",
294
- "exportThirdCountry"
294
+ "exportThirdCountry",
295
+ "domesticReverseCharge",
296
+ "oss",
297
+ "outsideScope"
298
+ ]
299
+ },
300
+ "reverseChargeReason": {
301
+ "enum": [
302
+ "construction",
303
+ "scrap",
304
+ "mobile_devices",
305
+ "it_devices",
306
+ "metals",
307
+ "emission_certificates",
308
+ "gas_electricity",
309
+ "energy_certificates",
310
+ "investment_gold",
311
+ "security_transfer",
312
+ "foreign_supplier"
295
313
  ]
296
314
  },
297
315
  "priceMode": {
@@ -414,6 +432,12 @@
414
432
  "pallet"
415
433
  ]
416
434
  },
435
+ "kind": {
436
+ "enum": [
437
+ "goods",
438
+ "service"
439
+ ]
440
+ },
417
441
  "unitPriceCents": {
418
442
  "type": "integer",
419
443
  "minimum": 0,
@@ -503,7 +527,6 @@
503
527
  },
504
528
  "required": [
505
529
  "idempotencyKey",
506
- "taxScheme",
507
530
  "priceMode",
508
531
  "serviceStart",
509
532
  "items"
@@ -649,6 +672,12 @@
649
672
  "pallet"
650
673
  ]
651
674
  },
675
+ "kind": {
676
+ "enum": [
677
+ "goods",
678
+ "service"
679
+ ]
680
+ },
652
681
  "unitPriceCents": {
653
682
  "type": "integer",
654
683
  "minimum": 0,
@@ -891,7 +920,13 @@
891
920
  "language_not_allowed",
892
921
  "brand_not_found",
893
922
  "not_payable",
894
- "payment_exceeds_invoice"
923
+ "payment_exceeds_invoice",
924
+ "tax_scheme_mismatch",
925
+ "vat_rate_not_in_country",
926
+ "reverse_charge_reason_required",
927
+ "reverse_charge_threshold",
928
+ "mixed_supply_not_allowed",
929
+ "oss_not_enabled"
895
930
  ],
896
931
  "gruende": [
897
932
  "cancellation",
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.20.0",
2
+ "version": "0.21.0",
3
3
  "sprachen": [
4
4
  "de",
5
5
  "en"
@@ -38,6 +38,20 @@
38
38
  "steuer.reverseCharge.titel": "Steuerschuldnerschaft des Leistungsempfängers. ",
39
39
  "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.",
40
40
  "steuer.uidZeile": "UID Leistungserbringer: {verkaeufer} · UID Leistungsempfänger: {kaeufer}",
41
+ "steuer.rcGrund.construction": "Bauleistung gemäß § 19 Abs. 1a UStG.",
42
+ "steuer.rcGrund.scrap": "Schrott und Abfallstoffe gemäß Schrott-Umsatzsteuerverordnung (BGBl. II Nr. 129/2007).",
43
+ "steuer.rcGrund.mobile_devices": "Mobilfunkgeräte bzw. integrierte Schaltkreise gemäß § 19 Abs. 1e lit. b UStG.",
44
+ "steuer.rcGrund.it_devices": "Laptops, Tablets bzw. Videospielkonsolen gemäß § 2 Z 1 Umsatzsteuerbetrugsbekämpfungsverordnung (BGBl. II Nr. 369/2013).",
45
+ "steuer.rcGrund.metals": "Metalle gemäß § 2 Z 4 Umsatzsteuerbetrugsbekämpfungsverordnung.",
46
+ "steuer.rcGrund.emission_certificates": "Treibhausgasemissionszertifikate gemäß § 19 Abs. 1e lit. a UStG.",
47
+ "steuer.rcGrund.gas_electricity": "Lieferung von Gas oder Elektrizität an einen Wiederverkäufer gemäß § 2 Z 2 Umsatzsteuerbetrugsbekämpfungsverordnung.",
48
+ "steuer.rcGrund.energy_certificates": "Gas- und Elektrizitätszertifikate gemäß § 2 Z 3 Umsatzsteuerbetrugsbekämpfungsverordnung.",
49
+ "steuer.rcGrund.investment_gold": "Steuerpflichtige Lieferung von Anlagegold gemäß § 2 Z 5 Umsatzsteuerbetrugsbekämpfungsverordnung.",
50
+ "steuer.rcGrund.security_transfer": "Lieferung von Sicherungs- bzw. Vorbehaltseigentum gemäß § 19 Abs. 1b UStG.",
51
+ "steuer.rcGrund.foreign_supplier": "Leistung eines nicht im Inland ansässigen Unternehmers gemäß § 19 Abs. 1 zweiter Satz UStG.",
52
+ "steuer.domestic.text": "Die Umsatzsteuer schuldet und entrichtet der Leistungsempfänger. Die Leistung ist nicht steuerfrei.",
53
+ "steuer.outsideScope.titel": "Nicht steuerbarer Umsatz. ",
54
+ "steuer.outsideScope.text": "Der Leistungsort liegt gemäß § 3a Abs. 6 UStG im Ansässigkeitsstaat des Leistungsempfängers; in Österreich fällt keine Umsatzsteuer an.",
41
55
  "pdf.zahlung.titel": "ZAHLUNGSINFORMATIONEN",
42
56
  "pdf.zahlung.empfaenger": "Empfänger",
43
57
  "pdf.zahlung.iban": "IBAN",
@@ -87,6 +101,7 @@
87
101
  "einvoice.befreiung.reverseCharge": "Steuerschuldnerschaft des Leistungsempfängers (Reverse Charge)",
88
102
  "einvoice.befreiung.kleinunternehmer": "Steuerbefreit — Kleinunternehmer gemäß §6 Abs. 1 Z 27 UStG",
89
103
  "einvoice.befreiung.igLieferung": "Steuerfreie innergemeinschaftliche Lieferung gemäß Art. 6 Abs. 1 UStG",
104
+ "einvoice.befreiung.outsideScope": "Nicht steuerbarer Umsatz — Leistungsort im Ausland (§ 3a Abs. 6 UStG)",
90
105
  "einvoice.befreiung.ausfuhr": "Steuerfreie Ausfuhrlieferung gemäß §6 Abs. 1 Z 1 UStG",
91
106
  "einvoice.zahlbarBis": "Zahlbar bis {datum}",
92
107
  "einheit.piece": "Stk",
@@ -221,6 +236,20 @@
221
236
  "steuer.reverseCharge.titel": "Reverse charge – VAT liability of the recipient. ",
222
237
  "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.",
223
238
  "steuer.uidZeile": "VAT ID supplier: {verkaeufer} · VAT ID recipient: {kaeufer}",
239
+ "steuer.rcGrund.construction": "Construction work pursuant to § 19 (1a) UStG.",
240
+ "steuer.rcGrund.scrap": "Scrap and waste materials pursuant to the Austrian scrap VAT regulation (BGBl. II No. 129/2007).",
241
+ "steuer.rcGrund.mobile_devices": "Mobile phones or integrated circuits pursuant to § 19 (1e) (b) UStG.",
242
+ "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).",
243
+ "steuer.rcGrund.metals": "Metals pursuant to § 2 no. 4 of the Austrian VAT anti-fraud regulation.",
244
+ "steuer.rcGrund.emission_certificates": "Greenhouse gas emission allowances pursuant to § 19 (1e) (a) UStG.",
245
+ "steuer.rcGrund.gas_electricity": "Supply of gas or electricity to a reseller pursuant to § 2 no. 2 of the Austrian VAT anti-fraud regulation.",
246
+ "steuer.rcGrund.energy_certificates": "Gas and electricity certificates pursuant to § 2 no. 3 of the Austrian VAT anti-fraud regulation.",
247
+ "steuer.rcGrund.investment_gold": "Taxable supply of investment gold pursuant to § 2 no. 5 of the Austrian VAT anti-fraud regulation.",
248
+ "steuer.rcGrund.security_transfer": "Supply of goods under a security or retention of title arrangement pursuant to § 19 (1b) UStG.",
249
+ "steuer.rcGrund.foreign_supplier": "Supply by a business not established in Austria pursuant to § 19 (1) second sentence UStG.",
250
+ "steuer.domestic.text": "The recipient owes and accounts for the VAT. The supply is not VAT-exempt.",
251
+ "steuer.outsideScope.titel": "Outside the scope of Austrian VAT. ",
252
+ "steuer.outsideScope.text": "The place of supply is the recipient's country pursuant to § 3a (6) UStG; no Austrian VAT applies.",
224
253
  "pdf.zahlung.titel": "PAYMENT DETAILS",
225
254
  "pdf.zahlung.empfaenger": "Payee",
226
255
  "pdf.zahlung.iban": "IBAN",
@@ -270,6 +299,7 @@
270
299
  "einvoice.befreiung.reverseCharge": "Reverse charge – VAT liability of the recipient",
271
300
  "einvoice.befreiung.kleinunternehmer": "VAT exempt — small business pursuant to § 6 (1) no. 27 UStG",
272
301
  "einvoice.befreiung.igLieferung": "VAT-exempt intra-Community supply pursuant to Art. 6 (1) UStG",
302
+ "einvoice.befreiung.outsideScope": "Outside the scope of VAT — place of supply abroad (§ 3a (6) UStG)",
273
303
  "einvoice.befreiung.ausfuhr": "VAT-exempt export delivery pursuant to § 6 (1) no. 1 UStG",
274
304
  "einvoice.zahlbarBis": "Payable by {datum}",
275
305
  "einheit.piece": "pcs",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kreiseck/kasseneck-api",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "description": "RKSV-Registrierkasse fuer JavaScript und TypeScript: signierte Belege, Storno, Kartenzahlung, Bondruck. Austrian fiscal cash register (RKSV) API client.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Kreiseck",