@fin.cx/tax 2.1.0 → 2.2.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.1.0',
6
+ version: '2.2.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
@@ -2,14 +2,15 @@ import type { IUstvaInput, IUstvaResult } from './ustva.types.js';
2
2
  /**
3
3
  * The labels of the Kennzahlen this module fills. Kz 21, 45 and 87 carry the
4
4
  * titles of their fields in ELSTER's "Anleitung zur UStVA 2026" (read
5
- * 2026-09-25).
5
+ * 2026-09-25); Kz 46, 73 and 84, the fields of section D of the USt 1 A 2026
6
+ * (BMF, 29.12.2025), their texts there.
6
7
  */
7
8
  export declare const USTVA_KENNZAHL_LABELS: Readonly<Record<number, string>>;
8
9
  /**
9
10
  * The Kennzahlen this module fills, in the order of the UStVA 2026 form
10
11
  * (ELSTER, "Anleitung zur UStVA 2026"): taxable supplies (81, 86, 87), tax-free
11
12
  * supplies (41, 43, 48), intra-Community acquisitions (89, 93), the tax the
12
- * recipient owes (46/47, 84/85), supplies whose recipient owes the tax (60),
13
+ * recipient owes (46/47, 73/74, 84/85), supplies whose recipient owes the tax (60),
13
14
  * services in the rest of the Community (21), other non-taxable turnover (45),
14
15
  * input tax (66, 61, 62, 67), the Sondervorauszahlung (39) and the result (83).
15
16
  * A Kennzahl computed but not listed here is reported as an issue, never
package/dist_ts/ustva.js CHANGED
@@ -24,7 +24,8 @@ import { VAT_ACCOUNTS } from './ustva.accounts.js';
24
24
  /**
25
25
  * The labels of the Kennzahlen this module fills. Kz 21, 45 and 87 carry the
26
26
  * titles of their fields in ELSTER's "Anleitung zur UStVA 2026" (read
27
- * 2026-09-25).
27
+ * 2026-09-25); Kz 46, 73 and 84, the fields of section D of the USt 1 A 2026
28
+ * (BMF, 29.12.2025), their texts there.
28
29
  */
