@fin.cx/tax 2.6.1 → 2.7.1
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/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/ustva.js +41 -17
- package/dist_ts/ustva.types.d.ts +12 -2
- package/package.json +6 -6
- package/readme.md +4 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/ustva.ts +41 -16
- package/ts/ustva.types.ts +12 -2
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@fin.cx/tax',
|
|
6
|
-
version: '2.
|
|
6
|
+
version: '2.7.1',
|
|
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
|
package/dist_ts/ustva.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Input: period account movements in exact cents (debit - credit, as
|
|
5
5
|
* @fin.cx/skr's trial-balance aggregation delivers), plus optional exact
|
|
6
6
|
* scenario bases from taxScenario-tagged entries. Mapping authority is
|
|
7
|
-
* @fin.cx/chartdata (account→Kennzahl)
|
|
8
|
-
* arithmetic:
|
|
7
|
+
* @fin.cx/chartdata (account→Kennzahl), over the books' individual accounts
|
|
8
|
+
* where the input declares them; this module adds the form arithmetic:
|
|
9
9
|
*
|
|
10
10
|
* - Bemessungsgrundlagen are declared in FULL EUROS, cents truncated toward
|
|
11
11
|
* zero — truncation applies to the period sum per Kennzahl, not per booking.
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* generated while issues is non-empty.
|
|
20
20
|
*/
|
|
21
21
|
import { vatFromNetCents } from '@fin.cx/calculation';
|
|
22
|
-
import { getChart } from '@fin.cx/chartdata';
|
|
22
|
+
import { BooksChart, getChart, IndividualAccountsError } from '@fin.cx/chartdata';
|
|
23
23
|
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
|
|
@@ -107,14 +107,35 @@ function isRevenueClassNumber(chart, accountNumber) {
|
|
|
107
107
|
const firstDigit = accountNumber[0];
|
|
108
108
|
return chart === 'SKR03' ? firstDigit === '8' : firstDigit === '4';
|
|
109
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* The chart the movements are read against: the chart of the year, with the books' individual accounts where the
|
|
112
|
+
* input declares any (`BooksChart`). Each problem of declarations the chart data refuses is an issue; the movements
|
|
113
|
+
* are then read against the chart of the year alone, so none is attributed by a declaration that was refused.
|
|
114
|
+
*/
|
|
115
|
+
function chartOf(input, issues) {
|
|
116
|
+
const declarations = input.individualAccounts ?? [];
|
|
117
|
+
if (declarations.length === 0)
|
|
118
|
+
return getChart(input.chart, input.year);
|
|
119
|
+
try {
|
|
120
|
+
return BooksChart.of(input.chart, input.year, declarations);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (!(error instanceof IndividualAccountsError))
|
|
124
|
+
throw error;
|
|
125
|
+
for (const problem of error.problems) {
|
|
126
|
+
issues.push(`individual account ${problem.accountNumber} refused by the chart data (${problem.code}): ${problem.message} — no declaration is applied while one is refused`);
|
|
127
|
+
}
|
|
128
|
+
return getChart(input.chart, input.year);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
110
131
|
export function computeUstva(input) {
|
|
111
|
-
const
|
|
132
|
+
const issues = [];
|
|
133
|
+
const checks = [];
|
|
134
|
+
const dataset = chartOf(input, issues);
|
|
112
135
|
const byNumber = new Map(dataset.accounts.map((account) => [account.accountNumber, account]));
|
|
113
136
|
const vatAccounts = { ...VAT_ACCOUNTS[input.chart], ...input.vatAccounts };
|
|
114
|
-
const exempt =
|
|
137
|
+
const exempt = input.exemptAccounts ?? [];
|
|
115
138
|
const tolerance = input.reconciliationToleranceCents ?? 500;
|
|
116
|
-
const issues = [];
|
|
117
|
-
const checks = [];
|
|
118
139
|
// ---- pass 1: bucket the movements -------------------------------------
|
|
119
140
|
const baseCentsByKz = new Map();
|
|
120
141
|
const taxCentsByKz = new Map();
|
|
@@ -136,37 +157,40 @@ export function computeUstva(input) {
|
|
|
136
157
|
if (movement.signedCents === 0)
|
|
137
158
|
continue;
|
|
138
159
|
const { accountNumber, signedCents } = movement;
|
|
160
|
+
const account = byNumber.get(accountNumber);
|
|
161
|
+
// an individual account stands in the module's account lists (output VAT, exemptions) where its parent stands
|
|
162
|
+
const parentNumber = account?.parentAccountNumber;
|
|
163
|
+
const listed = (numbers) => numbers.includes(accountNumber) || (parentNumber !== undefined && numbers.includes(parentNumber));
|
|
139
164
|
// output tax accounts (no Kennzahl of their own)
|
|
140
|
-
if (vatAccounts.outputStandard
|
|
165
|
+
if (listed(vatAccounts.outputStandard)) {
|
|
141
166
|
ledgerOutputStandardCents += -signedCents;
|
|
142
167
|
continue;
|
|
143
168
|
}
|
|
144
|
-
if (vatAccounts.outputReduced
|
|
169
|
+
if (listed(vatAccounts.outputReduced)) {
|
|
145
170
|
ledgerOutputReducedCents += -signedCents;
|
|
146
171
|
continue;
|
|
147
172
|
}
|
|
148
|
-
if (vatAccounts.outputGeneric
|
|
173
|
+
if (listed(vatAccounts.outputGeneric)) {
|
|
149
174
|
ledgerOutputGenericCents += -signedCents;
|
|
150
175
|
continue;
|
|
151
176
|
}
|
|
152
|
-
if (vatAccounts.outputIntraEuAcquisition
|
|
177
|
+
if (listed(vatAccounts.outputIntraEuAcquisition)) {
|
|
153
178
|
ledgerIgeOutputCents += -signedCents;
|
|
154
179
|
continue;
|
|
155
180
|
}
|
|
156
|
-
if (vatAccounts.outputReverseCharge
|
|
181
|
+
if (listed(vatAccounts.outputReverseCharge)) {
|
|
157
182
|
ledgerRcOutputCents += -signedCents;
|
|
158
183
|
continue;
|
|
159
184
|
}
|
|
160
|
-
if (vatAccounts.outputIntraEuAcquisitionNewVehicles
|
|
185
|
+
if (listed(vatAccounts.outputIntraEuAcquisitionNewVehicles)) {
|
|
161
186
|
issues.push(`account ${accountNumber} (output VAT on the intra-EU acquisition of new vehicles from suppliers without a VAT ID) carries ${-signedCents} cents — this module does not compute that acquisition; ordinary igE output VAT at 19 % belongs on ${vatAccounts.outputIntraEuAcquisition.join('/')}`);
|
|
162
187
|
continue;
|
|
163
188
|
}
|
|
164
|
-
const account = byNumber.get(accountNumber);
|
|
165
189
|
if (!account) {
|
|
166
190
|
const numeric = Number.parseInt(accountNumber, 10);
|
|
167
191
|
if (numeric >= 10000 && numeric <= 99999)
|
|
168
192
|
continue; // personal accounts
|
|
169
|
-
if (isRevenueClassNumber(input.chart, accountNumber) && !exempt.
|
|
193
|
+
if (isRevenueClassNumber(input.chart, accountNumber) && !exempt.includes(accountNumber)) {
|
|
170
194
|
issues.push(`revenue-class account ${accountNumber} is unknown in ${input.chart}/${input.year} — cannot attribute its movement to a Kennzahl`);
|
|
171
195
|
}
|
|
172
196
|
else {
|
|
@@ -186,7 +210,7 @@ export function computeUstva(input) {
|
|
|
186
210
|
}
|
|
187
211
|
continue;
|
|
188
212
|
}
|
|
189
|
-
if (account.accountType === 'revenue' && !exempt
|
|
213
|
+
if (account.accountType === 'revenue' && !listed(exempt)) {
|
|
190
214
|
issues.push(`revenue account ${accountNumber} (${account.accountName}) has a non-zero movement but no UStVA mapping — declare it exempt or map it`);
|
|
191
215
|
}
|
|
192
216
|
}
|
|
@@ -370,4 +394,4 @@ export function computeUstva(input) {
|
|
|
370
394
|
dateFields,
|
|
371
395
|
};
|
|
372
396
|
}
|
|
373
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXN0dmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy91c3R2YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFzQixNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVVuRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFxQztJQUNyRSxFQUFFLEVBQUUsK0JBQStCO0lBQ25DLEVBQUUsRUFBRSw4QkFBOEI7SUFDbEMsRUFBRSxFQUFFLDREQUE0RDtJQUNoRSxFQUFFLEVBQUUscUNBQXFDO0lBQ3pDLEVBQUUsRUFBRSxvQ0FBb0M7SUFDeEMsRUFBRSxFQUFFLGdEQUFnRDtJQUNwRCxFQUFFLEVBQUUsd0RBQXdEO0lBQzVELEVBQUUsRUFBRSx5Q0FBeUM7SUFDN0MsRUFBRSxFQUFFLGdJQUFnSTtJQUNwSSxFQUFFLEVBQUUsdUJBQXVCO0lBQzNCLEVBQUUsRUFBRSxxRUFBcUU7SUFDekUsRUFBRSxFQUFFLHVCQUF1QjtJQUMzQixFQUFFLEVBQUUsK0RBQStEO0lBQ25FLEVBQUUsRUFBRSx1QkFBdUI7SUFDM0IsRUFBRSxFQUFFLHFGQUFxRjtJQUN6RixFQUFFLEVBQUUsb0RBQW9EO0lBQ3hELEVBQUUsRUFBRSxnRUFBZ0U7SUFDcEUsRUFBRSxFQUFFLDhDQUE4QztJQUNsRCxFQUFFLEVBQUUsOENBQThDO0lBQ2xELEVBQUUsRUFBRSxpQ0FBaUM7SUFDckMsRUFBRSxFQUFFLGlEQUFpRDtJQUNyRCxFQUFFLEVBQUUsd1FBQXdRO0lBQzVRLEVBQUUsRUFBRSw2REFBNkQ7SUFDakUsRUFBRSxFQUFFLGlHQUFpRztJQUNyRyxFQUFFLEVBQUUsc0RBQXNEO0NBQzNELENBQUM7QUFFRjs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQXNCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUV4SixpRUFBaUU7QUFDakUsU0FBUyxhQUFhLENBQUMsUUFBZ0I7SUFDckMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN4RCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLFFBQVEsWUFBWSxDQUFDLENBQUM7SUFDL0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssUUFBUSxDQUFDO0FBQ3ZGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxTQUFpQjtJQUNyQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQWUsRUFBRSxRQUFnQixFQUFVLEVBQUUsQ0FDOUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RSxNQUFNLEdBQUcsR0FBRyxDQUFDLFFBQWdCLEVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVFLElBQUksS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3pILENBQUM7SUFDRCxLQUFLLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO0lBQzdGLENBQUM7SUFDRCxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDdkYsQ0FBQztBQUVELG9FQUFvRTtBQUNwRSxTQUFTLGFBQWEsQ0FBQyxLQUFhO0lBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELDRFQUE0RTtBQUM1RSxTQUFTLFlBQVksQ0FBQyxPQUFlLEVBQUUsV0FBbUI7SUFDeEQsT0FBTyxPQUFPLEdBQUcsV0FBVyxDQUFDO0FBQy9CLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLEtBQXdCLEVBQUUsYUFBcUI7SUFDM0UsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLEdBQUcsQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFrQjtJQUM3QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUYsTUFBTSxXQUFXLEdBQW1CLEVBQUUsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzNGLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLDRCQUE0QixJQUFJLEdBQUcsQ0FBQztJQUM1RCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRTVCLDBFQUEwRTtJQUMxRSxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUNoRCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUMvQyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztJQUNqRCxNQUFNLFVBQVUsR0FBRyxDQUNqQixNQUEyQixFQUMzQixRQUFnQixFQUNoQixLQUFhLEVBQ2IsYUFBcUIsRUFDZixFQUFFO1FBQ1IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzFELE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDO0lBRUYsSUFBSSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7SUFDbEMsSUFBSSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7SUFDN0IsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFDNUIsTUFBTSxlQUFlLEdBQWEsRUFBRSxDQUFDO0lBRXJDLEtBQUssTUFBTSxRQUFRLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZDLElBQUksUUFBUSxDQUFDLFdBQVcsS0FBSyxDQUFDO1lBQUUsU0FBUztRQUN6QyxNQUFNLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUVoRCxpREFBaUQ7UUFDakQsSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3ZELHlCQUF5QixJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzFDLFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3RELHdCQUF3QixJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3pDLFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3RELHdCQUF3QixJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3pDLFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxXQUFXLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDakUsb0JBQW9CLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDckMsU0FBUztRQUNYLENBQUM7UUFDRCxJQUFJLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxtQkFBbUIsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNwQyxTQUFTO1FBQ1gsQ0FBQztRQUNELElBQUksV0FBVyxDQUFDLG1DQUFtQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzVFLE1BQU0sQ0FBQyxJQUFJLENBQ1QsV0FBVyxhQUFhLHFHQUFxRyxDQUFDLFdBQVcsc0dBQXNHLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDaFMsQ0FBQztZQUNGLFNBQVM7UUFDWCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRCxJQUFJLE9BQU8sSUFBSSxLQUFLLElBQUksT0FBTyxJQUFJLEtBQUs7Z0JBQUUsU0FBUyxDQUFDLG9CQUFvQjtZQUN4RSxJQUFJLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ25GLE1BQU0sQ0FBQyxJQUFJLENBQ1QseUJBQXlCLGFBQWEsa0JBQWtCLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksZ0RBQWdELENBQ2xJLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsU0FBUztRQUNYLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQixJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUNsQywrREFBK0Q7Z0JBQy9ELFVBQVUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDakYsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGlEQUFpRDtnQkFDakQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNGLFVBQVUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxHQUFHLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUN0RixDQUFDO1lBQ0QsU0FBUztRQUNYLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQ1QsbUJBQW1CLGFBQWEsS0FBSyxPQUFPLENBQUMsV0FBVyw4RUFBOEUsQ0FDdkksQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMscURBQXFELGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFDRCxJQUFJLHdCQUF3QixLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQ1QsK0NBQStDLHdCQUF3QiwwRUFBMEUsQ0FDbEosQ0FBQztJQUNKLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7SUFDM0MsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBRTdCLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQywrQkFBK0IsSUFBSSxDQUFDLENBQUM7SUFDOUQsSUFBSSxVQUFVLEdBQUcsWUFBWSxDQUFDO0lBQzlCLElBQUksUUFBUSxDQUFDLCtCQUErQixLQUFLLFNBQVMsSUFBSSxvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6RixTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzFELFVBQVUsR0FBRyxXQUFXLENBQUM7UUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQywrQ0FBK0Msb0JBQW9CLGdCQUFnQixDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyw4QkFBOEIsSUFBSSxDQUFDLENBQUM7SUFFL0QsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLDRCQUE0QixJQUFJLENBQUMsQ0FBQztJQUMzRCxJQUFJLFVBQVUsR0FBRyxZQUFZLENBQUM7SUFDOUIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLDRCQUE0QixJQUFJLENBQUMsQ0FBQztJQUM3RCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsdUJBQXVCLElBQUksQ0FBQyxDQUFDO0lBQ3hELE1BQU0sYUFBYSxHQUNqQixRQUFRLENBQUMsNEJBQTRCLEtBQUssU0FBUztRQUNuRCxRQUFRLENBQUMsNEJBQTRCLEtBQUssU0FBUztRQUNuRCxRQUFRLENBQUMsdUJBQXVCLEtBQUssU0FBUyxDQUFDO0lBQ2pELElBQUksQ0FBQyxhQUFhLElBQUksbUJBQW1CLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEQsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxtQkFBbUIsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN6RCxVQUFVLEdBQUcsV0FBVyxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsZ0RBQWdELG1CQUFtQixnRUFBZ0UsQ0FDcEksQ0FBQztJQUNKLENBQUM7SUFFRCxtSEFBbUg7SUFDbkgsZ0VBQWdFO0lBQ2hFLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQzdDLE1BQU0sT0FBTyxHQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQTZCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEksSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxHQUFHLG1CQUFtQixDQUFDO1FBQy9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNsRCxNQUFNLEtBQUssR0FBRyxLQUFLLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRixVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuQyxJQUFJLElBQUksS0FBSyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztTQUFNLElBQUksbUJBQW1CLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtJQUMxRSxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFMUMsbUVBQW1FO0lBQ25FLElBQUksVUFBVSxLQUFLLFlBQVksSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkQsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxvQkFBb0IsR0FBRyxRQUFRLENBQUM7UUFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQywrQkFBK0Isb0JBQW9CLDZCQUE2QixRQUFRLFVBQVUsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUN2SCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUM7WUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxvRUFBb0UsSUFBSSxRQUFRLENBQUMsQ0FBQztRQUNoRyxDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEgsTUFBTSxJQUFJLEdBQUcsbUJBQW1CLEdBQUcsUUFBUSxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLG1CQUFtQiw4QkFBOEIsUUFBUSxVQUFVLElBQUksR0FBRyxDQUFDLENBQUM7UUFDbkgsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUVBQXVFLElBQUksUUFBUSxDQUFDLENBQUM7UUFDbkcsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFFeEIsMkVBQTJFO0lBQzNFLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFDO0lBQ2pELE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBZ0IsRUFBRSxJQUFtQixFQUFFLEtBQWEsRUFBRSxRQUFrQixFQUFRLEVBQUU7UUFDN0YsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDakQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7WUFDbkIsUUFBUTtZQUNSLElBQUk7WUFDSixLQUFLO1lBQ0wsS0FBSyxFQUFFLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxJQUFJLFlBQVksUUFBUSxFQUFFO1lBQ2hFLFFBQVE7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksYUFBYSxFQUFFLENBQUM7UUFDOUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUNELEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3QyxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsSUFBSSxTQUFTLEtBQUssQ0FBQztRQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDaEYsSUFBSSxTQUFTLEtBQUssQ0FBQztRQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbEYsSUFBSSxTQUFTLEtBQUssQ0FBQztRQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDaEYsSUFBSSxTQUFTLEtBQUssQ0FBQztRQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDbkcsSUFBSSxTQUFTLEtBQUssQ0FBQztRQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbEYsSUFBSSxTQUFTLEtBQUssQ0FBQztRQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDbkcsSUFBSSxTQUFTLEtBQUssQ0FBQztRQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbEYsSUFBSSxTQUFTLEtBQUssQ0FBQztRQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDbkcsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDekQsSUFBSSxpQkFBaUIsS0FBSyxDQUFDO1FBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLHdCQUF3QixJQUFJLENBQUMsQ0FBQztJQUNoRSxJQUFJLG1CQUFtQixLQUFLLENBQUM7UUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFckYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUFnQixFQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7SUFFL0UsNEVBQTRFO0lBQzVFLE1BQU0sb0JBQW9CLEdBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckYsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sYUFBYSxHQUNqQixvQkFBb0I7UUFDcEIsZUFBZTtRQUNmLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULGFBQWE7UUFDYixpQkFBaUI7UUFDakIsbUJBQW1CLENBQUM7SUFDdEIsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUVuRCw2RUFBNkU7SUFDN0UsTUFBTSxvQkFBb0IsR0FDeEIseUJBQXlCLEdBQUcsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7SUFDbEYsb0ZBQW9GO0lBQ3BGLE1BQU0sNkJBQTZCLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxxQkFBcUIsSUFBSSxDQUFDLENBQUM7SUFDckYsTUFBTSx3QkFBd0IsR0FBRyxvQkFBb0IsR0FBRyw2QkFBNkIsR0FBRyxvQkFBb0IsQ0FBQztJQUM3RyxNQUFNLENBQUMsSUFBSSxDQUNULDZCQUE2QixLQUFLLENBQUM7UUFDakMsQ0FBQyxDQUFDLCtCQUErQixvQkFBb0IsNEJBQTRCLDZCQUE2QixZQUFZLG9CQUFvQixVQUFVLHdCQUF3QixHQUFHO1FBQ25MLENBQUMsQ0FBQywrQkFBK0Isb0JBQW9CLFlBQVksb0JBQW9CLFVBQVUsd0JBQXdCLEdBQUcsQ0FDN0gsQ0FBQztJQUNGLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQ1QsMEVBQTBFLHdCQUF3QixxQkFBcUIsU0FBUyxrQ0FBa0MsQ0FDbkssQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztJQUM1RCxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEQsTUFBTSxDQUFDLElBQUksQ0FDVCxrQ0FBa0MsT0FBTyxDQUFDLEVBQUUsQ0FBQyx5QkFBeUIsb0JBQW9CLFVBQVUsZ0JBQWdCLGtEQUFrRCxDQUN2SyxDQUFDO0lBQ0osQ0FBQztJQUNELCtGQUErRjtJQUMvRixNQUFNLGFBQWEsR0FBRyxTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUN4RCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDO0lBQ3BELElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9FLE1BQU0sQ0FBQyxJQUFJLENBQ1QsbUNBQW1DLE9BQU8sQ0FBQyxFQUFFLENBQUMsbUJBQW1CLGFBQWEsVUFBVSxlQUFlLGtEQUFrRCxDQUMxSixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FDcEYsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQ3BDLENBQUM7SUFDRix5RkFBeUY7SUFDekYsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLENBQUMsSUFBSSxDQUNULFlBQVksUUFBUSxVQUFVLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpR0FBaUcsQ0FDekosQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLE1BQU0sVUFBVSxHQUF5QixFQUFFLENBQUM7SUFDNUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDO0lBQzdDLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0VBQWtFLFFBQVEsa0NBQWtDLENBQUMsQ0FBQztRQUM1SCxDQUFDO2FBQU0sSUFBSSxNQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekUsTUFBTSxDQUFDLElBQUksQ0FDVCxrRUFBa0UsUUFBUSw0QkFBNEIsS0FBSyxDQUFDLE1BQU0sNERBQTRELENBQy9LLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtRQUNwQixjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWMsSUFBSSxNQUFNO1FBQzlDLFVBQVU7UUFDVixhQUFhO1FBQ2IsY0FBYyxFQUFFO1lBQ2Qsb0JBQW9CO1lBQ3BCLGtCQUFrQixFQUFFLG9CQUFvQjtZQUN4Qyx3QkFBd0I7WUFDeEIsTUFBTTtTQUNQO1FBQ0QsTUFBTTtRQUNOLFVBQVU7S0FDWCxDQUFDO0FBQ0osQ0FBQyJ9
|
|
397
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXN0dmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy91c3R2YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBZSxNQUFNLG1CQUFtQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVVuRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFxQztJQUNyRSxFQUFFLEVBQUUsK0JBQStCO0lBQ25DLEVBQUUsRUFBRSw4QkFBOEI7SUFDbEMsRUFBRSxFQUFFLDREQUE0RDtJQUNoRSxFQUFFLEVBQUUscUNBQXFDO0lBQ3pDLEVBQUUsRUFBRSxvQ0FBb0M7SUFDeEMsRUFBRSxFQUFFLGdEQUFnRDtJQUNwRCxFQUFFLEVBQUUsd0RBQXdEO0lBQzVELEVBQUUsRUFBRSx5Q0FBeUM7SUFDN0MsRUFBRSxFQUFFLGdJQUFnSTtJQUNwSSxFQUFFLEVBQUUsdUJBQXVCO0lBQzNCLEVBQUUsRUFBRSxxRUFBcUU7SUFDekUsRUFBRSxFQUFFLHVCQUF1QjtJQUMzQixFQUFFLEVBQUUsK0RBQStEO0lBQ25FLEVBQUUsRUFBRSx1QkFBdUI7SUFDM0IsRUFBRSxFQUFFLHFGQUFxRjtJQUN6RixFQUFFLEVBQUUsb0RBQW9EO0lBQ3hELEVBQUUsRUFBRSxnRUFBZ0U7SUFDcEUsRUFBRSxFQUFFLDhDQUE4QztJQUNsRCxFQUFFLEVBQUUsOENBQThDO0lBQ2xELEVBQUUsRUFBRSxpQ0FBaUM7SUFDckMsRUFBRSxFQUFFLGlEQUFpRDtJQUNyRCxFQUFFLEVBQUUsd1FBQXdRO0lBQzVRLEVBQUUsRUFBRSw2REFBNkQ7SUFDakUsRUFBRSxFQUFFLGlHQUFpRztJQUNyRyxFQUFFLEVBQUUsc0RBQXNE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QVEsRUFBRSxLQUFLLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUM5QyxHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBQ0QsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxJQUFJLFNBQVMsS0FBSyxDQUFDO1FBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNoRixJQUFJLFNBQVMsS0FBSyxDQUFDO1FBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNsRixJQUFJLFNBQVMsS0FBSyxDQUFDO1FBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNoRixJQUFJLFNBQVMsS0FBSyxDQUFDO1FBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNuRyxJQUFJLFNBQVMsS0FBSyxDQUFDO1FBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNsRixJ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
|
package/dist_ts/ustva.types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TCents } from '@fin.cx/calculation';
|
|
2
|
-
import type { TChartName } from '@fin.cx/chartdata';
|
|
2
|
+
import type { IIndividualAccountDeclaration, TChartName } from '@fin.cx/chartdata';
|
|
3
3
|
/** period movement of one account: debitCents - creditCents */
|
|
4
4
|
export interface IAccountMovementInput {
|
|
5
5
|
accountNumber: string;
|
|
@@ -94,7 +94,17 @@ export interface IUstvaInput {
|
|
|
94
94
|
* the period that contains it; a day outside `period` is an issue.
|
|
95
95
|
*/
|
|
96
96
|
smallBusinessChangeOn?: string;
|
|
97
|
-
/**
|
|
97
|
+
/**
|
|
98
|
+
* the books' individual accounts (Individualkonten), as @fin.cx/chartdata's
|
|
99
|
+
* `BooksChart.of` takes them for `chart` and `year`. A movement on one
|
|
100
|
+
* counts where its UStVA mapping places it: its parent's, or the mapping its
|
|
101
|
+
* declaration's `overrides.ustva` sets (`null`: none). It stands in
|
|
102
|
+
* `exemptAccounts` and the output-VAT lists of `vatAccounts` where its parent
|
|
103
|
+
* stands. Each problem of declarations the chart data refuses is an issue,
|
|
104
|
+
* and then no declaration is applied. Unset or empty: the chart of the year.
|
|
105
|
+
*/
|
|
106
|
+
individualAccounts?: readonly IIndividualAccountDeclaration[];
|
|
107
|
+
/** revenue accounts intentionally outside the UStVA (no issue raised); an individual account under one is too */
|
|
98
108
|
exemptAccounts?: string[];
|
|
99
109
|
/** override the built-in per-chart VAT account table */
|
|
100
110
|
vatAccounts?: Partial<IVatAccountSet>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fin.cx/tax",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.1",
|
|
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,13 +29,13 @@
|
|
|
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": "^3.
|
|
32
|
+
"@fin.cx/chartdata": "^3.5.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@git.zone/tsbuild": "^
|
|
36
|
-
"@git.zone/tsrun": "^3.0.
|
|
37
|
-
"@git.zone/tstest": "^
|
|
38
|
-
"@types/node": "^26.6.
|
|
35
|
+
"@git.zone/tsbuild": "^6.0.2",
|
|
36
|
+
"@git.zone/tsrun": "^3.0.3",
|
|
37
|
+
"@git.zone/tstest": "^8.0.0",
|
|
38
|
+
"@types/node": "^26.6.5"
|
|
39
39
|
},
|
|
40
40
|
"files": [
|
|
41
41
|
"ts/**/*",
|
package/readme.md
CHANGED
|
@@ -13,6 +13,7 @@ pnpm install @fin.cx/tax
|
|
|
13
13
|
`computeUstva()` turns one period's account movements into the UStVA figures:
|
|
14
14
|
|
|
15
15
|
- **Account→Kennzahl mapping** comes from [@fin.cx/chartdata](https://code.foss.global/fin.cx/chartdata) (SKR03/SKR04, year-versioned). Revenue accounts feed the Bemessungsgrundlagen (Kz 81, 86, 87, 41, 43, 48, 60, 21, 45); Vorsteuer accounts feed the tax fields (Kz 66, 61, 67, 62) cent-exact. `USTVA_KENNZAHL_ORDER` lists the fields in the order of the UStVA 2026 form, with their labels in `USTVA_KENNZAHL_LABELS`; a Kennzahl the chart data maps that has no place there is a filing issue, never dropped.
|
|
16
|
+
- **Individual accounts** (Individualkonten) of the books are passed as `individualAccounts`, the `IIndividualAccountDeclaration[]` that @fin.cx/chartdata's `BooksChart.of` takes; the movements are then read against that books chart for `chart` and `year`. An individual account keeps its parent's UStVA mapping unless its declaration's `overrides.ustva` sets another (`null`: none), and it stands in `exemptAccounts` and the output-VAT lists where its parent stands. Each problem of declarations the chart data refuses is an issue, and then none is applied. Without them, a movement on such a number is an unknown account (an issue in the revenue class).
|
|
16
17
|
- **Form rounding is applied correctly**: Bemessungsgrundlagen are declared in full euros with cents truncated toward zero — on the *period sum per Kennzahl*, not per booking. Tax amounts stay cent-exact. Output tax on domestic and igE bases is what the form computes from the truncated bases (`base EUR × 19` is an exact integer number of cents).
|
|
17
18
|
- **Output-VAT accounts** (`VAT_ACCOUNTS`, overridable per call with `vatAccounts`) follow the DATEV Kontenrahmen 2026:
|
|
18
19
|
|
|
@@ -46,7 +47,10 @@ const result = computeUstva({
|
|
|
46
47
|
{ accountNumber: '8400', signedCents: -1_000_055 }, // 10 000.55 revenue 19 %
|
|
47
48
|
{ accountNumber: '1776', signedCents: -190_010 }, // output VAT ledger balance
|
|
48
49
|
{ accountNumber: '1576', signedCents: 123_456 }, // input VAT
|
|
50
|
+
{ accountNumber: '8111', signedCents: -50_000 }, // tax-free letting on an individual account
|
|
49
51
|
],
|
|
52
|
+
// the books' individual accounts, as @fin.cx/chartdata's BooksChart takes them (optional)
|
|
53
|
+
individualAccounts: [{ accountNumber: '8111', accountName: 'Steuerfreie Vermietung Objekt B', parentAccountNumber: '8110' }],
|
|
50
54
|
// exact igE / §13b bases from tax-scenario-tagged entries (optional)
|
|
51
55
|
scenarioBases: { intraEuAcquisitionStandardCents: 200_000 },
|
|
52
56
|
});
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/ustva.ts
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Input: period account movements in exact cents (debit - credit, as
|
|
5
5
|
* @fin.cx/skr's trial-balance aggregation delivers), plus optional exact
|
|
6
6
|
* scenario bases from taxScenario-tagged entries. Mapping authority is
|
|
7
|
-
* @fin.cx/chartdata (account→Kennzahl)
|
|
8
|
-
* arithmetic:
|
|
7
|
+
* @fin.cx/chartdata (account→Kennzahl), over the books' individual accounts
|
|
8
|
+
* where the input declares them; this module adds the form arithmetic:
|
|
9
9
|
*
|
|
10
10
|
* - Bemessungsgrundlagen are declared in FULL EUROS, cents truncated toward
|
|
11
11
|
* zero — truncation applies to the period sum per Kennzahl, not per booking.
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* generated while issues is non-empty.
|
|
20
20
|
*/
|
|
21
21
|
import { vatFromNetCents, type TCents } from '@fin.cx/calculation';
|
|
22
|
-
import { getChart, type
|
|
22
|
+
import { BooksChart, getChart, IndividualAccountsError, type IChart } from '@fin.cx/chartdata';
|
|
23
23
|
import { VAT_ACCOUNTS } from './ustva.accounts.js';
|
|
24
24
|
import type {
|
|
25
25
|
IKennzahlDateValue,
|
|
@@ -123,14 +123,35 @@ function isRevenueClassNumber(chart: 'SKR03' | 'SKR04', accountNumber: string):
|
|
|
123
123
|
return chart === 'SKR03' ? firstDigit === '8' : firstDigit === '4';
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
+
/**
|
|
127
|
+
* The chart the movements are read against: the chart of the year, with the books' individual accounts where the
|
|
128
|
+
* input declares any (`BooksChart`). Each problem of declarations the chart data refuses is an issue; the movements
|
|
129
|
+
* are then read against the chart of the year alone, so none is attributed by a declaration that was refused.
|
|
130
|
+
*/
|
|
131
|
+
function chartOf(input: IUstvaInput, issues: string[]): IChart {
|
|
132
|
+
const declarations = input.individualAccounts ?? [];
|
|
133
|
+
if (declarations.length === 0) return getChart(input.chart, input.year);
|
|
134
|
+
try {
|
|
135
|
+
return BooksChart.of(input.chart, input.year, declarations);
|
|
136
|
+
} catch (error) {
|
|
137
|
+
if (!(error instanceof IndividualAccountsError)) throw error;
|
|
138
|
+
for (const problem of error.problems) {
|
|
139
|
+
issues.push(
|
|
140
|
+
`individual account ${problem.accountNumber} refused by the chart data (${problem.code}): ${problem.message} — no declaration is applied while one is refused`,
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
return getChart(input.chart, input.year);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
126
147
|
export function computeUstva(input: IUstvaInput): IUstvaResult {
|
|
127
|
-
const
|
|
148
|
+
const issues: string[] = [];
|
|
149
|
+
const checks: string[] = [];
|
|
150
|
+
const dataset = chartOf(input, issues);
|
|
128
151
|
const byNumber = new Map(dataset.accounts.map((account) => [account.accountNumber, account]));
|
|
129
152
|
const vatAccounts: IVatAccountSet = { ...VAT_ACCOUNTS[input.chart], ...input.vatAccounts };
|
|
130
|
-
const exempt =
|
|
153
|
+
const exempt = input.exemptAccounts ?? [];
|
|
131
154
|
const tolerance = input.reconciliationToleranceCents ?? 500;
|
|
132
|
-
const issues: string[] = [];
|
|
133
|
-
const checks: string[] = [];
|
|
134
155
|
|
|
135
156
|
// ---- pass 1: bucket the movements -------------------------------------
|
|
136
157
|
const baseCentsByKz = new Map<number, TCents>();
|
|
@@ -158,40 +179,44 @@ export function computeUstva(input: IUstvaInput): IUstvaResult {
|
|
|
158
179
|
for (const movement of input.movements) {
|
|
159
180
|
if (movement.signedCents === 0) continue;
|
|
160
181
|
const { accountNumber, signedCents } = movement;
|
|
182
|
+
const account = byNumber.get(accountNumber);
|
|
183
|
+
// an individual account stands in the module's account lists (output VAT, exemptions) where its parent stands
|
|
184
|
+
const parentNumber = account?.parentAccountNumber;
|
|
185
|
+
const listed = (numbers: readonly string[]): boolean =>
|
|
186
|
+
numbers.includes(accountNumber) || (parentNumber !== undefined && numbers.includes(parentNumber));
|
|
161
187
|
|
|
162
188
|
// output tax accounts (no Kennzahl of their own)
|
|
163
|
-
if (vatAccounts.outputStandard
|
|
189
|
+
if (listed(vatAccounts.outputStandard)) {
|
|
164
190
|
ledgerOutputStandardCents += -signedCents;
|
|
165
191
|
continue;
|
|
166
192
|
}
|
|
167
|
-
if (vatAccounts.outputReduced
|
|
193
|
+
if (listed(vatAccounts.outputReduced)) {
|
|
168
194
|
ledgerOutputReducedCents += -signedCents;
|
|
169
195
|
continue;
|
|
170
196
|
}
|
|
171
|
-
if (vatAccounts.outputGeneric
|
|
197
|
+
if (listed(vatAccounts.outputGeneric)) {
|
|
172
198
|
ledgerOutputGenericCents += -signedCents;
|
|
173
199
|
continue;
|
|
174
200
|
}
|
|
175
|
-
if (vatAccounts.outputIntraEuAcquisition
|
|
201
|
+
if (listed(vatAccounts.outputIntraEuAcquisition)) {
|
|
176
202
|
ledgerIgeOutputCents += -signedCents;
|
|
177
203
|
continue;
|
|
178
204
|
}
|
|
179
|
-
if (vatAccounts.outputReverseCharge
|
|
205
|
+
if (listed(vatAccounts.outputReverseCharge)) {
|
|
180
206
|
ledgerRcOutputCents += -signedCents;
|
|
181
207
|
continue;
|
|
182
208
|
}
|
|
183
|
-
if (vatAccounts.outputIntraEuAcquisitionNewVehicles
|
|
209
|
+
if (listed(vatAccounts.outputIntraEuAcquisitionNewVehicles)) {
|
|
184
210
|
issues.push(
|
|
185
211
|
`account ${accountNumber} (output VAT on the intra-EU acquisition of new vehicles from suppliers without a VAT ID) carries ${-signedCents} cents — this module does not compute that acquisition; ordinary igE output VAT at 19 % belongs on ${vatAccounts.outputIntraEuAcquisition.join('/')}`,
|
|
186
212
|
);
|
|
187
213
|
continue;
|
|
188
214
|
}
|
|
189
215
|
|
|
190
|
-
const account = byNumber.get(accountNumber);
|
|
191
216
|
if (!account) {
|
|
192
217
|
const numeric = Number.parseInt(accountNumber, 10);
|
|
193
218
|
if (numeric >= 10000 && numeric <= 99999) continue; // personal accounts
|
|
194
|
-
if (isRevenueClassNumber(input.chart, accountNumber) && !exempt.
|
|
219
|
+
if (isRevenueClassNumber(input.chart, accountNumber) && !exempt.includes(accountNumber)) {
|
|
195
220
|
issues.push(
|
|
196
221
|
`revenue-class account ${accountNumber} is unknown in ${input.chart}/${input.year} — cannot attribute its movement to a Kennzahl`,
|
|
197
222
|
);
|
|
@@ -213,7 +238,7 @@ export function computeUstva(input: IUstvaInput): IUstvaResult {
|
|
|
213
238
|
continue;
|
|
214
239
|
}
|
|
215
240
|
|
|
216
|
-
if (account.accountType === 'revenue' && !exempt
|
|
241
|
+
if (account.accountType === 'revenue' && !listed(exempt)) {
|
|
217
242
|
issues.push(
|
|
218
243
|
`revenue account ${accountNumber} (${account.accountName}) has a non-zero movement but no UStVA mapping — declare it exempt or map it`,
|
|
219
244
|
);
|
package/ts/ustva.types.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TCents } from '@fin.cx/calculation';
|
|
2
|
-
import type { TChartName } from '@fin.cx/chartdata';
|
|
2
|
+
import type { IIndividualAccountDeclaration, TChartName } from '@fin.cx/chartdata';
|
|
3
3
|
|
|
4
4
|
/** period movement of one account: debitCents - creditCents */
|
|
5
5
|
export interface IAccountMovementInput {
|
|
@@ -99,7 +99,17 @@ export interface IUstvaInput {
|
|
|
99
99
|
* the period that contains it; a day outside `period` is an issue.
|
|
100
100
|
*/
|
|
101
101
|
smallBusinessChangeOn?: string;
|
|
102
|
-
/**
|
|
102
|
+
/**
|
|
103
|
+
* the books' individual accounts (Individualkonten), as @fin.cx/chartdata's
|
|
104
|
+
* `BooksChart.of` takes them for `chart` and `year`. A movement on one
|
|
105
|
+
* counts where its UStVA mapping places it: its parent's, or the mapping its
|
|
106
|
+
* declaration's `overrides.ustva` sets (`null`: none). It stands in
|
|
107
|
+
* `exemptAccounts` and the output-VAT lists of `vatAccounts` where its parent
|
|
108
|
+
* stands. Each problem of declarations the chart data refuses is an issue,
|
|
109
|
+
* and then no declaration is applied. Unset or empty: the chart of the year.
|
|
110
|
+
*/
|
|
111
|
+
individualAccounts?: readonly IIndividualAccountDeclaration[];
|
|
112
|
+
/** revenue accounts intentionally outside the UStVA (no issue raised); an individual account under one is too */
|
|
103
113
|
exemptAccounts?: string[];
|
|
104
114
|
/** override the built-in per-chart VAT account table */
|
|
105
115
|
vatAccounts?: Partial<IVatAccountSet>;
|