@fin.cx/tax 2.4.1 → 2.6.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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@fin.cx/tax',
6
- version: '2.4.1',
6
+ version: '2.6.0',
7
7
  description: 'German tax computation engine: UStVA Kennzahl aggregation from ledger balances with form rounding, Zahllast and reconciliation checks — exact cents'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxhQUFhO0lBQ25CLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSxxSkFBcUo7Q0FDbkssQ0FBQSJ9
@@ -30,14 +30,29 @@
30
30
  * tax) and did not exempt the supplies but levied no tax on them; a year
31
31
  * before 2025 answers `before_2025` and is not told.
32
32
  *
33
- * Not read: the BMF-Schreiben of 18 March 2025 (UStAE Abschn. 19.1 ff.),
34
- * which the BMF site did not serve. Two questions it answers stay open here:
35
- * the limit in the year the business starts, which the statute does not name
36
- * (`business_started_this_year` answers `unknown`), and whether the supply by
37
- * which the running year exceeds 100 000 € is itself taxed. The statute's
38
- * wording (the running year's Gesamtumsatz "nicht überschreitet") is read so
39
- * that it is: `endsWith` names the receipt at which the sum first exceeds the
40
- * limit, and every receipt from it on is taxed.
33
+ * The year the business starts: the statute names no limit of its own for it
34
+ * (there is no previous year). The reasoning of the Jahressteuergesetz 2024
35
+ * (BT-Drs. 20/12780, read on dserver.bundestag.de 2026-09-30, p. 183 f., zu
36
+ * § 19 Abs. 1) does: "Nimmt der Unternehmer seine gewerbliche oder berufliche
37
+ * Tätigkeit auf, ist § 19 Absatz 1 Satz 1 UStG mit der Maßgabe anzuwenden,
38
+ * dass der Gesamtumsatz im laufenden Kalenderjahr den Betrag von 25 000 Euro
39
+ * nicht überschreitet. Bereits der Umsatz, mit dem die Grenze überschritten
40
+ * wird, unterliegt der Regelbesteuerung." (Art. 288a Abs. 1 UAbs. 3 RL
41
+ * 2006/112 EG); "Die bis zum Zeitpunkt der Überschreitung bewirkten Umsätze
42
+ * sind steuerfrei." And zu Abs. 2: "Übt der Unternehmer seine gewerbliche
43
+ * oder berufliche Tätigkeit nur für einen Teil des Kalenderjahres aus,
44
+ * entfällt die bisherige Umrechnung in einen Jahresgesamtumsatz": a part of a
45
+ * year counts as it is, in the year the business starts and as the next
46
+ * year's previous year. The Anleitung zur Umsatzsteuer-Voranmeldung 2026
47
+ * (p. 8, Zeile 12) reads the founding year the same way.
48
+ *
49
+ * The supply by which the running year exceeds 100 000 €: the reasoning says
50
+ * the scheme no longer applies "ab diesem Zeitpunkt", and the statute exempts
51
+ * a supply while the running year's Gesamtumsatz "nicht überschreitet"; both
52
+ * are read so that it is taxed: `endsWith` names the receipt at which the sum
53
+ * first exceeds the limit, and every receipt from it on is taxed. Not read:
54
+ * the BMF-Schreiben of 18 March 2025 (UStAE Abschn. 19.1 ff.), which the BMF
55
+ * site did not serve.
41
56
  */
42
57
  import type { TCents } from '@fin.cx/calculation';
43
58
  /** The first calendar year of the version of § 19 UStG this module applies (Jahressteuergesetz 2024, from 1 January 2025). */
@@ -46,6 +61,8 @@ export declare const SMALL_BUSINESS_FIRST_YEAR = 2025;
46
61
  export declare const SMALL_BUSINESS_PREVIOUS_YEAR_LIMIT_CENTS: TCents;
47
62
  /** 100 000 €: the running calendar year's limit (§ 19 Abs. 1 Satz 1 UStG) */
48
63
  export declare const SMALL_BUSINESS_RUNNING_YEAR_LIMIT_CENTS: TCents;
64
+ /** 25 000 €: the running calendar year's limit in the year the business starts (BT-Drs. 20/12780, p. 183 f., zu § 19 Abs. 1 UStG) */
65
+ export declare const SMALL_BUSINESS_FOUNDING_YEAR_LIMIT_CENTS: TCents;
49
66
  /**
50
67
  * What a receipt is to the Gesamtumsatz (§ 19 Abs. 2 UStG):
51
68
  * - `counted`: an Entgelt for a steuerbarer Umsatz (§ 1 Abs. 1 Nr. 1), taxed or
@@ -76,7 +93,12 @@ export interface IGesamtumsatzOfYear {
76
93
  totalCents: TCents;
77
94
  leftOutCents: Record<Exclude<TGesamtumsatzPart, 'counted'>, TCents>;
78
95
  }
79
- /** Why a year starts with the exemption or without it. */
96
+ /**
97
+ * Why a year starts with the exemption or without it. `within_limits` and
98
+ * `business_started_this_year` start it exempt: the one by the previous
99
+ * year's Gesamtumsatz, the other as the year the business starts, which has
100
+ * none (its running limit is 25 000 €).
101
+ */
80
102
  export type TSmallBusinessReason = 'within_limits' | 'previous_year_over' | 'waived' | 'previous_year_unknown' | 'business_started_this_year'
81
103
  /** a year before 2025, under the version with other limits (`SMALL_BUSINESS_FIRST_YEAR`): not told */
82
104
  | 'before_2025';
