@kreiseck/kasseneck-api 0.19.0 → 0.20.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 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. Bei `method: 'cash'` wird die Zahlung gebucht
549
- und die Antwort trägt zusätzlich `notice.code = 'cash_receipt_required'`: eine
550
- Barzahlung ist ein Barumsatz und braucht einen Beleg (§ 132a BAO), bei
551
- Registrierkassenpflicht über die Kasse — der Vermerk hier ersetzt ihn nicht.
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
@@ -40,11 +40,12 @@ 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 (Art. 6 Abs. 1 UStG).";
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': "Steuerfreie Leistung – Reverse Charge. ";
46
- readonly 'steuer.reverseCharge.text': "Übergang der Steuerschuldnerschaft auf den Leistungsempfänger gem. Art. 196 MwSt-RL 2006/112/EG (innergemeinschaftliche Leistung). Die Umsatzsteuer ist vom Leistungsempfänger im Bestimmungsland abzuführen.";
47
- readonly 'steuer.reverseCharge.uid': "UID Leistungserbringer: {verkaeufer} · UID Leistungsempfänger: {kaeufer}";
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}";
48
49
  readonly 'pdf.zahlung.titel': "ZAHLUNGSINFORMATIONEN";
49
50
  readonly 'pdf.zahlung.empfaenger': "Empfänger";
50
51
  readonly 'pdf.zahlung.iban': "IBAN";
@@ -29,11 +29,18 @@ 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 (Art. 6 Abs. 1 UStG).',
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
- 'steuer.reverseCharge.titel': 'Steuerfreie Leistung – Reverse Charge. ',
35
- 'steuer.reverseCharge.text': 'Übergang der Steuerschuldnerschaft auf den Leistungsempfänger gem. Art. 196 MwSt-RL 2006/112/EG (innergemeinschaftliche Leistung). Die Umsatzsteuer ist vom Leistungsempfänger im Bestimmungsland abzuführen.',
36
- 'steuer.reverseCharge.uid': 'UID Leistungserbringer: {verkaeufer} · UID Leistungsempfänger: {kaeufer}',
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}',
37
44
  'pdf.zahlung.titel': 'ZAHLUNGSINFORMATIONEN',
38
45
  'pdf.zahlung.empfaenger': 'Empfänger',
39
46
  'pdf.zahlung.iban': 'IBAN',