29
30
  export const USTVA_KENNZAHL_LABELS = {
30
31
  81: 'Steuerpflichtige Umsätze 19 %',
@@ -35,9 +36,11 @@ export const USTVA_KENNZAHL_LABELS = {
35
36
  41: 'Steuerfreie innergemeinschaftliche Lieferungen',
36
37
  43: 'Steuerfreie Umsätze mit Vorsteuerabzug (u. a. Ausfuhr)',
37
38
  48: 'Steuerfreie Umsätze ohne Vorsteuerabzug',
38
- 46: 'Sonstige Leistungen aus dem übrigen Gemeinschaftsgebiet (§13b)',
39
+ 46: 'Sonstige Leistungen nach § 3a Absatz 2 UStG eines im übrigen Gemeinschaftsgebiet ansässigen Unternehmers (§ 13b Absatz 1 UStG)',
39
40
  47: 'Steuer zu Kennzahl 46',
40
- 84: 'Andere Leistungen eines im Ausland ansässigen Unternehmers (§13b)',
41
+ 73: 'Umsätze, die unter das GrEStG fallen (§ 13b Absatz 2 Nummer 3 UStG)',
42
+ 74: 'Steuer zu Kennzahl 73',
43
+ 84: 'Andere Leistungen (§ 13b Absatz 2 Nummer 1, 2, 4 bis 12 UStG)',
41
44
  85: 'Steuer zu Kennzahl 84',
42
45
  60: 'Steuerpflichtige Umsätze, für die der Leistungsempfänger die Steuer schuldet (§13b)',
43
46
  21: 'Sonstige Leistungen im übrigen Gemeinschaftsgebiet',
@@ -53,13 +56,13 @@ export const USTVA_KENNZAHL_LABELS = {
53
56
  * The Kennzahlen this module fills, in the order of the UStVA 2026 form
54
57
  * (ELSTER, "Anleitung zur UStVA 2026"): taxable supplies (81, 86, 87), tax-free
55
58
  * supplies (41, 43, 48), intra-Community acquisitions (89, 93), the tax the
56
- * recipient owes (46/47, 84/85), supplies whose recipient owes the tax (60),
59
+ * recipient owes (46/47, 73/74, 84/85), supplies whose recipient owes the tax (60),
57
60
  * services in the rest of the Community (21), other non-taxable turnover (45),
58
61
  * input tax (66, 61, 62, 67), the Sondervorauszahlung (39) and the result (83).
59
62
  * A Kennzahl computed but not listed here is reported as an issue, never
60
63
  * dropped.
61
64
  */
62
- export const USTVA_KENNZAHL_ORDER = [81, 86, 87, 41, 43, 48, 89, 93, 46, 47, 84, 85, 60, 21, 45, 66, 61, 62, 67, 39, 83];
65
+ 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, 39, 83];
63
66
  /** full euros, cents truncated toward zero (form rule for bases) */
64
67
  function truncateToEur(cents) {
65
68
  return Math.trunc(cents / 100);
@@ -174,30 +177,34 @@ export function computeUstva(input) {
174
177
  const kz93Cents = scenario.intraEuAcquisitionReducedCents ?? 0;
175
178
  let kz46Cents = scenario.reverseChargeServicesEuCents ?? 0;
176
179
  let kz46Source = '(scenario)';
180
+ const kz73Cents = scenario.reverseChargeRealEstateCents ?? 0;
177
181
  const kz84Cents = scenario.reverseChargeOtherCents ?? 0;
178
182
  const hasRcScenario = scenario.reverseChargeServicesEuCents !== undefined ||
183
+ scenario.reverseChargeRealEstateCents !== undefined ||
179
184
  scenario.reverseChargeOtherCents !== undefined;
180
185
  if (!hasRcScenario && ledgerRcOutputCents !== 0) {
181
186
  kz46Cents = Math.round((ledgerRcOutputCents * 100) / 19);
182
187
  kz46Source = '(derived)';
183
188
  derived.push(`Kz 46 derived from §13b output tax movement (${ledgerRcOutputCents} cents / 19 %) — split vs Kz 84 unknown without scenario bases`);
184
189
  }
185
- // §13b tax split: keep the total identical to the ledger movement
186
- let kz47Cents = 0;
187
- let kz85Cents = 0;
188
- if (kz46Cents !== 0 && kz84Cents !== 0) {
189
- kz47Cents = vatFromNetCents(kz46Cents, 19);
190
- kz85Cents = ledgerRcOutputCents - kz47Cents;
191
- }
192
- else if (kz84Cents !== 0) {
193
- kz85Cents = ledgerRcOutputCents;
194
- }
195
- else if (kz46Cents !== 0) {
196
- kz47Cents = ledgerRcOutputCents;
190
+ // §13b tax split over Kz 47, 74 and 85: each base's 19 %, the last base carrying what keeps the total identical to
191
+ // the ledger movement; a single base carries the whole movement
192
+ const rcTaxCents = new Map();
193
+ const rcBases = [[47, kz46Cents], [74, kz73Cents], [85, kz84Cents]].filter(([, cents]) => cents !== 0);
194
+ if (rcBases.length > 0) {
195
+ let rest = ledgerRcOutputCents;
196
+ rcBases.forEach(([taxKennzahl, baseCents], index) => {
197
+ const cents = index === rcBases.length - 1 ? rest : vatFromNetCents(baseCents, 19);
198
+ rcTaxCents.set(taxKennzahl, cents);
199
+ rest -= cents;
200
+ });
197
201
  }
198
202
  else if (ledgerRcOutputCents !== 0) {
199
- kz47Cents = ledgerRcOutputCents; // derived path above set Kz 46
203
+ rcTaxCents.set(47, ledgerRcOutputCents); // derived path above set Kz 46
200
204
  }
205
+ const kz47Cents = rcTaxCents.get(47) ?? 0;
206
+ const kz74Cents = rcTaxCents.get(74) ?? 0;
207
+ const kz85Cents = rcTaxCents.get(85) ?? 0;
201
208
  // consistency: scenario bases × rate must reproduce the ledger tax
202
209
  if (kz89Source === '(scenario)' && kz89Cents !== 0) {
203
210
  const expected = vatFromNetCents(kz89Cents, 19);
@@ -208,7 +215,7 @@ export function computeUstva(input) {
208
215
  }
209
216
  }
210
217
  if (hasRcScenario) {
211
- const expected = vatFromNetCents(kz46Cents, 19) + vatFromNetCents(kz84Cents, 19);
218
+ const expected = vatFromNetCents(kz46Cents, 19) + vatFromNetCents(kz73Cents, 19) + vatFromNetCents(kz84Cents, 19);
212
219
  const diff = ledgerRcOutputCents - expected;
213
220
  checks.push(`§13b: ledger output tax ${ledgerRcOutputCents} vs 19 % of scenario bases ${expected} (diff ${diff})`);
214
221
  if (Math.abs(diff) > tolerance) {
@@ -243,6 +250,10 @@ export function computeUstva(input) {
243
250
  put(46, 'baseEur', truncateToEur(kz46Cents), [kz46Source]);
244
251
  if (kz47Cents !== 0)
245
252
  put(47, 'taxCents', kz47Cents, VAT_ACCOUNTS[input.chart].outputReverseCharge);
253
+ if (kz73Cents !== 0)
254
+ put(73, 'baseEur', truncateToEur(kz73Cents), ['(scenario)']);
255
+ if (kz74Cents !== 0)
256
+ put(74, 'taxCents', kz74Cents, VAT_ACCOUNTS[input.chart].outputReverseCharge);
246
257
  if (kz84Cents !== 0)
247
258
  put(84, 'baseEur', truncateToEur(kz84Cents), ['(scenario)']);
248
259
  if (kz85Cents !== 0)
@@ -258,6 +269,7 @@ export function computeUstva(input) {
258
269
  const zahllastCents = formDomesticTaxCents +
259
270
  formIgeTaxCents +
260
271
  kz47Cents +
272
+ kz74Cents +
261
273
  kz85Cents -
262
274
  inputTaxCents -
263
275
  sondervorauszahlung;
@@ -273,9 +285,11 @@ export function computeUstva(input) {
273
285
  if (kzValue(61) !== 0 || ledgerIgeOutputCents !== 0) {
274
286
  checks.push(`igE input vs output tax: Kz 61 ${kzValue(61)} vs ledger igE output ${ledgerIgeOutputCents} (diff ${igeDeductionDiff}; non-zero = partial deduction or inconsistency)`);
275
287
  }
276
- const rcDeductionDiff = kzValue(67) - (kz47Cents + kz85Cents);
277
- if (kzValue(67) !== 0 || kz47Cents !== 0 || kz85Cents !== 0) {
278
- checks.push(`§13b input vs output tax: Kz 67 ${kzValue(67)} vs Kz 47+85 ${kz47Cents + kz85Cents} (diff ${rcDeductionDiff}; non-zero = partial deduction or inconsistency)`);
288
+ // every § 13b tax field the recipient owes, the GrEStG's Kz 74 included, against its deduction
289
+ const rcOutputCents = kz47Cents + kz74Cents + kz85Cents;
290
+ const rcDeductionDiff = kzValue(67) - rcOutputCents;
291
+ if (kzValue(67) !== 0 || kz47Cents !== 0 || kz74Cents !== 0 || kz85Cents !== 0) {
292
+ checks.push(`§13b input vs output tax: Kz 67 ${kzValue(67)} vs Kz 47+74+85 ${rcOutputCents} (diff ${rcDeductionDiff}; non-zero = partial deduction or inconsistency)`);
279
293
  }
280
294
  const kennzahlen = USTVA_KENNZAHL_ORDER.filter((kennzahl) => values.has(kennzahl)).map((kennzahl) => values.get(kennzahl));
281
295
  // a figure the form order does not place would be left out of the filing: say so instead
@@ -300,4 +314,4 @@ export function computeUstva(input) {
300
314
  issues,
301
315
  };
302
316
  }
303
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXN0dmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy91c3R2YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFzQixNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVNuRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQXFDO0lBQ3JFLEVBQUUsRUFBRSwrQkFBK0I7SUFDbkMsRUFBRSxFQUFFLDhCQUE4QjtJQUNsQyxFQUFFLEVBQUUsNERBQTREO0lBQ2hFLEVBQUUsRUFBRSxxQ0FBcUM7SUFDekMsRUFBRSxFQUFFLG9DQUFvQztJQUN4QyxFQUFFLEVBQUUsZ0RBQWdEO0lBQ3BELEVBQUUsRUFBRSx3REFBd0Q7SUFDNUQsRUFBRSxFQUFFLHlDQUF5QztJQUM3QyxFQUFFLEVBQUUsZ0VBQWdFO0lBQ3BFLEVBQUUsRUFBRSx1QkFBdUI7SUFDM0IsRUFBRSxFQUFFLG1FQUFtRTtJQUN2RSxFQUFFLEVBQUUsdUJBQXVCO0lBQzNCLEVBQUUsRUFBRSxxRkFBcUY7SUFDekYsRUFBRSxFQUFFLG9EQUFvRDtJQUN4RCxFQUFFLEVBQUUsZ0VBQWdFO0lBQ3BFLEVBQUUsRUFBRSw4Q0FBOEM7SUFDbEQsRUFBRSxFQUFFLDhDQUE4QztJQUNsRCxFQUFFLEVBQUUsaUNBQWlDO0lBQ3JDLEVBQUUsRUFBRSxpREFBaUQ7SUFDckQsRUFBRSxFQUFFLDZEQUE2RDtJQUNqRSxFQUFFLEVBQUUsc0RBQXNEO0NBQzNELENBQUM7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBc0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxF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
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXN0dmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy91c3R2YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFzQixNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVNuRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFxQztJQUNyRSxFQUFFLEVBQUUsK0JBQStCO0lBQ25DLEVBQUUsRUFBRSw4QkFBOEI7SUFDbEMsRUFBRSxFQUFFLDREQUE0RDtJQUNoRSxFQUFFLEVBQUUscUNBQXFDO0lBQ3pDLEVBQUUsRUFBRSxvQ0FBb0M7SUFDeEMsRUFBRSxFQUFFLGdEQUFnRDtJQUNwRCxFQUFFLEVBQUUsd0RBQXdEO0lBQzVELEVBQUUsRUFBRSx5Q0FBeUM7SUFDN0MsRUFBRSxFQUFFLGdJQUFnSTtJQUNwSSxFQUFFLEVBQUUsdUJBQXVCO0lBQzNCLEVBQUUsRUFBRSxxRUFBcUU7SUFDekUsRUFBRSxFQUFFLHVCQUF1QjtJQUMzQixFQUFFLEVBQUUsK0RBQStEO0lBQ25FLEVBQUUsRUFBRSx1QkFBdUI7SUFDM0IsRUFBRSxFQUFFLHFGQUFxRjtJQUN6RixFQUFFLEVBQUUsb0RBQW9EO0lBQ3hELEVBQUUsRUFBRSxnRUFBZ0U7SUFDcEUsRUFBRSxFQUFFLDhDQUE4QztJQUNsRCxFQUFFLEVBQUUsOENBQThDO0lBQ2xELEVBQUUsRUFBRSxpQ0FBaUM7SUFDckMsRUFBRSxFQUFFLGlEQUFpRDtJQUNyRCxFQUFFLEVBQUUsNkRBQTZEO0lBQ2pFLEVBQUUsRUFBRSxzREFBc0Q7Q0FDM0QsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFzQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVwSixvRUFBb0U7QUFDcEUsU0FBUyxhQUFhLENBQUMsS0FBYTtJQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsU0FBUyxZQUFZLENBQUMsT0FBZSxFQUFFLFdBQW1CO0lBQ3hELE9BQU8sT0FBTyxHQUFHLFdBQVcsQ0FBQztBQUMvQixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxLQUF3QixFQUFFLGFBQXFCO0lBQzNFLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxPQUFPLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxHQUFHLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBa0I7SUFDN0MsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlGLE1BQU0sV0FBVyxHQUFtQixFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMzRixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyw0QkFBNEIsSUFBSSxHQUFHLENBQUM7SUFDNUQsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBQzVCLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUU1QiwwRUFBMEU7SUFDMUUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDaEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDL0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7SUFDakQsTUFBTSxVQUFVLEdBQUcsQ0FDakIsTUFBMkIsRUFDM0IsUUFBZ0IsRUFDaEIsS0FBYSxFQUNiLGFBQXFCLEVBQ2YsRUFBRTtRQUNSLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUMxRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVELFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQztJQUVGLElBQUkseUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLElBQUksd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLElBQUksd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sZUFBZSxHQUFhLEVBQUUsQ0FBQztJQUVyQyxLQUFLLE1BQU0sUUFBUSxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2QyxJQUFJLFFBQVEsQ0FBQyxXQUFXLEtBQUssQ0FBQztZQUFFLFNBQVM7UUFDekMsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFFaEQsaURBQWlEO1FBQ2pELElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN2RCx5QkFBeUIsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUMxQyxTQUFTO1FBQ1gsQ0FBQztRQUNELElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN0RCx3QkFBd0IsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN6QyxTQUFTO1FBQ1gsQ0FBQztRQUNELElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN0RCx3QkFBd0IsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN6QyxTQUFTO1FBQ1gsQ0FBQztRQUNELElBQUksV0FBVyxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ2pFLG9CQUFvQixJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3JDLFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxXQUFXLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDNUQsbUJBQW1CLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDcEMsU0FBUztRQUNYLENBQUM7UUFDRCxJQUFJLFdBQVcsQ0FBQyxtQ0FBbUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUM1RSxNQUFNLENBQUMsSUFBSSxDQUNULFdBQVcsYUFBYSxxR0FBcUcsQ0FBQyxXQUFXLHNHQUFzRyxXQUFXLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ2hTLENBQUM7WUFDRixTQUFTO1FBQ1gsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkQsSUFBSSxPQUFPLElBQUksS0FBSyxJQUFJLE9BQU8sSUFBSSxLQUFLO2dCQUFFLFNBQVMsQ0FBQyxvQkFBb0I7WUFDeEUsSUFBSSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUNuRixNQUFNLENBQUMsSUFBSSxDQUNULHlCQUF5QixhQUFhLGtCQUFrQixLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLGdEQUFnRCxDQUNsSSxDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEMsQ0FBQztZQUNELFNBQVM7UUFDWCxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDbEMsK0RBQStEO2dCQUMvRCxVQUFVLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ2pGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixpREFBaUQ7Z0JBQ2pELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEtBQUssT0FBTyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzRixVQUFVLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDdEYsQ0FBQztZQUNELFNBQVM7UUFDWCxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNwRSxNQUFNLENBQUMsSUFBSSxDQUNULG1CQUFtQixhQUFhLEtBQUssT0FBTyxDQUFDLFdBQVcsOEVBQThFLENBQ3ZJLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBQ0QsSUFBSSx3QkFBd0IsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLENBQUMsSUFBSSxDQUNULCtDQUErQyx3QkFBd0IsMEVBQTBFLENBQ2xKLENBQUM7SUFDSixDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO0lBQzNDLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUU3QixJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsK0JBQStCLElBQUksQ0FBQyxDQUFDO0lBQzlELElBQUksVUFBVSxHQUFHLFlBQVksQ0FBQztJQUM5QixJQUFJLFFBQVEsQ0FBQywrQkFBK0IsS0FBSyxTQUFTLElBQUksb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekYsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxvQkFBb0IsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMxRCxVQUFVLEdBQUcsV0FBVyxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0NBQStDLG9CQUFvQixnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsOEJBQThCLElBQUksQ0FBQyxDQUFDO0lBRS9ELElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLENBQUM7SUFDM0QsSUFBSSxVQUFVLEdBQUcsWUFBWSxDQUFDO0lBQzlCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLENBQUM7SUFDN0QsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLHVCQUF1QixJQUFJLENBQUMsQ0FBQztJQUN4RCxNQUFNLGFBQWEsR0FDakIsUUFBUSxDQUFDLDRCQUE0QixLQUFLLFNBQVM7UUFDbkQsUUFBUSxDQUFDLDRCQUE0QixLQUFLLFNBQVM7UUFDbkQsUUFBUSxDQUFDLHVCQUF1QixLQUFLLFNBQVMsQ0FBQztJQUNqRCxJQUFJLENBQUMsYUFBYSxJQUFJLG1CQUFtQixLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hELFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsbUJBQW1CLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDekQsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUN6QixPQUFPLENBQUMsSUFBSSxDQUNWLGdEQUFnRCxtQkFBbUIsZ0VBQWdFLENBQ3BJLENBQUM7SUFDSixDQUFDO0lBRUQsbUhBQW1IO0lBQ25ILGdFQUFnRTtJQUNoRSxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBSSxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BJLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksR0FBRyxtQkFBbUIsQ0FBQztRQUMvQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbEQsTUFBTSxLQUFLLEdBQUcsS0FBSyxLQUFLLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkYsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkMsSUFBSSxJQUFJLEtBQUssQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7U0FBTSxJQUFJLG1CQUFtQixLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQywrQkFBK0I7SUFDMUUsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTFDLG1FQUFtRTtJQUNuRSxJQUFJLFVBQVUsS0FBSyxZQUFZLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ25ELE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsTUFBTSxJQUFJLEdBQUcsb0JBQW9CLEdBQUcsUUFBUSxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0JBQStCLG9CQUFvQiw2QkFBNkIsUUFBUSxVQUFVLElBQUksR0FBRyxDQUFDLENBQUM7UUFDdkgsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLElBQUksUUFBUSxDQUFDLENBQUM7UUFDaEcsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xILE1BQU0sSUFBSSxHQUFHLG1CQUFtQixHQUFHLFFBQVEsQ0FBQztRQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixtQkFBbUIsOEJBQThCLFFBQVEsVUFBVSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ25ILElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQztZQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLHVFQUF1RSxJQUFJLFFBQVEsQ0FBQyxDQUFDO1FBQ25HLENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBRXhCLDJFQUEyRTtJQUMzRSxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztJQUNqRCxNQUFNLEdBQUcsR0FBRyxDQUFDLFFBQWdCLEVBQUUsSUFBbUIsRUFBRSxLQUFhLEVBQUUsUUFBa0IsRUFBUSxFQUFFO1FBQzdGLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ2pELE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ25CLFFBQVE7WUFDUixJQUFJO1lBQ0osS0FBSztZQUNMLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxZQUFZLFFBQVEsRUFBRTtZQUNoRSxRQUFRO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFDRCxLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0MsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELElBQUksU0FBUyxLQUFLLENBQUM7UUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLElBQUksU0FBUyxLQUFLLENBQUM7UUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLElBQUksU0FBUyxLQUFLLENBQUM7UUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLElBQUksU0FBUyxLQUFLLENBQUM7UUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25HLElBQUksU0FBUyxLQUFLLENBQUM7UUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLElBQUksU0FBUyxLQUFLLENBQUM7UUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25HLElBQUksU0FBUyxLQUFLLENBQUM7UUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLElBQUksU0FBUyxLQUFLLENBQUM7UUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25HLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLHdCQUF3QixJQUFJLENBQUMsQ0FBQztJQUNoRSxJQUFJLG1CQUFtQixLQUFLLENBQUM7UUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFckYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUFnQixFQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7SUFFL0UsNEVBQTRFO0lBQzVFLE1BQU0sb0JBQW9CLEdBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckYsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sYUFBYSxHQUNqQixvQkFBb0I7UUFDcEIsZUFBZTtRQUNmLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULGFBQWE7UUFDYixtQkFBbUIsQ0FBQztJQUN0QixHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBRW5ELDZFQUE2RTtJQUM3RSxNQUFNLG9CQUFvQixHQUN4Qix5QkFBeUIsR0FBRyx3QkFBd0IsR0FBRyx3QkFBd0IsQ0FBQztJQUNsRixNQUFNLHdCQUF3QixHQUFHLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0lBQzdFLE1BQU0sQ0FBQyxJQUFJLENBQ1QsK0JBQStCLG9CQUFvQixZQUFZLG9CQUFvQixVQUFVLHdCQUF3QixHQUFHLENBQ3pILENBQUM7SUFDRixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUNuRCxNQUFNLENBQUMsSUFBSSxDQUNULDBFQUEwRSx3QkFBd0IscUJBQXFCLFNBQVMsa0NBQWtDLENBQ25LLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7SUFDNUQsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BELE1BQU0sQ0FBQyxJQUFJLENBQ1Qsa0NBQWtDLE9BQU8sQ0FBQyxFQUFFLENBQUMseUJBQXlCLG9CQUFvQixVQUFVLGdCQUFnQixrREFBa0QsQ0FDdkssQ0FBQztJQUNKLENBQUM7SUFDRCwrRkFBK0Y7SUFDL0YsTUFBTSxhQUFhLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDeEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQztJQUNwRCxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvRSxNQUFNLENBQUMsSUFBSSxDQUNULG1DQUFtQyxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixhQUFhLFVBQVUsZUFBZSxrREFBa0QsQ0FDMUosQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQ3BGLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBRSxDQUNwQyxDQUFDO0lBQ0YseUZBQXlGO0lBQ3pGLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLElBQUksQ0FDVCxZQUFZLFFBQVEsVUFBVSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUdBQWlHLENBQ3pKLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtRQUNwQixjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWMsSUFBSSxNQUFNO1FBQzlDLFVBQVU7UUFDVixhQUFhO1FBQ2IsY0FBYyxFQUFFO1lBQ2Qsb0JBQW9CO1lBQ3BCLGtCQUFrQixFQUFFLG9CQUFvQjtZQUN4Qyx3QkFBd0I7WUFDeEIsTUFBTTtTQUNQO1FBQ0QsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDIn0=
@@ -16,9 +16,11 @@ export interface IScenarioBaseInput {
16
16
  intraEuAcquisitionStandardCents?: TCents;
17
17
  /** igE 7 % net bases -> Kz 93 */
18
18
  intraEuAcquisitionReducedCents?: TCents;
19
- /** §13b sonstige Leistungen from the EU -> Kz 46/47 */
19
+ /** §13b Abs. 1: sonstige Leistungen of an entrepreneur established in another member state -> Kz 46/47 */
20
20
  reverseChargeServicesEuCents?: TCents;
21
- /** other §13b inputs -> Kz 84/85 */
21
+ /** §13b Abs. 2 Nr. 3: Umsätze, die unter das GrEStG fallen -> Kz 73/74 */
22
+ reverseChargeRealEstateCents?: TCents;
23
+ /** the other §13b inputs, Abs. 2 Nr. 1, 2, 4 bis 12 -> Kz 84/85 */
22
24
  reverseChargeOtherCents?: TCents;
23
25
  }
24
26
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fin.cx/tax",
3
- "version": "2.1.0",
3
+ "version": "2.2.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",
@@ -29,7 +29,7 @@
29
29
  "homepage": "https://code.foss.global/fin.cx/tax#readme",
30
30
  "dependencies": {
31
31
  "@fin.cx/calculation": "^1.1.1",
32
- "@fin.cx/chartdata": "^2.4.0"
32
+ "@fin.cx/chartdata": "^2.6.0"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@git.zone/tsbuild": "^5.0.0",
package/readme.md CHANGED
@@ -25,7 +25,7 @@ pnpm install @fin.cx/tax
25
25
  | Umsatzsteuer nach § 13b UStG 19 % | 1787 | 3837 |
26
26
  | igE of new vehicles from suppliers without a VAT ID (flagged) | 1784 | 3834 |
27
27
 
28
- - **igE and inbound §13b bases** (Kz 89/93, 46/47, 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`); without them the module derives the 19 % bases from the output-tax account movements and marks them `(derived)`.
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 83 (Zahllast/Erstattung)** is computed the way the form computes it, including an optional Sondervorauszahlung credit (Kz 39, Dauerfristverlängerung).
30
30
  - **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.
31
31
  - **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.**
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@fin.cx/tax',
6
- version: '2.1.0',
6
+ version: '2.2.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
  }
package/ts/ustva.ts CHANGED
@@ -32,7 +32,8 @@ import type {
32
32
  /**
33
33
  * The labels of the Kennzahlen this module fills. Kz 21, 45 and 87 carry the
34
34
  * titles of their fields in ELSTER's "Anleitung zur UStVA 2026" (read
35
- * 2026-09-25).
35
+ * 2026-09-25); Kz 46, 73 and 84, the fields of section D of the USt 1 A 2026
36
+ * (BMF, 29.12.2025), their texts there.
36
37
  */
37
38
  export const USTVA_KENNZAHL_LABELS: Readonly<Record<number, string>> = {
38
39
  81: 'Steuerpflichtige Umsätze 19 %',
@@ -43,9 +44,11 @@ export const USTVA_KENNZAHL_LABELS: Readonly<Record<number, string>> = {
43
44
  41: 'Steuerfreie innergemeinschaftliche Lieferungen',
44
45
  43: 'Steuerfreie Umsätze mit Vorsteuerabzug (u. a. Ausfuhr)',
45
46
  48: 'Steuerfreie Umsätze ohne Vorsteuerabzug',
46
- 46: 'Sonstige Leistungen aus dem übrigen Gemeinschaftsgebiet (§13b)',
47
+ 46: 'Sonstige Leistungen nach § 3a Absatz 2 UStG eines im übrigen Gemeinschaftsgebiet ansässigen Unternehmers (§ 13b Absatz 1 UStG)',
47
48
  47: 'Steuer zu Kennzahl 46',
48
- 84: 'Andere Leistungen eines im Ausland ansässigen Unternehmers (§13b)',
49
+ 73: 'Umsätze, die unter das GrEStG fallen (§ 13b Absatz 2 Nummer 3 UStG)',
50
+ 74: 'Steuer zu Kennzahl 73',
51
+ 84: 'Andere Leistungen (§ 13b Absatz 2 Nummer 1, 2, 4 bis 12 UStG)',
49
52
  85: 'Steuer zu Kennzahl 84',
50
53
  60: 'Steuerpflichtige Umsätze, für die der Leistungsempfänger die Steuer schuldet (§13b)',
51
54
  21: 'Sonstige Leistungen im übrigen Gemeinschaftsgebiet',
@@ -62,13 +65,13 @@ export const USTVA_KENNZAHL_LABELS: Readonly<Record<number, string>> = {
62
65
  * The Kennzahlen this module fills, in the order of the UStVA 2026 form
63
66
  * (ELSTER, "Anleitung zur UStVA 2026"): taxable supplies (81, 86, 87), tax-free
64
67
  * supplies (41, 43, 48), intra-Community acquisitions (89, 93), the tax the
65
- * recipient owes (46/47, 84/85), supplies whose recipient owes the tax (60),
68
+ * recipient owes (46/47, 73/74, 84/85), supplies whose recipient owes the tax (60),
66
69
  * services in the rest of the Community (21), other non-taxable turnover (45),
67
70
  * input tax (66, 61, 62, 67), the Sondervorauszahlung (39) and the result (83).
68
71
  * A Kennzahl computed but not listed here is reported as an issue, never
69
72
  * dropped.
70
73
  */
71
- export const USTVA_KENNZAHL_ORDER: readonly number[] = [81, 86, 87, 41, 43, 48, 89, 93, 46, 47, 84, 85, 60, 21, 45, 66, 61, 62, 67, 39, 83];
74
+ 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, 39, 83];
72
75
 
73
76
  /** full euros, cents truncated toward zero (form rule for bases) */
74
77
  function truncateToEur(cents: TCents): number {
@@ -206,9 +209,11 @@ export function computeUstva(input: IUstvaInput): IUstvaResult {
206
209
 
207
210
  let kz46Cents = scenario.reverseChargeServicesEuCents ?? 0;
208
211
  let kz46Source = '(scenario)';
212
+ const kz73Cents = scenario.reverseChargeRealEstateCents ?? 0;
209
213
  const kz84Cents = scenario.reverseChargeOtherCents ?? 0;
210
214
  const hasRcScenario =
211
215
  scenario.reverseChargeServicesEuCents !== undefined ||
216
+ scenario.reverseChargeRealEstateCents !== undefined ||
212
217
  scenario.reverseChargeOtherCents !== undefined;
213
218
  if (!hasRcScenario && ledgerRcOutputCents !== 0) {
214
219
  kz46Cents = Math.round((ledgerRcOutputCents * 100) / 19);
@@ -218,19 +223,23 @@ export function computeUstva(input: IUstvaInput): IUstvaResult {
218
223
  );
219
224
  }
220
225
 
221
- // §13b tax split: keep the total identical to the ledger movement
222
- let kz47Cents = 0;
223
- let kz85Cents = 0;
224
- if (kz46Cents !== 0 && kz84Cents !== 0) {
225
- kz47Cents = vatFromNetCents(kz46Cents, 19);
226
- kz85Cents = ledgerRcOutputCents - kz47Cents;
227
- } else if (kz84Cents !== 0) {
228
- kz85Cents = ledgerRcOutputCents;
229
- } else if (kz46Cents !== 0) {
230
- kz47Cents = ledgerRcOutputCents;
226
+ // §13b tax split over Kz 47, 74 and 85: each base's 19 %, the last base carrying what keeps the total identical to
227
+ // the ledger movement; a single base carries the whole movement
228
+ const rcTaxCents = new Map<number, number>();
229
+ const rcBases = ([[47, kz46Cents], [74, kz73Cents], [85, kz84Cents]] as Array<[number, number]>).filter(([, cents]) => cents !== 0);
230
+ if (rcBases.length > 0) {
231
+ let rest = ledgerRcOutputCents;
232
+ rcBases.forEach(([taxKennzahl, baseCents], index) => {
233
+ const cents = index === rcBases.length - 1 ? rest : vatFromNetCents(baseCents, 19);
234
+ rcTaxCents.set(taxKennzahl, cents);
235
+ rest -= cents;
236
+ });
231
237
  } else if (ledgerRcOutputCents !== 0) {
232
- kz47Cents = ledgerRcOutputCents; // derived path above set Kz 46
238
+ rcTaxCents.set(47, ledgerRcOutputCents); // derived path above set Kz 46
233
239
  }
240
+ const kz47Cents = rcTaxCents.get(47) ?? 0;
241
+ const kz74Cents = rcTaxCents.get(74) ?? 0;
242
+ const kz85Cents = rcTaxCents.get(85) ?? 0;
234
243
 
235
244
  // consistency: scenario bases × rate must reproduce the ledger tax
236
245
  if (kz89Source === '(scenario)' && kz89Cents !== 0) {
@@ -242,7 +251,7 @@ export function computeUstva(input: IUstvaInput): IUstvaResult {
242
251
  }
243
252
  }
244
253
  if (hasRcScenario) {
245
- const expected = vatFromNetCents(kz46Cents, 19) + vatFromNetCents(kz84Cents, 19);
254
+ const expected = vatFromNetCents(kz46Cents, 19) + vatFromNetCents(kz73Cents, 19) + vatFromNetCents(kz84Cents, 19);
246
255
  const diff = ledgerRcOutputCents - expected;
247
256
  checks.push(`§13b: ledger output tax ${ledgerRcOutputCents} vs 19 % of scenario bases ${expected} (diff ${diff})`);
248
257
  if (Math.abs(diff) > tolerance) {
@@ -274,6 +283,8 @@ export function computeUstva(input: IUstvaInput): IUstvaResult {
274
283
  if (kz93Cents !== 0) put(93, 'baseEur', truncateToEur(kz93Cents), ['(scenario)']);
275
284
  if (kz46Cents !== 0) put(46, 'baseEur', truncateToEur(kz46Cents), [kz46Source]);
276
285
  if (kz47Cents !== 0) put(47, 'taxCents', kz47Cents, VAT_ACCOUNTS[input.chart].outputReverseCharge);
286
+ if (kz73Cents !== 0) put(73, 'baseEur', truncateToEur(kz73Cents), ['(scenario)']);
287
+ if (kz74Cents !== 0) put(74, 'taxCents', kz74Cents, VAT_ACCOUNTS[input.chart].outputReverseCharge);
277
288
  if (kz84Cents !== 0) put(84, 'baseEur', truncateToEur(kz84Cents), ['(scenario)']);
278
289
  if (kz85Cents !== 0) put(85, 'taxCents', kz85Cents, VAT_ACCOUNTS[input.chart].outputReverseCharge);
279
290
  const sondervorauszahlung = input.sondervorauszahlungCents ?? 0;
@@ -290,6 +301,7 @@ export function computeUstva(input: IUstvaInput): IUstvaResult {
290
301
  formDomesticTaxCents +
291
302
  formIgeTaxCents +
292
303
  kz47Cents +
304
+ kz74Cents +
293
305
  kz85Cents -
294
306
  inputTaxCents -
295
307
  sondervorauszahlung;
@@ -313,10 +325,12 @@ export function computeUstva(input: IUstvaInput): IUstvaResult {
313
325
  `igE input vs output tax: Kz 61 ${kzValue(61)} vs ledger igE output ${ledgerIgeOutputCents} (diff ${igeDeductionDiff}; non-zero = partial deduction or inconsistency)`,
314
326
  );
315
327
  }
316
- const rcDeductionDiff = kzValue(67) - (kz47Cents + kz85Cents);
317
- if (kzValue(67) !== 0 || kz47Cents !== 0 || kz85Cents !== 0) {
328
+ // every § 13b tax field the recipient owes, the GrEStG's Kz 74 included, against its deduction
329
+ const rcOutputCents = kz47Cents + kz74Cents + kz85Cents;
330
+ const rcDeductionDiff = kzValue(67) - rcOutputCents;
331
+ if (kzValue(67) !== 0 || kz47Cents !== 0 || kz74Cents !== 0 || kz85Cents !== 0) {
318
332
  checks.push(
319
- `§13b input vs output tax: Kz 67 ${kzValue(67)} vs Kz 47+85 ${kz47Cents + kz85Cents} (diff ${rcDeductionDiff}; non-zero = partial deduction or inconsistency)`,
333
+ `§13b input vs output tax: Kz 67 ${kzValue(67)} vs Kz 47+74+85 ${rcOutputCents} (diff ${rcDeductionDiff}; non-zero = partial deduction or inconsistency)`,
320
334
  );
321
335
  }
322
336
 
package/ts/ustva.types.ts CHANGED
@@ -18,9 +18,11 @@ export interface IScenarioBaseInput {
18
18
  intraEuAcquisitionStandardCents?: TCents;
19
19
  /** igE 7 % net bases -> Kz 93 */
20
20
  intraEuAcquisitionReducedCents?: TCents;
21
- /** §13b sonstige Leistungen from the EU -> Kz 46/47 */
21
+ /** §13b Abs. 1: sonstige Leistungen of an entrepreneur established in another member state -> Kz 46/47 */
22
22
  reverseChargeServicesEuCents?: TCents;
23
- /** other §13b inputs -> Kz 84/85 */
23
+ /** §13b Abs. 2 Nr. 3: Umsätze, die unter das GrEStG fallen -> Kz 73/74 */
24
+ reverseChargeRealEstateCents?: TCents;
25
+ /** the other §13b inputs, Abs. 2 Nr. 1, 2, 4 bis 12 -> Kz 84/85 */
24
26
  reverseChargeOtherCents?: TCents;
25
27
  }
26
28