@@ -100,9 +122,17 @@ export interface ISmallBusinessStatus {
100
122
  atStart: 'exempt' | 'taxable' | 'unknown';
101
123
  reason: TSmallBusinessReason;
102
124
  /**
103
- * Where the year starts exempt and its Gesamtumsatz exceeds 100 000 €: the
104
- * receipt by which it first does (its day, its place in the receipts as
105
- * given, the sum with it). It and every later receipt are taxed.
125
+ * Where the year starts exempt: the running year's Gesamtumsatz up to which
126
+ * it stays exempt, 100 000 € (`SMALL_BUSINESS_RUNNING_YEAR_LIMIT_CENTS`), or
127
+ * 25 000 € in the year the business starts
128
+ * (`SMALL_BUSINESS_FOUNDING_YEAR_LIMIT_CENTS`)
129
+ */
130
+ runningLimitCents?: TCents;
131
+ /**
132
+ * Where the year starts exempt and its Gesamtumsatz exceeds
133
+ * `runningLimitCents`: the receipt by which it first does (its day, its
134
+ * place in the receipts as given, the sum with it). It and every later
135
+ * receipt are taxed.
106
136
  */
107
137
  endsWith?: {
108
138
  receivedOn: string;
@@ -118,7 +148,9 @@ export declare function gesamtumsatzOf(receiptsArg: readonly IGesamtumsatzReceip
118
148
  * Whether a calendar year's supplies are exempt under § 19 Abs. 1 UStG: from
119
149
  * its start where the previous year's Gesamtumsatz did not exceed 25 000 € and
120
150
  * no waiver is in force, until the receipt by which the running year's
121
- * Gesamtumsatz exceeds 100 000 € (`endsWith`).
151
+ * Gesamtumsatz exceeds 100 000 € (`endsWith`). In the year the business
152
+ * starts (`previousYearCents: 'business_started'`) from its start, until the
153
+ * receipt by which it exceeds 25 000 €, counted as it is, not as a whole year.
122
154
  */
123
155
  export declare function smallBusinessStatusOf(inputArg: ISmallBusinessYearInput): ISmallBusinessStatus;
124
156
  /** The last calendar year a waiver effective for `yearArg` binds (§ 19 Abs. 3 Satz 3 UStG: at least five calendar years). */
@@ -4,6 +4,8 @@ export const SMALL_BUSINESS_FIRST_YEAR = 2025;
4
4
  export const SMALL_BUSINESS_PREVIOUS_YEAR_LIMIT_CENTS = 2_500_000;
5
5
  /** 100 000 €: the running calendar year's limit (§ 19 Abs. 1 Satz 1 UStG) */
6
6
  export const SMALL_BUSINESS_RUNNING_YEAR_LIMIT_CENTS = 10_000_000;
7
+ /** 25 000 €: the running calendar year's limit in the year the business starts (BT-Drs. 20/12780, p. 183 f., zu § 19 Abs. 1 UStG) */
8
+ export const SMALL_BUSINESS_FOUNDING_YEAR_LIMIT_CENTS = 2_500_000;
7
9
  export const GESAMTUMSATZ_PARTS = ['counted', 'exempt_section_4_listed', 'exempt_ancillary', 'fixed_assets', 'not_taxable_here'];
8
10
  const isCalendarDay = (valueArg) => {
9
11
  if (typeof valueArg !== 'string' || !/^\d{4}-\d{2}-\d{2}$/.test(valueArg)) {
@@ -52,7 +54,9 @@ export function gesamtumsatzOf(receiptsArg, yearArg) {
52
54
  * Whether a calendar year's supplies are exempt under § 19 Abs. 1 UStG: from
53
55
  * its start where the previous year's Gesamtumsatz did not exceed 25 000 € and
54
56
  * no waiver is in force, until the receipt by which the running year's
55
- * Gesamtumsatz exceeds 100 000 € (`endsWith`).
57
+ * Gesamtumsatz exceeds 100 000 € (`endsWith`). In the year the business
58
+ * starts (`previousYearCents: 'business_started'`) from its start, until the
59
+ * receipt by which it exceeds 25 000 €, counted as it is, not as a whole year.
56
60
  */
57
61
  export function smallBusinessStatusOf(inputArg) {
58
62
  assertYear(inputArg.year);
@@ -76,23 +80,23 @@ export function smallBusinessStatusOf(inputArg) {
76
80
  if (inputArg.waived === true) {
77
81
  return { ...base, atStart: 'taxable', reason: 'waived' };
78
82
  }
79
- if (previous === 'business_started') {
80
- return { ...base, atStart: 'unknown', reason: 'business_started_this_year' };
81
- }
82
83
  if (previous === undefined) {
83
84
  return { ...base, atStart: 'unknown', reason: 'previous_year_unknown' };
84
85
  }
85
- if (previous > SMALL_BUSINESS_PREVIOUS_YEAR_LIMIT_CENTS) {
86
+ if (previous !== 'business_started' && previous > SMALL_BUSINESS_PREVIOUS_YEAR_LIMIT_CENTS) {
86
87
  return { ...base, atStart: 'taxable', reason: 'previous_year_over' };
87
88
  }
89
+ const reason = previous === 'business_started' ? 'business_started_this_year' : 'within_limits';
90
+ const runningLimitCents = previous === 'business_started' ? SMALL_BUSINESS_FOUNDING_YEAR_LIMIT_CENTS : SMALL_BUSINESS_RUNNING_YEAR_LIMIT_CENTS;
91
+ const exempt = { ...base, atStart: 'exempt', reason, runningLimitCents };
88
92
  let sum = 0;
89
93
  for (const { receipt, index } of counted) {
90
94
  sum += receipt.entgeltCents;
91
- if (sum > SMALL_BUSINESS_RUNNING_YEAR_LIMIT_CENTS) {
92
- return { ...base, atStart: 'exempt', reason: 'within_limits', endsWith: { receivedOn: receipt.receivedOn, index, runningCents: sum } };
95
+ if (sum > runningLimitCents) {
96
+ return { ...exempt, endsWith: { receivedOn: receipt.receivedOn, index, runningCents: sum } };
93
97
  }
94
98
  }
95
- return { ...base, atStart: 'exempt', reason: 'within_limits' };
99
+ return exempt;
96
100
  }
97
101
  /** The last calendar year a waiver effective for `yearArg` binds (§ 19 Abs. 3 Satz 3 UStG: at least five calendar years). */
98
102
  export function smallBusinessWaiverBindsUntil(yearArg) {
@@ -110,4 +114,4 @@ export function smallBusinessWaiverDeadline(yearArg) {
110
114
  const leap = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
111
115
  return `${year}-02-${leap ? '29' : '28'}`;
112
116
  }
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hbGxidXNpbmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYWxsYnVzaW5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBLDhIQUE4SDtBQUM5SCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUM7QUFFOUMsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFXLFNBQVMsQ0FBQztBQUMxRSw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0sdUNBQXVDLEdBQVcsVUFBVSxDQUFDO0FBa0IxRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBaUMsQ0FBQyxTQUFTLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUEwRC9KLE1BQU0sYUFBYSxHQUFHLENBQUMsUUFBaUIsRUFBc0IsRUFBRTtJQUM5RCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzFFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEdBQUcsQ0FBQztBQUN6RyxDQUFDLENBQUM7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
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hbGxidXNpbmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYWxsYnVzaW5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMERBLDhIQUE4SDtBQUM5SCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUM7QUFFOUMsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFXLFNBQVMsQ0FBQztBQUMxRSw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0sdUNBQXVDLEdBQVcsVUFBVSxDQUFDO0FBQzFFLHFJQUFxSTtBQUNySSxNQUFNLENBQUMsTUFBTSx3Q0FBd0MsR0FBVyxTQUFTLENBQUM7QUFrQjFFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFpQyxDQUFDLFNBQVMsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQXVFL0osTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFpQixFQUFzQixFQUFFO0lBQzlELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDMUUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxHQUFHLENBQUMs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
package/dist_ts/ustva.js CHANGED
@@ -51,6 +51,7 @@ export const USTVA_KENNZAHL_LABELS = {
51
51
  67: 'Vorsteuer aus Leistungen im Sinne des §13b UStG',
52
52
  69: 'In Rechnungen unrichtig oder unberechtigt ausgewiesene Steuerbeträge (§ 14c UStG) sowie Steuerbeträge, die nach § 6a Absatz 4 Satz 2, § 17 Absatz 1 Satz 7, § 25b Absatz 2 UStG oder von einem Auslagerer oder Lagerhalter nach § 27 Absatz 40a UStG geschuldet werden',
53
53
  39: 'Anrechnung der Sondervorauszahlung (Dauerfristverlängerung)',
54
+ 70: 'Wechsel von der Kleinunternehmer-Regelung (§ 19 UStG) zur Regelbesteuerung – Datum des Wechsels',
54
55
  83: 'Verbleibende Umsatzsteuer-Vorauszahlung / Überschuss',
55
56
  };
56
57
  /**
@@ -65,6 +66,35 @@ export const USTVA_KENNZAHL_LABELS = {
65
66
  * dropped.
66
67
  */
67
68
  export const USTVA_KENNZAHL_ORDER = [81, 86, 87, 41, 43, 48, 89, 93, 46, 47, 73, 74, 84, 85, 60, 21, 45, 66, 61, 62, 67, 69, 39, 83];
69
+ /** Whether `valueArg` is a calendar day written `YYYY-MM-DD`. */
70
+ function isCalendarDay(valueArg) {
71
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(valueArg))
72
+ return false;
73
+ const date = new Date(`${valueArg}T00:00:00Z`);
74
+ return !Number.isNaN(date.getTime()) && date.toISOString().slice(0, 10) === valueArg;
75
+ }
76
+ /**
77
+ * The first and last day of a period label `YYYY-MM`, `YYYY-Qn` or `YYYY`;
78
+ * undefined for a label of another shape, which is informational only.
79
+ */
80
+ function daysOfPeriod(periodArg) {
81
+ const lastDayOf = (yearArg, monthArg) => new Date(Date.UTC(yearArg, monthArg, 0)).toISOString().slice(0, 10);
82
+ const pad = (valueArg) => String(valueArg).padStart(2, '0');
83
+ let match = /^(\d{4})-(\d{2})$/.exec(periodArg);
84
+ if (match) {
85
+ const year = Number(match[1]);
86
+ const month = Number(match[2]);
87
+ return month >= 1 && month <= 12 ? { first: `${match[1]}-${pad(month)}-01`, last: lastDayOf(year, month) } : undefined;
88
+ }
89
+ match = /^(\d{4})-Q([1-4])$/.exec(periodArg);
90
+ if (match) {
91
+ const year = Number(match[1]);
92
+ const lastMonth = Number(match[2]) * 3;
93
+ return { first: `${match[1]}-${pad(lastMonth - 2)}-01`, last: lastDayOf(year, lastMonth) };
94
+ }
95
+ match = /^(\d{4})$/.exec(periodArg);
96
+ return match ? { first: `${match[1]}-01-01`, last: `${match[1]}-12-31` } : undefined;
97
+ }
68
98
  /** full euros, cents truncated toward zero (form rule for bases) */
69
99
  function truncateToEur(cents) {
70
100
  return Math.trunc(cents / 100);
@@ -308,6 +338,21 @@ export function computeUstva(input) {
308
338
  issues.push(`Kennzahl ${kennzahl} (from ${value.accounts.join(', ')}) has no place in this module's form order — it cannot be filed; add it to USTVA_KENNZAHL_ORDER`);
309
339
  }
310
340
  }
341
+ // ---- Kz 70: the day of the change from the Kleinunternehmer scheme ------
342
+ const dateFields = [];
343
+ const changeOn = input.smallBusinessChangeOn;
344
+ if (changeOn !== undefined) {
345
+ const period = daysOfPeriod(input.period);
346
+ if (!isCalendarDay(changeOn)) {
347
+ issues.push(`Kz 70 (the day of the change from the Kleinunternehmer scheme) ${changeOn} is no calendar day (YYYY-MM-DD)`);
348
+ }
349
+ else if (period && (changeOn < period.first || changeOn > period.last)) {
350
+ issues.push(`Kz 70 (the day of the change from the Kleinunternehmer scheme) ${changeOn} lies outside the period ${input.period} — it belongs in the return of the period that contains it`);
351
+ }
352
+ else {
353
+ dateFields.push({ kennzahl: 70, value: changeOn, label: USTVA_KENNZAHL_LABELS[70] });
354
+ }
355
+ }
311
356
  return {
312
357
  chart: input.chart,
313
358
  year: input.year,
@@ -322,6 +367,7 @@ export function computeUstva(input) {
322
367
  checks,
323
368
  },
324
369
  issues,
370
+ dateFields,
325
371
  };
326
372
  }
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXN0dmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy91c3R2YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFzQixNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVNuRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFxQztJQUNyRSxFQUFFLEVBQUUsK0JBQStCO0lBQ25DLEVBQUUsRUFBRSw4QkFBOEI7SUFDbEMsRUFBRSxFQUFFLDREQUE0RDtJQUNoRSxFQUFFLEVBQUUscUNBQXFDO0lBQ3pDLEVBQUUsRUFBRSxvQ0FBb0M7SUFDeEMsRUFBRSxFQUFFLGdEQUFnRDtJQUNwRCxFQUFFLEVBQUUsd0RBQXdEO0lBQzVELEVBQUUsRUFBRSx5Q0FBeUM7SUFDN0MsRUFBRSxFQUFFLGdJQUFnSTtJQUNwSSxFQUFFLEVBQUUsdUJBQXVCO0lBQzNCLEVBQUUsRUFBRSxxRUFBcUU7SUFDekUsRUFBRSxFQUFFLHVCQUF1QjtJQUMzQixFQUFFLEVBQUUsK0RBQStEO0lBQ25FLEVBQUUsRUFBRSx1QkFBdUI7SUFDM0IsRUFBRSxFQUFFLHFGQUFxRjtJQUN6RixFQUFFLEVBQUUsb0RBQW9EO0lBQ3hELEVBQUUsRUFBRSxnRUFBZ0U7SUFDcEUsRUFBRSxFQUFFLDhDQUE4QztJQUNsRCxFQUFFLEVBQUUsOENBQThDO0lBQ2xELEVBQUUsRUFBRSxpQ0FBaUM7SUFDckMsRUFBRSxFQUFFLGlEQUFpRDtJQUNyRCxFQUFFLEVBQUUsd1FBQXdRO0lBQzVRLEVBQUUsRUFBRSw2REFBNkQ7SUFDakUsRUFBRSxFQUFFLHNEQUFzRDtDQUMzRCxDQUFDO0FBRUY7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FB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
373
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXN0dmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy91c3R2YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFzQixNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVVuRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFxQztJQUNyRSxFQUFFLEVBQUUsK0JBQStCO0lBQ25DLEVBQUUsRUFBRSw4QkFBOEI7SUFDbEMsRUFBRSxFQUFFLDREQUE0RDtJQUNoRSxFQUFFLEVBQUUscUNBQXFDO0lBQ3pDLEVBQUUsRUFBRSxvQ0FBb0M7SUFDeEMsRUFBRSxFQUFFLGdEQUFnRDtJQUNwRCxFQUFFLEVBQUUsd0RBQXdEO0lBQzVELEVBQUUsRUFBRSx5Q0FBeUM7SUFDN0MsRUFBRSxFQUFFLGdJQUFnSTtJQUNwSSxFQUFFLEVBQUUsdUJBQXVCO0lBQzNCLEVBQUUsRUFBRSxxRUFBcUU7SUFDekUsRUFBRSxFQUFFLHVCQUF1QjtJQUMzQixFQUFFLEVBQUUsK0RBQStEO0lBQ25FLEVBQUUsRUFBRSx1QkFBdUI7SUFDM0IsRUFBRSxFQUFFLHFGQUFxRjtJQUN6RixFQUFFLEVBQUUsb0RBQW9EO0lBQ3hELEVBQUUsRUFBRSxnRUFBZ0U7SUFDcEUsRUFBRSxFQUFFLDhDQUE4QztJQUNsRCxFQUFFLEVBQUUsOENBQThDO0lBQ2xELEVBQUUsRUFBRSxpQ0FBaUM7SUFDckMsRUFBRSxFQUFFLGlEQUFpRDtJQUNyRCxFQUFFLEVBQUUsd1FBQXdRO0lBQzVRLEVBQUUsRUFBRSw2REFBNkQ7SUFDakUsRUFBRSxFQUFFLGlHQUFpRztJQUNyRyxFQUFFLEVBQUUsc0RBQXNEO0NBQzNELENBQUM7QUFFRjs7Ozs7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
@@ -83,6 +83,17 @@ export interface IUstvaInput {
83
83
  * line. The chart data maps no account to it, so the caller states it.
84
84
  */
85
85
  otherTaxOwed?: IOtherTaxOwedInput;
86
+ /**
87
+ * Kz 70 (Zeile 12 of the USt 1 A 2026, "Wechsel von der
88
+ * Kleinunternehmer-Regelung (§ 19 UStG) zur Regelbesteuerung – Datum des
89
+ * Wechsels"), `YYYY-MM-DD`: per the Anleitung zur UStVA 2026 (p. 8) the
90
+ * day of the supply by which the running year's Gesamtumsatz exceeded
91
+ * 100 000 € (in the year the business started, 25 000 €), or 1 January
92
+ * where a waiver of § 19 Abs. 3 UStG takes effect with the running year;
93
+ * none where the previous year exceeded 25 000 €. Stated in the return of
94
+ * the period that contains it; a day outside `period` is an issue.
95
+ */
96
+ smallBusinessChangeOn?: string;
86
97
  /** revenue accounts intentionally outside the UStVA (no issue raised) */
87
98
  exemptAccounts?: string[];
88
99
  /** override the built-in per-chart VAT account table */
@@ -95,6 +106,13 @@ export interface IUstvaInput {
95
106
  reconciliationToleranceCents?: TCents;
96
107
  }
97
108
  export type TKennzahlKind = 'baseEur' | 'taxCents';
109
+ /** A field of the form that carries a day, not an amount (Kz 70). */
110
+ export interface IKennzahlDateValue {
111
+ kennzahl: number;
112
+ /** `YYYY-MM-DD` */
113
+ value: string;
114
+ label: string;
115
+ }
98
116
  export interface IKennzahlValue {
99
117
  kennzahl: number;
100
118
  kind: TKennzahlKind;
@@ -125,4 +143,6 @@ export interface IUstvaResult {
125
143
  reconciliation: IUstvaReconciliation;
126
144
  /** hard problems — a filing must not be generated while non-empty */
127
145
  issues: string[];
146
+ /** the fields that carry a day (Kz 70), in form order; empty where none is stated */
147
+ dateFields: IKennzahlDateValue[];
128
148
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fin.cx/tax",
3
- "version": "2.4.1",
3
+ "version": "2.6.0",
4
4
  "private": false,
5
5
  "description": "German tax computation engine: UStVA Kennzahl aggregation from ledger balances with form rounding, Zahllast and reconciliation checks — exact cents",
6
6
  "main": "dist_ts/index.js",
package/readme.md CHANGED
@@ -27,6 +27,7 @@ pnpm install @fin.cx/tax
27
27
 
28
28
  - **igE and inbound §13b bases** (Kz 89/93, 46/47, 73/74, 84/85) are scenario figures, not single-account figures. Pass them exactly via `scenarioBases` (aggregated from tax-scenario-tagged journal entries, e.g. @fin.cx/skr's `taxScenario`): `reverseChargeServicesEuCents` for § 13b Abs. 1 (Kz 46), `reverseChargeRealEstateCents` for the Umsätze under the GrEStG, § 13b Abs. 2 Nr. 3 (Kz 73), `reverseChargeOtherCents` for the other § 13b Abs. 2 supplies (Kz 84); the tax fields split the ledger's § 13b output tax, each 19 % of its base and the last the rest, so they sum to the ledger, and the reconciliation checks Kz 67 against Kz 47+74+85. The fields carry the texts of section D of the USt 1 A 2026 (BMF, 29.12.2025), character for character: Kz 46 "Sonstige Leistungen nach § 3a Absatz 2 UStG eines im übrigen Gemeinschaftsgebiet ansässigen Unternehmers (§ 13b Absatz 1 UStG)", Kz 73 "Umsätze, die unter das GrEStG fallen (§ 13b Absatz 2 Nummer 3 UStG)", Kz 84 "Andere Leistungen (§ 13b Absatz 2 Nummer 1, 2, 4 bis 12 UStG)". Without scenario bases the module derives the 19 % bases from the output-tax account movements and marks them `(derived)`.
29
29
  - **Kz 69 (tax owed on other grounds)**, Zeile 47 of the USt 1 A 2026: "In Rechnungen unrichtig oder unberechtigt ausgewiesene Steuerbeträge (§ 14c UStG) sowie Steuerbeträge, die nach § 6a Absatz 4 Satz 2, § 17 Absatz 1 Satz 7, § 25b Absatz 2 UStG oder von einem Auslagerer oder Lagerhalter nach § 27 Absatz 40a UStG geschuldet werden" — e.g. the VAT a Kleinunternehmer's invoice states, or the tax the last buyer of a triangular transaction owes. The chart data maps no account to it, so the caller states it as `otherTaxOwed: { cents, onOutputAccountsCents? }`; it is added to Kz 83, and the part booked on the domestic output-tax accounts (`onOutputAccountsCents`) is left out of the domestic reconciliation, which has no base for it in Kz 81 or 86.
30
+ - **Kz 70 (the day of the change from the Kleinunternehmer scheme)**, Zeile 12 of the USt 1 A 2026: "Wechsel von der Kleinunternehmer-Regelung (§ 19 UStG) zur Regelbesteuerung – Datum des Wechsels". Per the Anleitung zur UStVA 2026 (p. 8) the day of the supply by which the running year's Gesamtumsatz exceeded 100 000 € (in the year the business started, 25 000 €), or 1 January for a waiver of § 19 Abs. 3 UStG from the running year; none where the previous year exceeded 25 000 €. The caller states it as `smallBusinessChangeOn` (`YYYY-MM-DD`) in the return of the period that contains it; it comes back in `dateFields` (`IKennzahlDateValue`: `kennzahl`, `value`, `label`), apart from the amounts. A day that is none, or one outside a `period` of the shape `YYYY-MM`, `YYYY-Qn` or `YYYY`, is an issue and is not returned.
30
31
  - **Kz 83 (Zahllast/Erstattung)** is computed the way the form computes it, including an optional Sondervorauszahlung credit (Kz 39, Dauerfristverlängerung).
31
32
  - **Reconciliation**: the ledger's output-tax balances are compared against the form computation; small drift from base truncation and per-invoice rounding is reported, drift beyond the tolerance (default 5.00 EUR) becomes an issue. igE and §13b input/output tax symmetry is checked too.
32
33
  - **Loud failures**: revenue accounts without a UStVA mapping, unknown revenue-class accounts, undifferentiated output-VAT balances, and output VAT on the intra-EU acquisition of new vehicles from suppliers without a VAT ID (SKR 03 1784, SKR 04 3834, which this module does not compute) land in `issues`. **Do not generate a filing while `issues` is non-empty.**
@@ -88,16 +89,26 @@ const status = tax.smallBusinessStatusOf({
88
89
  previousYearCents: tax.gesamtumsatzOf(receipts, 2025).totalCents,
89
90
  receipts, // [{ receivedOn: '2026-03-01', entgeltCents: 120000, part: 'counted' }, …]
90
91
  });
91
- // { atStart: 'exempt', reason: 'within_limits', endsWith?: { receivedOn, index, runningCents }, runningCents }
92
+ // { atStart: 'exempt', reason: 'within_limits', runningLimitCents: 10000000, endsWith?: { receivedOn, index, runningCents }, runningCents }
92
93
  ```
93
94
 
94
95
  `endsWith` names the receipt by which the running year first exceeds
95
- 100 000 €; it and every later one are taxed. A waiver (§ 19 Abs. 3) makes the
96
- year `taxable`; `smallBusinessWaiverDeadline`, `…BindsUntil` and
97
- `…RevocableFrom` give its dates. The year the business starts answers
98
- `unknown`: the statute names no limit for it. So does a year before 2025
99
- (`before_2025`), under the version with other limits (22 000 € / 50 000 €,
100
- with the tax). The rules cover businesses resident in Germany or the areas of
96
+ `runningLimitCents` (100 000 €); it and every later one are taxed. A waiver
97
+ (§ 19 Abs. 3) makes the year `taxable`; `smallBusinessWaiverDeadline`,
98
+ `…BindsUntil` and `…RevocableFrom` give its dates.
99
+
100
+ The year the business starts (`previousYearCents: 'business_started'`) has no
101
+ previous year, and the statute names no limit of its own for it. The reasoning
102
+ of the Jahressteuergesetz 2024 (BT-Drs. 20/12780, p. 183 f.) does: the running
103
+ year's Gesamtumsatz must not exceed 25 000 €, and the supply by which it does is
104
+ taxed already. So that year starts `exempt` (`business_started_this_year`) with
105
+ `runningLimitCents` 25 000 € (`SMALL_BUSINESS_FOUNDING_YEAR_LIMIT_CENTS`), and
106
+ `endsWith` names the receipt above it. A part of a year is not converted to a
107
+ whole year any longer (same source, zu Abs. 2): three months with 24 000 € are
108
+ 24 000 €, in the year the business starts and as the next year's previous year.
109
+
110
+ A year before 2025 answers `unknown` (`before_2025`), under the version with
111
+ other limits (22 000 € / 50 000 €, with the tax). The rules cover businesses resident in Germany or the areas of
101
112
  § 1 Abs. 3 UStG; the new vehicles of § 19 Abs. 6 are not modelled.
102
113
 
103
114
  ## German VAT rates, dated
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@fin.cx/tax',
6
- version: '2.4.1',
6
+ version: '2.6.0',
7
7
  description: 'German tax computation engine: UStVA Kennzahl aggregation from ledger balances with form rounding, Zahllast and reconciliation checks — exact cents'
8
8
  }
@@ -30,14 +30,29 @@
30
30
  * tax) and did not exempt the supplies but levied no tax on them; a year
31
31
  * before 2025 answers `before_2025` and is not told.
32
32
  *
33
- * Not read: the BMF-Schreiben of 18 March 2025 (UStAE Abschn. 19.1 ff.),
34
- * which the BMF site did not serve. Two questions it answers stay open here:
35
- * the limit in the year the business starts, which the statute does not name
36
- * (`business_started_this_year` answers `unknown`), and whether the supply by
37
- * which the running year exceeds 100 000 € is itself taxed. The statute's
38
- * wording (the running year's Gesamtumsatz "nicht überschreitet") is read so
39
- * that it is: `endsWith` names the receipt at which the sum first exceeds the
40
- * limit, and every receipt from it on is taxed.
33
+ * The year the business starts: the statute names no limit of its own for it
34
+ * (there is no previous year). The reasoning of the Jahressteuergesetz 2024
35
+ * (BT-Drs. 20/12780, read on dserver.bundestag.de 2026-09-30, p. 183 f., zu
36
+ * § 19 Abs. 1) does: "Nimmt der Unternehmer seine gewerbliche oder berufliche
37
+ * Tätigkeit auf, ist § 19 Absatz 1 Satz 1 UStG mit der Maßgabe anzuwenden,
38
+ * dass der Gesamtumsatz im laufenden Kalenderjahr den Betrag von 25 000 Euro
39
+ * nicht überschreitet. Bereits der Umsatz, mit dem die Grenze überschritten
40
+ * wird, unterliegt der Regelbesteuerung." (Art. 288a Abs. 1 UAbs. 3 RL
41
+ * 2006/112 EG); "Die bis zum Zeitpunkt der Überschreitung bewirkten Umsätze
42
+ * sind steuerfrei." And zu Abs. 2: "Übt der Unternehmer seine gewerbliche
43
+ * oder berufliche Tätigkeit nur für einen Teil des Kalenderjahres aus,
44
+ * entfällt die bisherige Umrechnung in einen Jahresgesamtumsatz": a part of a
45
+ * year counts as it is, in the year the business starts and as the next
46
+ * year's previous year. The Anleitung zur Umsatzsteuer-Voranmeldung 2026
47
+ * (p. 8, Zeile 12) reads the founding year the same way.
48
+ *
49
+ * The supply by which the running year exceeds 100 000 €: the reasoning says
50
+ * the scheme no longer applies "ab diesem Zeitpunkt", and the statute exempts
51
+ * a supply while the running year's Gesamtumsatz "nicht überschreitet"; both
52
+ * are read so that it is taxed: `endsWith` names the receipt at which the sum
53
+ * first exceeds the limit, and every receipt from it on is taxed. Not read:
54
+ * the BMF-Schreiben of 18 March 2025 (UStAE Abschn. 19.1 ff.), which the BMF
55
+ * site did not serve.
41
56
  */
42
57
  import type { TCents } from '@fin.cx/calculation';
43
58
 
@@ -48,6 +63,8 @@ export const SMALL_BUSINESS_FIRST_YEAR = 2025;
48
63
  export const SMALL_BUSINESS_PREVIOUS_YEAR_LIMIT_CENTS: TCents = 2_500_000;
49
64
  /** 100 000 €: the running calendar year's limit (§ 19 Abs. 1 Satz 1 UStG) */
50
65
  export const SMALL_BUSINESS_RUNNING_YEAR_LIMIT_CENTS: TCents = 10_000_000;
66
+ /** 25 000 €: the running calendar year's limit in the year the business starts (BT-Drs. 20/12780, p. 183 f., zu § 19 Abs. 1 UStG) */
67
+ export const SMALL_BUSINESS_FOUNDING_YEAR_LIMIT_CENTS: TCents = 2_500_000;
51
68
 
52
69
  /**
53
70
  * What a receipt is to the Gesamtumsatz (§ 19 Abs. 2 UStG):
@@ -83,7 +100,12 @@ export interface IGesamtumsatzOfYear {
83
100
  leftOutCents: Record<Exclude<TGesamtumsatzPart, 'counted'>, TCents>;
84
101
  }
85
102
 
86
- /** Why a year starts with the exemption or without it. */
103
+ /**
104
+ * Why a year starts with the exemption or without it. `within_limits` and
105
+ * `business_started_this_year` start it exempt: the one by the previous
106
+ * year's Gesamtumsatz, the other as the year the business starts, which has
107
+ * none (its running limit is 25 000 €).
108
+ */
87
109
  export type TSmallBusinessReason =
88
110
  | 'within_limits'
89
111
  | 'previous_year_over'
@@ -114,9 +136,17 @@ export interface ISmallBusinessStatus {
114
136
  atStart: 'exempt' | 'taxable' | 'unknown';
115
137
  reason: TSmallBusinessReason;
116
138
  /**
117
- * Where the year starts exempt and its Gesamtumsatz exceeds 100 000 €: the
118
- * receipt by which it first does (its day, its place in the receipts as
119
- * given, the sum with it). It and every later receipt are taxed.
139
+ * Where the year starts exempt: the running year's Gesamtumsatz up to which
140
+ * it stays exempt, 100 000 € (`SMALL_BUSINESS_RUNNING_YEAR_LIMIT_CENTS`), or
141
+ * 25 000 € in the year the business starts
142
+ * (`SMALL_BUSINESS_FOUNDING_YEAR_LIMIT_CENTS`)
143
+ */
144
+ runningLimitCents?: TCents;
145
+ /**
146
+ * Where the year starts exempt and its Gesamtumsatz exceeds
147
+ * `runningLimitCents`: the receipt by which it first does (its day, its
148
+ * place in the receipts as given, the sum with it). It and every later
149
+ * receipt are taxed.
120
150
  */
121
151
  endsWith?: { receivedOn: string; index: number; runningCents: TCents };
122
152
  /** the year's Gesamtumsatz over all its receipts */
@@ -173,7 +203,9 @@ export function gesamtumsatzOf(receiptsArg: readonly IGesamtumsatzReceipt[], yea
173
203
  * Whether a calendar year's supplies are exempt under § 19 Abs. 1 UStG: from
174
204
  * its start where the previous year's Gesamtumsatz did not exceed 25 000 € and
175
205
  * no waiver is in force, until the receipt by which the running year's
176
- * Gesamtumsatz exceeds 100 000 € (`endsWith`).
206
+ * Gesamtumsatz exceeds 100 000 € (`endsWith`). In the year the business
207
+ * starts (`previousYearCents: 'business_started'`) from its start, until the
208
+ * receipt by which it exceeds 25 000 €, counted as it is, not as a whole year.
177
209
  */
178
210
  export function smallBusinessStatusOf(inputArg: ISmallBusinessYearInput): ISmallBusinessStatus {
179
211
  assertYear(inputArg.year);
@@ -197,23 +229,23 @@ export function smallBusinessStatusOf(inputArg: ISmallBusinessYearInput): ISmall
197
229
  if (inputArg.waived === true) {
198
230
  return { ...base, atStart: 'taxable', reason: 'waived' };
199
231
  }
200
- if (previous === 'business_started') {
201
- return { ...base, atStart: 'unknown', reason: 'business_started_this_year' };
202
- }
203
232
  if (previous === undefined) {
204
233
  return { ...base, atStart: 'unknown', reason: 'previous_year_unknown' };
205
234
  }
206
- if (previous > SMALL_BUSINESS_PREVIOUS_YEAR_LIMIT_CENTS) {
235
+ if (previous !== 'business_started' && previous > SMALL_BUSINESS_PREVIOUS_YEAR_LIMIT_CENTS) {
207
236
  return { ...base, atStart: 'taxable', reason: 'previous_year_over' };
208
237
  }
238
+ const reason: TSmallBusinessReason = previous === 'business_started' ? 'business_started_this_year' : 'within_limits';
239
+ const runningLimitCents = previous === 'business_started' ? SMALL_BUSINESS_FOUNDING_YEAR_LIMIT_CENTS : SMALL_BUSINESS_RUNNING_YEAR_LIMIT_CENTS;
240
+ const exempt = { ...base, atStart: 'exempt' as const, reason, runningLimitCents };
209
241
  let sum = 0;
210
242
  for (const { receipt, index } of counted) {
211
243
  sum += receipt.entgeltCents;
212
- if (sum > SMALL_BUSINESS_RUNNING_YEAR_LIMIT_CENTS) {
213
- return { ...base, atStart: 'exempt', reason: 'within_limits', endsWith: { receivedOn: receipt.receivedOn, index, runningCents: sum } };
244
+ if (sum > runningLimitCents) {
245
+ return { ...exempt, endsWith: { receivedOn: receipt.receivedOn, index, runningCents: sum } };
214
246
  }
215
247
  }
216
- return { ...base, atStart: 'exempt', reason: 'within_limits' };
248
+ return exempt;
217
249
  }
218
250
 
219
251
  /** The last calendar year a waiver effective for `yearArg` binds (§ 19 Abs. 3 Satz 3 UStG: at least five calendar years). */
package/ts/ustva.ts CHANGED
@@ -22,6 +22,7 @@ import { vatFromNetCents, type TCents } from '@fin.cx/calculation';
22
22
  import { getChart, type IChartAccount } from '@fin.cx/chartdata';
23
23
  import { VAT_ACCOUNTS } from './ustva.accounts.js';
24
24
  import type {
25
+ IKennzahlDateValue,
25
26
  IKennzahlValue,
26
27
  IUstvaInput,
27
28
  IUstvaResult,
@@ -59,6 +60,7 @@ export const USTVA_KENNZAHL_LABELS: Readonly<Record<number, string>> = {
59
60
  67: 'Vorsteuer aus Leistungen im Sinne des §13b UStG',
60
61
  69: 'In Rechnungen unrichtig oder unberechtigt ausgewiesene Steuerbeträge (§ 14c UStG) sowie Steuerbeträge, die nach § 6a Absatz 4 Satz 2, § 17 Absatz 1 Satz 7, § 25b Absatz 2 UStG oder von einem Auslagerer oder Lagerhalter nach § 27 Absatz 40a UStG geschuldet werden',
61
62
  39: 'Anrechnung der Sondervorauszahlung (Dauerfristverlängerung)',
63
+ 70: 'Wechsel von der Kleinunternehmer-Regelung (§ 19 UStG) zur Regelbesteuerung – Datum des Wechsels',
62
64
  83: 'Verbleibende Umsatzsteuer-Vorauszahlung / Überschuss',
63
65
  };
64
66
 
@@ -75,6 +77,37 @@ export const USTVA_KENNZAHL_LABELS: Readonly<Record<number, string>> = {
75
77
  */
76
78
  export const USTVA_KENNZAHL_ORDER: readonly number[] = [81, 86, 87, 41, 43, 48, 89, 93, 46, 47, 73, 74, 84, 85, 60, 21, 45, 66, 61, 62, 67, 69, 39, 83];
77
79
 
80
+ /** Whether `valueArg` is a calendar day written `YYYY-MM-DD`. */
81
+ function isCalendarDay(valueArg: string): boolean {
82
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(valueArg)) return false;
83
+ const date = new Date(`${valueArg}T00:00:00Z`);
84
+ return !Number.isNaN(date.getTime()) && date.toISOString().slice(0, 10) === valueArg;
85
+ }
86
+
87
+ /**
88
+ * The first and last day of a period label `YYYY-MM`, `YYYY-Qn` or `YYYY`;
89
+ * undefined for a label of another shape, which is informational only.
90
+ */
91
+ function daysOfPeriod(periodArg: string): { first: string; last: string } | undefined {
92
+ const lastDayOf = (yearArg: number, monthArg: number): string =>
93
+ new Date(Date.UTC(yearArg, monthArg, 0)).toISOString().slice(0, 10);
94
+ const pad = (valueArg: number): string => String(valueArg).padStart(2, '0');
95
+ let match = /^(\d{4})-(\d{2})$/.exec(periodArg);
96
+ if (match) {
97
+ const year = Number(match[1]);
98
+ const month = Number(match[2]);
99
+ return month >= 1 && month <= 12 ? { first: `${match[1]}-${pad(month)}-01`, last: lastDayOf(year, month) } : undefined;
100
+ }
101
+ match = /^(\d{4})-Q([1-4])$/.exec(periodArg);
102
+ if (match) {
103
+ const year = Number(match[1]);
104
+ const lastMonth = Number(match[2]) * 3;
105
+ return { first: `${match[1]}-${pad(lastMonth - 2)}-01`, last: lastDayOf(year, lastMonth) };
106
+ }
107
+ match = /^(\d{4})$/.exec(periodArg);
108
+ return match ? { first: `${match[1]}-01-01`, last: `${match[1]}-12-31` } : undefined;
109
+ }
110
+
78
111
  /** full euros, cents truncated toward zero (form rule for bases) */
79
112
  function truncateToEur(cents: TCents): number {
80
113
  return Math.trunc(cents / 100);
@@ -355,6 +388,22 @@ export function computeUstva(input: IUstvaInput): IUstvaResult {
355
388
  }
356
389
  }
357
390
 
391
+ // ---- Kz 70: the day of the change from the Kleinunternehmer scheme ------
392
+ const dateFields: IKennzahlDateValue[] = [];
393
+ const changeOn = input.smallBusinessChangeOn;
394
+ if (changeOn !== undefined) {
395
+ const period = daysOfPeriod(input.period);
396
+ if (!isCalendarDay(changeOn)) {
397
+ issues.push(`Kz 70 (the day of the change from the Kleinunternehmer scheme) ${changeOn} is no calendar day (YYYY-MM-DD)`);
398
+ } else if (period && (changeOn < period.first || changeOn > period.last)) {
399
+ issues.push(
400
+ `Kz 70 (the day of the change from the Kleinunternehmer scheme) ${changeOn} lies outside the period ${input.period} — it belongs in the return of the period that contains it`,
401
+ );
402
+ } else {
403
+ dateFields.push({ kennzahl: 70, value: changeOn, label: USTVA_KENNZAHL_LABELS[70] });
404
+ }
405
+ }
406
+
358
407
  return {
359
408
  chart: input.chart,
360
409
  year: input.year,
@@ -369,5 +418,6 @@ export function computeUstva(input: IUstvaInput): IUstvaResult {
369
418
  checks,
370
419
  },
371
420
  issues,
421
+ dateFields,
372
422
  };
373
423
  }
package/ts/ustva.types.ts CHANGED
@@ -88,6 +88,17 @@ export interface IUstvaInput {
88
88
  * line. The chart data maps no account to it, so the caller states it.
89
89
  */
90
90
  otherTaxOwed?: IOtherTaxOwedInput;
91
+ /**
92
+ * Kz 70 (Zeile 12 of the USt 1 A 2026, "Wechsel von der
93
+ * Kleinunternehmer-Regelung (§ 19 UStG) zur Regelbesteuerung – Datum des
94
+ * Wechsels"), `YYYY-MM-DD`: per the Anleitung zur UStVA 2026 (p. 8) the
95
+ * day of the supply by which the running year's Gesamtumsatz exceeded
96
+ * 100 000 € (in the year the business started, 25 000 €), or 1 January
97
+ * where a waiver of § 19 Abs. 3 UStG takes effect with the running year;
98
+ * none where the previous year exceeded 25 000 €. Stated in the return of
99
+ * the period that contains it; a day outside `period` is an issue.
100
+ */
101
+ smallBusinessChangeOn?: string;
91
102
  /** revenue accounts intentionally outside the UStVA (no issue raised) */
92
103
  exemptAccounts?: string[];
93
104
  /** override the built-in per-chart VAT account table */
@@ -102,6 +113,14 @@ export interface IUstvaInput {
102
113
 
103
114
  export type TKennzahlKind = 'baseEur' | 'taxCents';
104
115
 
116
+ /** A field of the form that carries a day, not an amount (Kz 70). */
117
+ export interface IKennzahlDateValue {
118
+ kennzahl: number;
119
+ /** `YYYY-MM-DD` */
120
+ value: string;
121
+ label: string;
122
+ }
123
+
105
124
  export interface IKennzahlValue {
106
125
  kennzahl: number;
107
126
  kind: TKennzahlKind;
@@ -134,4 +153,6 @@ export interface IUstvaResult {
134
153
  reconciliation: IUstvaReconciliation;
135
154
  /** hard problems — a filing must not be generated while non-empty */
136
155
  issues: string[];
156
+ /** the fields that carry a day (Kz 70), in form order; empty where none is stated */
157
+ dateFields: IKennzahlDateValue[];
137
158
  }