@@ -211,11 +218,12 @@ const EN = {
211
218
  'pdf.summe.gesamt.rechnung': 'Total',
212
219
  'pdf.summe.gesamt.gutschrift': 'Credit total',
213
220
  'steuer.kleinunternehmer': 'No VAT charged pursuant to § 6 (1) no. 27 UStG (small business exemption).',
214
- 'steuer.igLieferung': 'VAT-exempt intra-Community supply (Art. 6 (1) UStG).',
221
+ 'steuer.igLieferung.titel': 'VAT-exempt intra-Community supply. ',
222
+ '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
223
  'steuer.ausfuhr': 'VAT-exempt export delivery (§ 6 (1) no. 1 UStG).',
216
- 'steuer.reverseCharge.titel': 'VAT-exempt service – reverse charge. ',
217
- 'steuer.reverseCharge.text': 'VAT liability transferred to the recipient pursuant to Art. 196 of VAT Directive 2006/112/EC (intra-Community service). VAT is to be accounted for by the recipient in the country of destination.',
218
- 'steuer.reverseCharge.uid': 'VAT ID supplier: {verkaeufer} · VAT ID recipient: {kaeufer}',
224
+ 'steuer.reverseCharge.titel': 'Reverse charge – VAT liability of the recipient. ',
225
+ '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
+ 'steuer.uidZeile': 'VAT ID supplier: {verkaeufer} · VAT ID recipient: {kaeufer}',
219
227
  'pdf.zahlung.titel': 'PAYMENT DETAILS',
220
228
  'pdf.zahlung.empfaenger': 'Payee',
221
229
  'pdf.zahlung.iban': 'IBAN',
@@ -118,6 +118,13 @@ export interface PaymentInput {
118
118
  paidAt?: string;
119
119
  /** Zahlungskennung des Fremdsystems — gespeichert, aber nicht gedruckt. */
120
120
  reference?: string;
121
+ /**
122
+ * Die Zahlung erfolgte vor Ort beim Unternehmer (Terminal an der Kasse).
123
+ * Dann ist sie ein Barumsatz — auch mit Karte (§ 131b Abs. 1 Z 3 UStG) — und
124
+ * die Antwort traegt den Hinweis `cash_receipt_required`. Zu `transfer`
125
+ * passt das Kennzeichen nicht und wird abgewiesen.
126
+ */
127
+ onSite?: boolean;
121
128
  }
122
129
  export interface RecordPaymentRequest extends PaymentInput {
123
130
  /** Pflicht: ohne ihn bucht eine Wiederholung eine zweite Zahlung. */
@@ -52,10 +52,13 @@ export type EInvoiceFormat = (typeof EINVOICE_FORMATS)[number];
52
52
  export declare const INVOICE_LANGUAGES: readonly ["de", "en"];
53
53
  export type InvoiceLanguage = (typeof INVOICE_LANGUAGES)[number];
54
54
  /**
55
- * Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg:
56
- * `cash` wird gebucht, die Antwort traegt dann zusaetzlich den Hinweis
57
- * `cash_receipt_required` — eine Barzahlung ist ein Barumsatz und braucht
58
- * einen Beleg (§ 132a BAO), bei Registrierkassenpflicht ueber die Kasse.
55
+ * Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg.
56
+ *
57
+ * Ein **Barumsatz** ist nicht nur Bargeld: als Barzahlung gilt auch die Zahlung
58
+ * mit Bankomat- oder Kreditkarte **vor Ort** (§ 131b Abs. 1 Z 3 UStG), nicht
59
+ * aber dieselbe Karte im Internet. Weil `card` und `online` beides sein
60
+ * koennen, sagt das Feld `onSite` es dem Server — und nur dann traegt die
61
+ * Antwort den Hinweis `cash_receipt_required` (bei `cash` immer).
59
62
  */
60
63
  export declare const INVOICE_PAYMENT_METHODS: readonly ["transfer", "card", "online", "cash"];
61
64
  export type InvoicePaymentMethod = (typeof INVOICE_PAYMENT_METHODS)[number];
@@ -87,10 +87,13 @@ exports.EINVOICE_FORMATS = ['ubl', 'cii'];
87
87
  */
88
88
  exports.INVOICE_LANGUAGES = ['de', 'en'];
89
89
  /**
90
- * Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg:
91
- * `cash` wird gebucht, die Antwort traegt dann zusaetzlich den Hinweis
92
- * `cash_receipt_required` — eine Barzahlung ist ein Barumsatz und braucht
93
- * einen Beleg (§ 132a BAO), bei Registrierkassenpflicht ueber die Kasse.
90
+ * Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg.
91
+ *
92
+ * Ein **Barumsatz** ist nicht nur Bargeld: als Barzahlung gilt auch die Zahlung
93
+ * mit Bankomat- oder Kreditkarte **vor Ort** (§ 131b Abs. 1 Z 3 UStG), nicht
94
+ * aber dieselbe Karte im Internet. Weil `card` und `online` beides sein
95
+ * koennen, sagt das Feld `onSite` es dem Server — und nur dann traegt die
96
+ * Antwort den Hinweis `cash_receipt_required` (bei `cash` immer).
94
97
  */
95
98
  exports.INVOICE_PAYMENT_METHODS = ['transfer', 'card', 'online', 'cash'];
96
99
  /**
@@ -291,6 +294,12 @@ exports.PAYMENT_FELDER = Object.freeze({
291
294
  amountCents: { typ: 'integer', pflicht: false, min: 1, max: 100_000_000 },
292
295
  paidAt: datum(),
293
296
  reference: text(100),
297
+ /**
298
+ * Die Zahlung erfolgte **vor Ort** beim Unternehmer (Terminal an der Kasse,
299
+ * Zahlung per App am Tresen). Dann ist sie ein Barumsatz. Zu `transfer` passt
300
+ * das nicht — eine Ueberweisung erfolgt nie vor Ort — und wird abgewiesen.
301
+ */
302
+ onSite: { typ: 'boolean', pflicht: false },
294
303
  });
295
304
  exports.RECHNUNG_ANFRAGEN = Object.freeze({
296
305
  createCustomer: {
@@ -384,6 +393,7 @@ exports.RECHNUNG_ANFRAGEN = Object.freeze({
384
393
  amountCents: { typ: 'integer', pflicht: false, min: 1, max: 100_000_000 },
385
394
  paidAt: datum(),
386
395
  reference: text(100),
396
+ onSite: { typ: 'boolean', pflicht: false },
387
397
  },
388
398
  });
389
399
  /** Genau eines dieser Felder muss gesetzt sein (je Aufruf, je Gruppe). */
@@ -40,11 +40,12 @@ 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 (Art. 6 Abs. 1 UStG).";
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': "Steuerfreie Leistung – Reverse Charge. ";
46
- readonly 'steuer.reverseCharge.text': "Übergang der Steuerschuldnerschaft auf den Leistungsempfänger gem. Art. 196 MwSt-RL 2006/112/EG (innergemeinschaftliche Leistung). Die Umsatzsteuer ist vom Leistungsempfänger im Bestimmungsland abzuführen.";
47
- readonly 'steuer.reverseCharge.uid': "UID Leistungserbringer: {verkaeufer} · UID Leistungsempfänger: {kaeufer}";
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}";
48
49
  readonly 'pdf.zahlung.titel': "ZAHLUNGSINFORMATIONEN";
49
50
  readonly 'pdf.zahlung.empfaenger': "Empfänger";
50
51
  readonly 'pdf.zahlung.iban': "IBAN";
@@ -25,11 +25,18 @@ const DE = {
25
25
  'pdf.summe.gesamt.rechnung': 'Gesamtbetrag',
26
26
  'pdf.summe.gesamt.gutschrift': 'Gutschriftsbetrag',
27
27
  'steuer.kleinunternehmer': 'Gemäß § 6 Abs. 1 Z 27 UStG wird keine Umsatzsteuer verrechnet (Kleinunternehmer).',
28
- 'steuer.igLieferung': 'Steuerfreie innergemeinschaftliche Lieferung (Art. 6 Abs. 1 UStG).',
28
+ 'steuer.igLieferung.titel': 'Steuerfreie innergemeinschaftliche Lieferung. ',
29
+ 'steuer.igLieferung.text': 'Gemäß Art. 6 Abs. 1 UStG (Art. 138 MwSt-RL 2006/112/EG). Die Erwerbsbesteuerung erfolgt durch den Abnehmer im Bestimmungsland.',
29
30
  'steuer.ausfuhr': 'Steuerfreie Ausfuhrlieferung (§ 6 Abs. 1 Z 1 UStG).',
30
- 'steuer.reverseCharge.titel': 'Steuerfreie Leistung – Reverse Charge. ',
31
- 'steuer.reverseCharge.text': 'Übergang der Steuerschuldnerschaft auf den Leistungsempfänger gem. Art. 196 MwSt-RL 2006/112/EG (innergemeinschaftliche Leistung). Die Umsatzsteuer ist vom Leistungsempfänger im Bestimmungsland abzuführen.',
32
- 'steuer.reverseCharge.uid': 'UID Leistungserbringer: {verkaeufer} · UID Leistungsempfänger: {kaeufer}',
31
+ // Reverse Charge ist KEINE Steuerbefreiung: der Umsatz bleibt steuerpflichtig,
32
+ // nur die Steuer schuldet der Empfaenger (§ 11 Abs. 1a UStG; der Begriff steht
33
+ // wortgleich in Art. 226 Nr. 11a MwSt-RL). „Steuerfrei" waere sachlich falsch
34
+ // und erbraechte den vorgeschriebenen Hinweis nicht.
35
+ 'steuer.reverseCharge.titel': 'Steuerschuldnerschaft des Leistungsempfängers. ',
36
+ '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.',
37
+ // Beide UID-Nummern: bei Reverse Charge § 11 Abs. 1a, bei der ig. Lieferung
38
+ // Art. 11 Abs. 2 UStG.
39
+ 'steuer.uidZeile': 'UID Leistungserbringer: {verkaeufer} · UID Leistungsempfänger: {kaeufer}',
33
40
  'pdf.zahlung.titel': 'ZAHLUNGSINFORMATIONEN',
34
41
  'pdf.zahlung.empfaenger': 'Empfänger',
35
42
  'pdf.zahlung.iban': 'IBAN',
@@ -207,11 +214,12 @@ const EN = {
207
214
  'pdf.summe.gesamt.rechnung': 'Total',
208
215
  'pdf.summe.gesamt.gutschrift': 'Credit total',
209
216
  'steuer.kleinunternehmer': 'No VAT charged pursuant to § 6 (1) no. 27 UStG (small business exemption).',
210
- 'steuer.igLieferung': 'VAT-exempt intra-Community supply (Art. 6 (1) UStG).',
217
+ 'steuer.igLieferung.titel': 'VAT-exempt intra-Community supply. ',
218
+ '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.',
211
219
  'steuer.ausfuhr': 'VAT-exempt export delivery (§ 6 (1) no. 1 UStG).',
212
- 'steuer.reverseCharge.titel': 'VAT-exempt service – reverse charge. ',
213
- 'steuer.reverseCharge.text': 'VAT liability transferred to the recipient pursuant to Art. 196 of VAT Directive 2006/112/EC (intra-Community service). VAT is to be accounted for by the recipient in the country of destination.',
214
- 'steuer.reverseCharge.uid': 'VAT ID supplier: {verkaeufer} · VAT ID recipient: {kaeufer}',
220
+ 'steuer.reverseCharge.titel': 'Reverse charge – VAT liability of the recipient. ',
221
+ '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
+ 'steuer.uidZeile': 'VAT ID supplier: {verkaeufer} · VAT ID recipient: {kaeufer}',
215
223
  'pdf.zahlung.titel': 'PAYMENT DETAILS',
216
224
  'pdf.zahlung.empfaenger': 'Payee',
217
225
  'pdf.zahlung.iban': 'IBAN',
@@ -118,6 +118,13 @@ export interface PaymentInput {
118
118
  paidAt?: string;
119
119
  /** Zahlungskennung des Fremdsystems — gespeichert, aber nicht gedruckt. */
120
120
  reference?: string;
121
+ /**
122
+ * Die Zahlung erfolgte vor Ort beim Unternehmer (Terminal an der Kasse).
123
+ * Dann ist sie ein Barumsatz — auch mit Karte (§ 131b Abs. 1 Z 3 UStG) — und
124
+ * die Antwort traegt den Hinweis `cash_receipt_required`. Zu `transfer`
125
+ * passt das Kennzeichen nicht und wird abgewiesen.
126
+ */
127
+ onSite?: boolean;
121
128
  }
122
129
  export interface RecordPaymentRequest extends PaymentInput {
123
130
  /** Pflicht: ohne ihn bucht eine Wiederholung eine zweite Zahlung. */
@@ -52,10 +52,13 @@ export type EInvoiceFormat = (typeof EINVOICE_FORMATS)[number];
52
52
  export declare const INVOICE_LANGUAGES: readonly ["de", "en"];
53
53
  export type InvoiceLanguage = (typeof INVOICE_LANGUAGES)[number];
54
54
  /**
55
- * Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg:
56
- * `cash` wird gebucht, die Antwort traegt dann zusaetzlich den Hinweis
57
- * `cash_receipt_required` — eine Barzahlung ist ein Barumsatz und braucht
58
- * einen Beleg (§ 132a BAO), bei Registrierkassenpflicht ueber die Kasse.
55
+ * Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg.
56
+ *
57
+ * Ein **Barumsatz** ist nicht nur Bargeld: als Barzahlung gilt auch die Zahlung
58
+ * mit Bankomat- oder Kreditkarte **vor Ort** (§ 131b Abs. 1 Z 3 UStG), nicht
59
+ * aber dieselbe Karte im Internet. Weil `card` und `online` beides sein
60
+ * koennen, sagt das Feld `onSite` es dem Server — und nur dann traegt die
61
+ * Antwort den Hinweis `cash_receipt_required` (bei `cash` immer).
59
62
  */
60
63
  export declare const INVOICE_PAYMENT_METHODS: readonly ["transfer", "card", "online", "cash"];
61
64
  export type InvoicePaymentMethod = (typeof INVOICE_PAYMENT_METHODS)[number];
@@ -84,10 +84,13 @@ export const EINVOICE_FORMATS = ['ubl', 'cii'];
84
84
  */
85
85
  export const INVOICE_LANGUAGES = ['de', 'en'];
86
86
  /**
87
- * Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg:
88
- * `cash` wird gebucht, die Antwort traegt dann zusaetzlich den Hinweis
89
- * `cash_receipt_required` — eine Barzahlung ist ein Barumsatz und braucht
90
- * einen Beleg (§ 132a BAO), bei Registrierkassenpflicht ueber die Kasse.
87
+ * Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg.
88
+ *
89
+ * Ein **Barumsatz** ist nicht nur Bargeld: als Barzahlung gilt auch die Zahlung
90
+ * mit Bankomat- oder Kreditkarte **vor Ort** (§ 131b Abs. 1 Z 3 UStG), nicht
91
+ * aber dieselbe Karte im Internet. Weil `card` und `online` beides sein
92
+ * koennen, sagt das Feld `onSite` es dem Server — und nur dann traegt die
93
+ * Antwort den Hinweis `cash_receipt_required` (bei `cash` immer).
91
94
  */
92
95
  export const INVOICE_PAYMENT_METHODS = ['transfer', 'card', 'online', 'cash'];
93
96
  /**
@@ -288,6 +291,12 @@ export const PAYMENT_FELDER = Object.freeze({
288
291
  amountCents: { typ: 'integer', pflicht: false, min: 1, max: 100_000_000 },
289
292
  paidAt: datum(),
290
293
  reference: text(100),
294
+ /**
295
+ * Die Zahlung erfolgte **vor Ort** beim Unternehmer (Terminal an der Kasse,
296
+ * Zahlung per App am Tresen). Dann ist sie ein Barumsatz. Zu `transfer` passt
297
+ * das nicht — eine Ueberweisung erfolgt nie vor Ort — und wird abgewiesen.
298
+ */
299
+ onSite: { typ: 'boolean', pflicht: false },
291
300
  });
292
301
  export const RECHNUNG_ANFRAGEN = Object.freeze({
293
302
  createCustomer: {
@@ -381,6 +390,7 @@ export const RECHNUNG_ANFRAGEN = Object.freeze({
381
390
  amountCents: { typ: 'integer', pflicht: false, min: 1, max: 100_000_000 },
382
391
  paidAt: datum(),
383
392
  reference: text(100),
393
+ onSite: { typ: 'boolean', pflicht: false },
384
394
  },
385
395
  });
386
396
  /** Genau eines dieser Felder muss gesetzt sein (je Aufruf, je Gruppe). */
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.19.0",
2
+ "version": "0.20.0",
3
3
  "gemessenAn": {
4
4
  "tid": "3600335",
5
5
  "hpsVersion": "1.10.0",
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.19.0",
2
+ "version": "0.20.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.19.0",
2
+ "version": "0.20.0",
3
3
  "aufrufe": [
4
4
  "activateCashregister",
5
5
  "cancelInvoice",
@@ -0,0 +1,15 @@
1
+ {
2
+ "aufruf": "recordInvoicePayment",
3
+ "beschreibung": "Ueberweisung kann nicht vor Ort erfolgen",
4
+ "anfrage": {
5
+ "idempotencyKey": "bsp-vor-ort",
6
+ "invoiceId": "rechnung_beispiel",
7
+ "method": "transfer",
8
+ "onSite": true
9
+ },
10
+ "erwartet": {
11
+ "ok": false,
12
+ "code": "validation",
13
+ "fields": ["onSite"]
14
+ }
15
+ }
@@ -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.19.0",
5
+ "paket": "0.20.0",
6
6
  "aufrufe": {
7
7
  "createCustomer": {
8
8
  "anfrage": {
@@ -490,6 +490,9 @@
490
490
  "reference": {
491
491
  "type": "string",
492
492
  "maxLength": 100
493
+ },
494
+ "onSite": {
495
+ "type": "boolean"
493
496
  }
494
497
  },
495
498
  "required": [
@@ -853,6 +856,9 @@
853
856
  "reference": {
854
857
  "type": "string",
855
858
  "maxLength": 100
859
+ },
860
+ "onSite": {
861
+ "type": "boolean"
856
862
  }
857
863
  },
858
864
  "required": [
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.19.0",
2
+ "version": "0.20.0",
3
3
  "sprachen": [
4
4
  "de",
5
5
  "en"
@@ -32,11 +32,12 @@
32
32
  "pdf.summe.gesamt.rechnung": "Gesamtbetrag",
33
33
  "pdf.summe.gesamt.gutschrift": "Gutschriftsbetrag",
34
34
  "steuer.kleinunternehmer": "Gemäß § 6 Abs. 1 Z 27 UStG wird keine Umsatzsteuer verrechnet (Kleinunternehmer).",
35
- "steuer.igLieferung": "Steuerfreie innergemeinschaftliche Lieferung (Art. 6 Abs. 1 UStG).",
35
+ "steuer.igLieferung.titel": "Steuerfreie innergemeinschaftliche Lieferung. ",
36
+ "steuer.igLieferung.text": "Gemäß Art. 6 Abs. 1 UStG (Art. 138 MwSt-RL 2006/112/EG). Die Erwerbsbesteuerung erfolgt durch den Abnehmer im Bestimmungsland.",
36
37
  "steuer.ausfuhr": "Steuerfreie Ausfuhrlieferung (§ 6 Abs. 1 Z 1 UStG).",
37
- "steuer.reverseCharge.titel": "Steuerfreie Leistung – Reverse Charge. ",
38
- "steuer.reverseCharge.text": "Übergang der Steuerschuldnerschaft auf den Leistungsempfänger gem. Art. 196 MwSt-RL 2006/112/EG (innergemeinschaftliche Leistung). Die Umsatzsteuer ist vom Leistungsempfänger im Bestimmungsland abzuführen.",
39
- "steuer.reverseCharge.uid": "UID Leistungserbringer: {verkaeufer} · UID Leistungsempfänger: {kaeufer}",
38
+ "steuer.reverseCharge.titel": "Steuerschuldnerschaft des Leistungsempfängers. ",
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
+ "steuer.uidZeile": "UID Leistungserbringer: {verkaeufer} · UID Leistungsempfänger: {kaeufer}",
40
41
  "pdf.zahlung.titel": "ZAHLUNGSINFORMATIONEN",
41
42
  "pdf.zahlung.empfaenger": "Empfänger",
42
43
  "pdf.zahlung.iban": "IBAN",
@@ -214,11 +215,12 @@
214
215
  "pdf.summe.gesamt.rechnung": "Total",
215
216
  "pdf.summe.gesamt.gutschrift": "Credit total",
216
217
  "steuer.kleinunternehmer": "No VAT charged pursuant to § 6 (1) no. 27 UStG (small business exemption).",
217
- "steuer.igLieferung": "VAT-exempt intra-Community supply (Art. 6 (1) UStG).",
218
+ "steuer.igLieferung.titel": "VAT-exempt intra-Community supply. ",
219
+ "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.",
218
220
  "steuer.ausfuhr": "VAT-exempt export delivery (§ 6 (1) no. 1 UStG).",
219
- "steuer.reverseCharge.titel": "VAT-exempt service – reverse charge. ",
220
- "steuer.reverseCharge.text": "VAT liability transferred to the recipient pursuant to Art. 196 of VAT Directive 2006/112/EC (intra-Community service). VAT is to be accounted for by the recipient in the country of destination.",
221
- "steuer.reverseCharge.uid": "VAT ID supplier: {verkaeufer} · VAT ID recipient: {kaeufer}",
221
+ "steuer.reverseCharge.titel": "Reverse charge – VAT liability of the recipient. ",
222
+ "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
+ "steuer.uidZeile": "VAT ID supplier: {verkaeufer} · VAT ID recipient: {kaeufer}",
222
224
  "pdf.zahlung.titel": "PAYMENT DETAILS",
223
225
  "pdf.zahlung.empfaenger": "Payee",
224
226
  "pdf.zahlung.iban": "IBAN",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kreiseck/kasseneck-api",
3
- "version": "0.19.0",
3
+ "version": "0.20.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",