@fin.cx/skr 1.2.0 → 1.2.2
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/{npmextra.json → .smartconfig.json} +12 -6
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/index.d.ts +21 -15
- package/dist_ts/index.js +16 -16
- package/dist_ts/plugins.d.ts +15 -5
- package/dist_ts/plugins.js +42 -6
- package/dist_ts/skr.api.js +20 -13
- package/dist_ts/skr.classes.account.d.ts +36 -3
- package/dist_ts/skr.classes.account.js +366 -210
- package/dist_ts/skr.classes.chartofaccounts.d.ts +1 -1
- package/dist_ts/skr.classes.chartofaccounts.js +13 -6
- package/dist_ts/skr.classes.journalentry.d.ts +9 -4
- package/dist_ts/skr.classes.journalentry.js +430 -309
- package/dist_ts/skr.classes.ledger.js +7 -1
- package/dist_ts/skr.classes.reports.js +4 -1
- package/dist_ts/skr.classes.transaction.d.ts +9 -4
- package/dist_ts/skr.classes.transaction.js +315 -244
- package/dist_ts/skr.export.accounts.js +3 -2
- package/dist_ts/skr.export.balances.js +4 -2
- package/dist_ts/skr.export.js +6 -3
- package/dist_ts/skr.export.ledger.js +4 -3
- package/dist_ts/skr.export.pdf.js +6 -3
- package/dist_ts/skr.invoice.adapter.d.ts +2 -0
- package/dist_ts/skr.invoice.adapter.js +22 -10
- package/dist_ts/skr.invoice.booking.js +52 -25
- package/dist_ts/skr.invoice.mapper.js +84 -82
- package/dist_ts/skr.invoice.storage.js +10 -5
- package/dist_ts/skr.postingkeys.d.ts +56 -0
- package/dist_ts/skr.postingkeys.js +196 -0
- package/dist_ts/skr.security.js +24 -21
- package/dist_ts/skr.types.d.ts +18 -0
- package/dist_ts/skr03.data.js +3 -1
- package/dist_ts/skr04.data.js +3 -1
- package/license.md +21 -0
- package/package.json +31 -23
- package/readme.hints.md +54 -1
- package/readme.md +215 -632
- package/readme.plan.md +1 -1
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/index.ts +43 -15
- package/ts/plugins.ts +52 -15
- package/ts/skr.api.ts +9 -5
- package/ts/skr.classes.account.ts +144 -23
- package/ts/skr.classes.chartofaccounts.ts +8 -3
- package/ts/skr.classes.journalentry.ts +117 -24
- package/ts/skr.classes.ledger.ts +4 -0
- package/ts/skr.classes.reports.ts +22 -2
- package/ts/skr.classes.transaction.ts +40 -22
- package/ts/skr.export.pdf.ts +4 -3
- package/ts/skr.invoice.adapter.ts +31 -11
- package/ts/skr.invoice.booking.ts +54 -30
- package/ts/skr.invoice.storage.ts +3 -2
- package/ts/skr.postingkeys.ts +252 -0
- package/ts/skr.security.ts +23 -22
- package/ts/skr.types.ts +26 -0
- package/ts/skr03.data.ts +2 -0
- package/ts/skr04.data.ts +2 -0
|
@@ -1,224 +1,380 @@
|
|
|
1
|
-
var
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
6
27
|
};
|
|
7
|
-
var
|
|
8
|
-
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
9
34
|
};
|
|
10
|
-
var Account_1;
|
|
11
35
|
import * as plugins from './plugins.js';
|
|
12
36
|
import { getDb, getDbSync } from './skr.database.js';
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
37
|
+
const SmartDataDbDoc = plugins.smartdata.SmartDataDbDoc;
|
|
38
|
+
const Collection = plugins.smartdata.Collection;
|
|
39
|
+
const svDb = plugins.smartdata.svDb;
|
|
40
|
+
const unI = plugins.smartdata.unI;
|
|
41
|
+
const index = plugins.smartdata.index;
|
|
42
|
+
const searchable = plugins.smartdata.searchable;
|
|
43
|
+
let Account = (() => {
|
|
44
|
+
let _classDecorators = [Collection(() => getDbSync())];
|
|
45
|
+
let _classDescriptor;
|
|
46
|
+
let _classExtraInitializers = [];
|
|
47
|
+
let _classThis;
|
|
48
|
+
let _classSuper = SmartDataDbDoc;
|
|
49
|
+
let _id_decorators;
|
|
50
|
+
let _id_initializers = [];
|
|
51
|
+
let _id_extraInitializers = [];
|
|
52
|
+
let _accountNumber_decorators;
|
|
53
|
+
let _accountNumber_initializers = [];
|
|
54
|
+
let _accountNumber_extraInitializers = [];
|
|
55
|
+
let _accountName_decorators;
|
|
56
|
+
let _accountName_initializers = [];
|
|
57
|
+
let _accountName_extraInitializers = [];
|
|
58
|
+
let _accountClass_decorators;
|
|
59
|
+
let _accountClass_initializers = [];
|
|
60
|
+
let _accountClass_extraInitializers = [];
|
|
61
|
+
let _accountGroup_decorators;
|
|
62
|
+
let _accountGroup_initializers = [];
|
|
63
|
+
let _accountGroup_extraInitializers = [];
|
|
64
|
+
let _accountSubgroup_decorators;
|
|
65
|
+
let _accountSubgroup_initializers = [];
|
|
66
|
+
let _accountSubgroup_extraInitializers = [];
|
|
67
|
+
let _accountType_decorators;
|
|
68
|
+
let _accountType_initializers = [];
|
|
69
|
+
let _accountType_extraInitializers = [];
|
|
70
|
+
let _skrType_decorators;
|
|
71
|
+
let _skrType_initializers = [];
|
|
72
|
+
let _skrType_extraInitializers = [];
|
|
73
|
+
let _description_decorators;
|
|
74
|
+
let _description_initializers = [];
|
|
75
|
+
let _description_extraInitializers = [];
|
|
76
|
+
let _vatRate_decorators;
|
|
77
|
+
let _vatRate_initializers = [];
|
|
78
|
+
let _vatRate_extraInitializers = [];
|
|
79
|
+
let _balance_decorators;
|
|
80
|
+
let _balance_initializers = [];
|
|
81
|
+
let _balance_extraInitializers = [];
|
|
82
|
+
let _debitTotal_decorators;
|
|
83
|
+
let _debitTotal_initializers = [];
|
|
84
|
+
let _debitTotal_extraInitializers = [];
|
|
85
|
+
let _creditTotal_decorators;
|
|
86
|
+
let _creditTotal_initializers = [];
|
|
87
|
+
let _creditTotal_extraInitializers = [];
|
|
88
|
+
let _isActive_decorators;
|
|
89
|
+
let _isActive_initializers = [];
|
|
90
|
+
let _isActive_extraInitializers = [];
|
|
91
|
+
let _isSystemAccount_decorators;
|
|
92
|
+
let _isSystemAccount_initializers = [];
|
|
93
|
+
let _isSystemAccount_extraInitializers = [];
|
|
94
|
+
let _isAutomaticAccount_decorators;
|
|
95
|
+
let _isAutomaticAccount_initializers = [];
|
|
96
|
+
let _isAutomaticAccount_extraInitializers = [];
|
|
97
|
+
let _createdAt_decorators;
|
|
98
|
+
let _createdAt_initializers = [];
|
|
99
|
+
let _createdAt_extraInitializers = [];
|
|
100
|
+
let _updatedAt_decorators;
|
|
101
|
+
let _updatedAt_initializers = [];
|
|
102
|
+
let _updatedAt_extraInitializers = [];
|
|
103
|
+
var Account = class extends _classSuper {
|
|
104
|
+
static { _classThis = this; }
|
|
105
|
+
static {
|
|
106
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
107
|
+
_id_decorators = [unI()];
|
|
108
|
+
_accountNumber_decorators = [svDb(), index()];
|
|
109
|
+
_accountName_decorators = [svDb(), searchable()];
|
|
110
|
+
_accountClass_decorators = [svDb(), index()];
|
|
111
|
+
_accountGroup_decorators = [svDb()];
|
|
112
|
+
_accountSubgroup_decorators = [svDb()];
|
|
113
|
+
_accountType_decorators = [svDb()];
|
|
114
|
+
_skrType_decorators = [svDb(), index()];
|
|
115
|
+
_description_decorators = [svDb(), searchable()];
|
|
116
|
+
_vatRate_decorators = [svDb()];
|
|
117
|
+
_balance_decorators = [svDb()];
|
|
118
|
+
_debitTotal_decorators = [svDb()];
|
|
119
|
+
_creditTotal_decorators = [svDb()];
|
|
120
|
+
_isActive_decorators = [svDb()];
|
|
121
|
+
_isSystemAccount_decorators = [svDb()];
|
|
122
|
+
_isAutomaticAccount_decorators = [svDb()];
|
|
123
|
+
_createdAt_decorators = [svDb()];
|
|
124
|
+
_updatedAt_decorators = [svDb()];
|
|
125
|
+
__esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
|
|
126
|
+
__esDecorate(null, null, _accountNumber_decorators, { kind: "field", name: "accountNumber", static: false, private: false, access: { has: obj => "accountNumber" in obj, get: obj => obj.accountNumber, set: (obj, value) => { obj.accountNumber = value; } }, metadata: _metadata }, _accountNumber_initializers, _accountNumber_extraInitializers);
|
|
127
|
+
__esDecorate(null, null, _accountName_decorators, { kind: "field", name: "accountName", static: false, private: false, access: { has: obj => "accountName" in obj, get: obj => obj.accountName, set: (obj, value) => { obj.accountName = value; } }, metadata: _metadata }, _accountName_initializers, _accountName_extraInitializers);
|
|
128
|
+
__esDecorate(null, null, _accountClass_decorators, { kind: "field", name: "accountClass", static: false, private: false, access: { has: obj => "accountClass" in obj, get: obj => obj.accountClass, set: (obj, value) => { obj.accountClass = value; } }, metadata: _metadata }, _accountClass_initializers, _accountClass_extraInitializers);
|
|
129
|
+
__esDecorate(null, null, _accountGroup_decorators, { kind: "field", name: "accountGroup", static: false, private: false, access: { has: obj => "accountGroup" in obj, get: obj => obj.accountGroup, set: (obj, value) => { obj.accountGroup = value; } }, metadata: _metadata }, _accountGroup_initializers, _accountGroup_extraInitializers);
|
|
130
|
+
__esDecorate(null, null, _accountSubgroup_decorators, { kind: "field", name: "accountSubgroup", static: false, private: false, access: { has: obj => "accountSubgroup" in obj, get: obj => obj.accountSubgroup, set: (obj, value) => { obj.accountSubgroup = value; } }, metadata: _metadata }, _accountSubgroup_initializers, _accountSubgroup_extraInitializers);
|
|
131
|
+
__esDecorate(null, null, _accountType_decorators, { kind: "field", name: "accountType", static: false, private: false, access: { has: obj => "accountType" in obj, get: obj => obj.accountType, set: (obj, value) => { obj.accountType = value; } }, metadata: _metadata }, _accountType_initializers, _accountType_extraInitializers);
|
|
132
|
+
__esDecorate(null, null, _skrType_decorators, { kind: "field", name: "skrType", static: false, private: false, access: { has: obj => "skrType" in obj, get: obj => obj.skrType, set: (obj, value) => { obj.skrType = value; } }, metadata: _metadata }, _skrType_initializers, _skrType_extraInitializers);
|
|
133
|
+
__esDecorate(null, null, _description_decorators, { kind: "field", name: "description", static: false, private: false, access: { has: obj => "description" in obj, get: obj => obj.description, set: (obj, value) => { obj.description = value; } }, metadata: _metadata }, _description_initializers, _description_extraInitializers);
|
|
134
|
+
__esDecorate(null, null, _vatRate_decorators, { kind: "field", name: "vatRate", static: false, private: false, access: { has: obj => "vatRate" in obj, get: obj => obj.vatRate, set: (obj, value) => { obj.vatRate = value; } }, metadata: _metadata }, _vatRate_initializers, _vatRate_extraInitializers);
|
|
135
|
+
__esDecorate(null, null, _balance_decorators, { kind: "field", name: "balance", static: false, private: false, access: { has: obj => "balance" in obj, get: obj => obj.balance, set: (obj, value) => { obj.balance = value; } }, metadata: _metadata }, _balance_initializers, _balance_extraInitializers);
|
|
136
|
+
__esDecorate(null, null, _debitTotal_decorators, { kind: "field", name: "debitTotal", static: false, private: false, access: { has: obj => "debitTotal" in obj, get: obj => obj.debitTotal, set: (obj, value) => { obj.debitTotal = value; } }, metadata: _metadata }, _debitTotal_initializers, _debitTotal_extraInitializers);
|
|
137
|
+
__esDecorate(null, null, _creditTotal_decorators, { kind: "field", name: "creditTotal", static: false, private: false, access: { has: obj => "creditTotal" in obj, get: obj => obj.creditTotal, set: (obj, value) => { obj.creditTotal = value; } }, metadata: _metadata }, _creditTotal_initializers, _creditTotal_extraInitializers);
|
|
138
|
+
__esDecorate(null, null, _isActive_decorators, { kind: "field", name: "isActive", static: false, private: false, access: { has: obj => "isActive" in obj, get: obj => obj.isActive, set: (obj, value) => { obj.isActive = value; } }, metadata: _metadata }, _isActive_initializers, _isActive_extraInitializers);
|
|
139
|
+
__esDecorate(null, null, _isSystemAccount_decorators, { kind: "field", name: "isSystemAccount", static: false, private: false, access: { has: obj => "isSystemAccount" in obj, get: obj => obj.isSystemAccount, set: (obj, value) => { obj.isSystemAccount = value; } }, metadata: _metadata }, _isSystemAccount_initializers, _isSystemAccount_extraInitializers);
|
|
140
|
+
__esDecorate(null, null, _isAutomaticAccount_decorators, { kind: "field", name: "isAutomaticAccount", static: false, private: false, access: { has: obj => "isAutomaticAccount" in obj, get: obj => obj.isAutomaticAccount, set: (obj, value) => { obj.isAutomaticAccount = value; } }, metadata: _metadata }, _isAutomaticAccount_initializers, _isAutomaticAccount_extraInitializers);
|
|
141
|
+
__esDecorate(null, null, _createdAt_decorators, { kind: "field", name: "createdAt", static: false, private: false, access: { has: obj => "createdAt" in obj, get: obj => obj.createdAt, set: (obj, value) => { obj.createdAt = value; } }, metadata: _metadata }, _createdAt_initializers, _createdAt_extraInitializers);
|
|
142
|
+
__esDecorate(null, null, _updatedAt_decorators, { kind: "field", name: "updatedAt", static: false, private: false, access: { has: obj => "updatedAt" in obj, get: obj => obj.updatedAt, set: (obj, value) => { obj.updatedAt = value; } }, metadata: _metadata }, _updatedAt_initializers, _updatedAt_extraInitializers);
|
|
143
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
144
|
+
Account = _classThis = _classDescriptor.value;
|
|
145
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
146
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
147
|
+
}
|
|
148
|
+
id = __runInitializers(this, _id_initializers, void 0);
|
|
149
|
+
accountNumber = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _accountNumber_initializers, void 0));
|
|
150
|
+
accountName = (__runInitializers(this, _accountNumber_extraInitializers), __runInitializers(this, _accountName_initializers, void 0));
|
|
151
|
+
accountClass = (__runInitializers(this, _accountName_extraInitializers), __runInitializers(this, _accountClass_initializers, void 0));
|
|
152
|
+
accountGroup = (__runInitializers(this, _accountClass_extraInitializers), __runInitializers(this, _accountGroup_initializers, void 0));
|
|
153
|
+
accountSubgroup = (__runInitializers(this, _accountGroup_extraInitializers), __runInitializers(this, _accountSubgroup_initializers, void 0));
|
|
154
|
+
accountType = (__runInitializers(this, _accountSubgroup_extraInitializers), __runInitializers(this, _accountType_initializers, void 0));
|
|
155
|
+
skrType = (__runInitializers(this, _accountType_extraInitializers), __runInitializers(this, _skrType_initializers, void 0));
|
|
156
|
+
description = (__runInitializers(this, _skrType_extraInitializers), __runInitializers(this, _description_initializers, void 0));
|
|
157
|
+
vatRate = (__runInitializers(this, _description_extraInitializers), __runInitializers(this, _vatRate_initializers, void 0));
|
|
158
|
+
balance = (__runInitializers(this, _vatRate_extraInitializers), __runInitializers(this, _balance_initializers, void 0));
|
|
159
|
+
debitTotal = (__runInitializers(this, _balance_extraInitializers), __runInitializers(this, _debitTotal_initializers, void 0));
|
|
160
|
+
creditTotal = (__runInitializers(this, _debitTotal_extraInitializers), __runInitializers(this, _creditTotal_initializers, void 0));
|
|
161
|
+
isActive = (__runInitializers(this, _creditTotal_extraInitializers), __runInitializers(this, _isActive_initializers, void 0));
|
|
162
|
+
isSystemAccount = (__runInitializers(this, _isActive_extraInitializers), __runInitializers(this, _isSystemAccount_initializers, void 0));
|
|
163
|
+
isAutomaticAccount = (__runInitializers(this, _isSystemAccount_extraInitializers), __runInitializers(this, _isAutomaticAccount_initializers, void 0));
|
|
164
|
+
createdAt = (__runInitializers(this, _isAutomaticAccount_extraInitializers), __runInitializers(this, _createdAt_initializers, void 0));
|
|
165
|
+
updatedAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _updatedAt_initializers, void 0));
|
|
166
|
+
constructor(data) {
|
|
167
|
+
super();
|
|
168
|
+
__runInitializers(this, _updatedAt_extraInitializers);
|
|
169
|
+
if (data) {
|
|
170
|
+
this.id = plugins.smartunique.shortId();
|
|
171
|
+
this.accountNumber = data.accountNumber || '';
|
|
172
|
+
this.accountName = data.accountName || '';
|
|
173
|
+
this.accountClass = data.accountClass || 0;
|
|
174
|
+
this.accountType = data.accountType || 'asset';
|
|
175
|
+
this.skrType = data.skrType || 'SKR03';
|
|
176
|
+
this.description = data.description || '';
|
|
177
|
+
this.vatRate = data.vatRate || 0;
|
|
178
|
+
this.isActive = data.isActive !== undefined ? data.isActive : true;
|
|
179
|
+
// Parse account structure from number
|
|
180
|
+
if (this.accountNumber && this.accountNumber.length === 4) {
|
|
181
|
+
this.accountClass = parseInt(this.accountNumber[0]);
|
|
182
|
+
this.accountGroup = parseInt(this.accountNumber[1]);
|
|
183
|
+
this.accountSubgroup = parseInt(this.accountNumber[2]);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
this.accountGroup = 0;
|
|
187
|
+
this.accountSubgroup = 0;
|
|
188
|
+
}
|
|
189
|
+
this.balance = 0;
|
|
190
|
+
this.debitTotal = 0;
|
|
191
|
+
this.creditTotal = 0;
|
|
192
|
+
this.isSystemAccount = true;
|
|
193
|
+
this.isAutomaticAccount = data.isAutomaticAccount || false;
|
|
194
|
+
this.createdAt = new Date();
|
|
195
|
+
this.updatedAt = new Date();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
static async createAccount(data) {
|
|
199
|
+
const account = new Account(data);
|
|
200
|
+
await account.save();
|
|
201
|
+
return account;
|
|
202
|
+
}
|
|
203
|
+
static async getAccountByNumber(accountNumber, skrType) {
|
|
204
|
+
const account = await Account.getInstance({
|
|
205
|
+
accountNumber,
|
|
206
|
+
skrType,
|
|
207
|
+
});
|
|
208
|
+
return account;
|
|
209
|
+
}
|
|
210
|
+
static async getAccountsByClass(accountClass, skrType) {
|
|
211
|
+
const accounts = await Account.getInstances({
|
|
212
|
+
accountClass,
|
|
213
|
+
skrType,
|
|
214
|
+
isActive: true,
|
|
215
|
+
});
|
|
216
|
+
return accounts;
|
|
217
|
+
}
|
|
218
|
+
static async getAccountsByType(accountType, skrType) {
|
|
219
|
+
const accounts = await Account.getInstances({
|
|
220
|
+
accountType,
|
|
221
|
+
skrType,
|
|
222
|
+
isActive: true,
|
|
223
|
+
});
|
|
224
|
+
return accounts;
|
|
225
|
+
}
|
|
226
|
+
static async searchAccounts(searchTerm, skrType) {
|
|
227
|
+
const query = {};
|
|
228
|
+
if (skrType) {
|
|
229
|
+
query.skrType = skrType;
|
|
230
|
+
}
|
|
231
|
+
const accounts = await Account.getInstances(query);
|
|
232
|
+
// Filter by search term
|
|
233
|
+
const lowerSearchTerm = searchTerm.toLowerCase();
|
|
234
|
+
return accounts.filter((account) => account.accountNumber.includes(searchTerm) ||
|
|
235
|
+
account.accountName.toLowerCase().includes(lowerSearchTerm) ||
|
|
236
|
+
account.description.toLowerCase().includes(lowerSearchTerm));
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Check if account number is in debtor range (10000-69999)
|
|
240
|
+
* Debtor accounts (Debitorenkonten) are individual customer accounts
|
|
241
|
+
*/
|
|
242
|
+
static isInDebtorRange(accountNumber) {
|
|
243
|
+
const num = parseInt(accountNumber);
|
|
244
|
+
return num >= 10000 && num <= 69999;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Check if account number is in creditor range (70000-99999)
|
|
248
|
+
* Creditor accounts (Kreditorenkonten) are individual vendor accounts
|
|
249
|
+
*/
|
|
250
|
+
static isInCreditorRange(accountNumber) {
|
|
251
|
+
const num = parseInt(accountNumber);
|
|
252
|
+
return num >= 70000 && num <= 99999;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Check if account is an automatic account (Automatikkonto)
|
|
256
|
+
* Automatic accounts like 1400/1600 cannot be posted to directly
|
|
257
|
+
*/
|
|
258
|
+
static isAutomaticAccount(accountNumber, skrType) {
|
|
259
|
+
// SKR03: 1400 (Forderungen), 1600 (Verbindlichkeiten)
|
|
260
|
+
// SKR04: 1400 (Forderungen), 1600 (Verbindlichkeiten)
|
|
261
|
+
// Note: In SKR04, 3300 is "Fahrzeugkosten" (vehicle costs), NOT an automatic account
|
|
262
|
+
if (skrType === 'SKR03') {
|
|
263
|
+
return accountNumber === '1400' || accountNumber === '1600';
|
|
32
264
|
}
|
|
33
265
|
else {
|
|
34
|
-
|
|
35
|
-
this.accountSubgroup = 0;
|
|
266
|
+
return accountNumber === '1400' || accountNumber === '1600';
|
|
36
267
|
}
|
|
37
|
-
this.balance = 0;
|
|
38
|
-
this.debitTotal = 0;
|
|
39
|
-
this.creditTotal = 0;
|
|
40
|
-
this.isSystemAccount = true;
|
|
41
|
-
this.createdAt = new Date();
|
|
42
|
-
this.updatedAt = new Date();
|
|
43
268
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return accounts;
|
|
64
|
-
}
|
|
65
|
-
static async getAccountsByType(accountType, skrType) {
|
|
66
|
-
const accounts = await Account_1.getInstances({
|
|
67
|
-
accountType,
|
|
68
|
-
skrType,
|
|
69
|
-
isActive: true,
|
|
70
|
-
});
|
|
71
|
-
return accounts;
|
|
72
|
-
}
|
|
73
|
-
static async searchAccounts(searchTerm, skrType) {
|
|
74
|
-
const query = {};
|
|
75
|
-
if (skrType) {
|
|
76
|
-
query.skrType = skrType;
|
|
77
|
-
}
|
|
78
|
-
const accounts = await Account_1.getInstances(query);
|
|
79
|
-
// Filter by search term
|
|
80
|
-
const lowerSearchTerm = searchTerm.toLowerCase();
|
|
81
|
-
return accounts.filter((account) => account.accountNumber.includes(searchTerm) ||
|
|
82
|
-
account.accountName.toLowerCase().includes(lowerSearchTerm) ||
|
|
83
|
-
account.description.toLowerCase().includes(lowerSearchTerm));
|
|
84
|
-
}
|
|
85
|
-
async updateBalance(debitAmount = 0, creditAmount = 0) {
|
|
86
|
-
this.debitTotal += debitAmount;
|
|
87
|
-
this.creditTotal += creditAmount;
|
|
88
|
-
// Calculate balance based on account type
|
|
89
|
-
switch (this.accountType) {
|
|
90
|
-
case 'asset':
|
|
91
|
-
case 'expense':
|
|
92
|
-
// Normal debit accounts
|
|
93
|
-
this.balance = this.debitTotal - this.creditTotal;
|
|
94
|
-
break;
|
|
95
|
-
case 'liability':
|
|
96
|
-
case 'equity':
|
|
97
|
-
case 'revenue':
|
|
98
|
-
// Normal credit accounts
|
|
99
|
-
this.balance = this.creditTotal - this.debitTotal;
|
|
100
|
-
break;
|
|
101
|
-
}
|
|
102
|
-
this.updatedAt = new Date();
|
|
103
|
-
await this.save();
|
|
104
|
-
}
|
|
105
|
-
async deactivate() {
|
|
106
|
-
this.isActive = false;
|
|
107
|
-
this.updatedAt = new Date();
|
|
108
|
-
await this.save();
|
|
109
|
-
}
|
|
110
|
-
async activate() {
|
|
111
|
-
this.isActive = true;
|
|
112
|
-
this.updatedAt = new Date();
|
|
113
|
-
await this.save();
|
|
114
|
-
}
|
|
115
|
-
getNormalBalance() {
|
|
116
|
-
switch (this.accountType) {
|
|
117
|
-
case 'asset':
|
|
118
|
-
case 'expense':
|
|
119
|
-
return 'debit';
|
|
120
|
-
case 'liability':
|
|
121
|
-
case 'equity':
|
|
122
|
-
case 'revenue':
|
|
123
|
-
return 'credit';
|
|
269
|
+
/**
|
|
270
|
+
* Validate account for posting - throws error if account cannot be posted to
|
|
271
|
+
*/
|
|
272
|
+
static async validateAccountForPosting(accountNumber, skrType) {
|
|
273
|
+
// Check if automatic account
|
|
274
|
+
if (Account.isAutomaticAccount(accountNumber, skrType)) {
|
|
275
|
+
throw new Error(`Account ${accountNumber} is an automatic account (Automatikkonto) and cannot be posted to directly. ` +
|
|
276
|
+
`Use debtor accounts (10000-69999) or creditor accounts (70000-99999) instead.`);
|
|
277
|
+
}
|
|
278
|
+
// Get account to verify it exists
|
|
279
|
+
const account = await Account.getAccountByNumber(accountNumber, skrType);
|
|
280
|
+
if (!account) {
|
|
281
|
+
throw new Error(`Account ${accountNumber} not found in ${skrType}. ` +
|
|
282
|
+
`Please create the account before posting.`);
|
|
283
|
+
}
|
|
284
|
+
// Check if account is active
|
|
285
|
+
if (!account.isActive) {
|
|
286
|
+
throw new Error(`Account ${accountNumber} is inactive and cannot be posted to.`);
|
|
287
|
+
}
|
|
124
288
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
289
|
+
/**
|
|
290
|
+
* Check if this account instance is a debtor account
|
|
291
|
+
*/
|
|
292
|
+
isDebtorAccount() {
|
|
293
|
+
return Account.isInDebtorRange(this.accountNumber);
|
|
130
294
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
295
|
+
/**
|
|
296
|
+
* Check if this account instance is a creditor account
|
|
297
|
+
*/
|
|
298
|
+
isCreditorAccount() {
|
|
299
|
+
return Account.isInCreditorRange(this.accountNumber);
|
|
134
300
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
301
|
+
async updateBalance(debitAmount = 0, creditAmount = 0) {
|
|
302
|
+
this.debitTotal += debitAmount;
|
|
303
|
+
this.creditTotal += creditAmount;
|
|
304
|
+
// Calculate balance based on account type
|
|
305
|
+
switch (this.accountType) {
|
|
306
|
+
case 'asset':
|
|
307
|
+
case 'expense':
|
|
308
|
+
// Normal debit accounts
|
|
309
|
+
this.balance = this.debitTotal - this.creditTotal;
|
|
310
|
+
break;
|
|
311
|
+
case 'liability':
|
|
312
|
+
case 'equity':
|
|
313
|
+
case 'revenue':
|
|
314
|
+
// Normal credit accounts
|
|
315
|
+
this.balance = this.creditTotal - this.debitTotal;
|
|
316
|
+
break;
|
|
317
|
+
}
|
|
318
|
+
this.updatedAt = new Date();
|
|
319
|
+
await this.save();
|
|
139
320
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
321
|
+
async deactivate() {
|
|
322
|
+
this.isActive = false;
|
|
323
|
+
this.updatedAt = new Date();
|
|
324
|
+
await this.save();
|
|
143
325
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
__metadata("design:type", Number)
|
|
198
|
-
], Account.prototype, "debitTotal", void 0);
|
|
199
|
-
__decorate([
|
|
200
|
-
svDb(),
|
|
201
|
-
__metadata("design:type", Number)
|
|
202
|
-
], Account.prototype, "creditTotal", void 0);
|
|
203
|
-
__decorate([
|
|
204
|
-
svDb(),
|
|
205
|
-
__metadata("design:type", Boolean)
|
|
206
|
-
], Account.prototype, "isActive", void 0);
|
|
207
|
-
__decorate([
|
|
208
|
-
svDb(),
|
|
209
|
-
__metadata("design:type", Boolean)
|
|
210
|
-
], Account.prototype, "isSystemAccount", void 0);
|
|
211
|
-
__decorate([
|
|
212
|
-
svDb(),
|
|
213
|
-
__metadata("design:type", Date)
|
|
214
|
-
], Account.prototype, "createdAt", void 0);
|
|
215
|
-
__decorate([
|
|
216
|
-
svDb(),
|
|
217
|
-
__metadata("design:type", Date)
|
|
218
|
-
], Account.prototype, "updatedAt", void 0);
|
|
219
|
-
Account = Account_1 = __decorate([
|
|
220
|
-
plugins.smartdata.Collection(() => getDbSync()),
|
|
221
|
-
__metadata("design:paramtypes", [Object])
|
|
222
|
-
], Account);
|
|
326
|
+
async activate() {
|
|
327
|
+
this.isActive = true;
|
|
328
|
+
this.updatedAt = new Date();
|
|
329
|
+
await this.save();
|
|
330
|
+
}
|
|
331
|
+
getNormalBalance() {
|
|
332
|
+
switch (this.accountType) {
|
|
333
|
+
case 'asset':
|
|
334
|
+
case 'expense':
|
|
335
|
+
return 'debit';
|
|
336
|
+
case 'liability':
|
|
337
|
+
case 'equity':
|
|
338
|
+
case 'revenue':
|
|
339
|
+
return 'credit';
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
async beforeSave() {
|
|
343
|
+
// Validate account number format
|
|
344
|
+
const accountLength = this.accountNumber?.length || 0;
|
|
345
|
+
if (!this.accountNumber || (accountLength !== 4 && accountLength !== 5)) {
|
|
346
|
+
throw new Error(`Invalid account number format: ${this.accountNumber}. Must be 4 digits (standard SKR) or 5 digits (debtor/creditor).`);
|
|
347
|
+
}
|
|
348
|
+
// Validate account number is numeric
|
|
349
|
+
if (!/^\d{4,5}$/.test(this.accountNumber)) {
|
|
350
|
+
throw new Error(`Account number must contain only digits: ${this.accountNumber}`);
|
|
351
|
+
}
|
|
352
|
+
// For 5-digit accounts, validate they are in debtor (10000-69999) or creditor (70000-99999) ranges
|
|
353
|
+
if (accountLength === 5) {
|
|
354
|
+
const accountNum = parseInt(this.accountNumber);
|
|
355
|
+
const isDebtor = accountNum >= 10000 && accountNum <= 69999;
|
|
356
|
+
const isCreditor = accountNum >= 70000 && accountNum <= 99999;
|
|
357
|
+
if (!isDebtor && !isCreditor) {
|
|
358
|
+
throw new Error(`5-digit account number ${this.accountNumber} must be in debtor range (10000-69999) or creditor range (70000-99999).`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
// Validate account class matches first digit
|
|
362
|
+
const firstDigit = parseInt(this.accountNumber[0]);
|
|
363
|
+
if (this.accountClass !== firstDigit) {
|
|
364
|
+
throw new Error(`Account class ${this.accountClass} does not match account number ${this.accountNumber}`);
|
|
365
|
+
}
|
|
366
|
+
// Validate SKR type
|
|
367
|
+
if (this.skrType !== 'SKR03' && this.skrType !== 'SKR04') {
|
|
368
|
+
throw new Error(`Invalid SKR type: ${this.skrType}`);
|
|
369
|
+
}
|
|
370
|
+
// Mark automatic accounts (Automatikkonten)
|
|
371
|
+
// These are summary accounts that cannot be posted to directly
|
|
372
|
+
if (Account.isAutomaticAccount(this.accountNumber, this.skrType)) {
|
|
373
|
+
this.isAutomaticAccount = true;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
return Account = _classThis;
|
|
378
|
+
})();
|
|
223
379
|
export { Account };
|
|
224
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmNsYXNzZXMuYWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Nrci5jbGFzc2VzLmFjY291bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHckQsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBR3BFLElBQU0sT0FBTyxlQUFiLE1BQU0sT0FBUSxTQUFRLGNBQWdDO0lBeUQzRCxZQUFZLElBQTRCO1FBQ3RDLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDO1lBQy9DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcs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
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmNsYXNzZXMuYWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Nrci5jbGFzc2VzLmFjY291bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFnQnJELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBc0QsQ0FBQztBQUNoRyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQWlCLENBQUM7QUFDdkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFXLENBQUM7QUFDM0MsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFVLENBQUM7QUFDekMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFZLENBQUM7QUFDN0MsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFpQixDQUFDO0lBRzFDLE9BQU87NEJBRG5CLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7OztzQkFDRCxjQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3VCQUF0QixTQUFRLFdBQWM7Ozs7OEJBQ3hDLEdBQUcsRUFBRTt5Q0FHTCxJQUFJLEVBQUUsRUFDTixLQUFLLEVBQUU7dUNBR1AsSUFBSSxFQUFFLEVBQ04sVUFBVSxFQUFFO3dDQUdaLElBQUksRUFBRSxFQUNOLEtBQUssRUFBRTt3Q0FHUCxJQUFJLEVBQUU7MkNBR04sSUFBSSxFQUFFO3VDQUdOLElBQUksRUFBRTttQ0FHTixJQUFJLEVBQUUsRUFDTixLQUFLLEVBQUU7dUNBR1AsSUFBSSxFQUFFLEVBQ04sVUFBVSxFQUFFO21DQUdaLElBQUksRUFBRTttQ0FHTixJQUFJLEVBQUU7c0NBR04sSUFBSSxFQUFFO3VDQUdOLElBQUksRUFBRTtvQ0FHTixJQUFJLEVBQUU7MkNBR04sSUFBSSxFQUFFOzhDQUdOLElBQUksRUFBRTtxQ0FHTixJQUFJLEVBQUU7cUNBR04sSUFBSSxFQUFFO1lBdkRQLHdKQUFPLEVBQUUsNkJBQUYsRUFBRSwrRUFBVTtZQUluQix5TEFBTyxhQUFhLDZCQUFiLGFBQWEscUdBQVU7WUFJOUIsbUxBQU8sV0FBVyw2QkFBWCxXQUFXLGlHQUFVO1lBSTVCLHNMQUFPLFlBQVksNkJBQVosWUFBWSxtR0FBVTtZQUc3QixzTEFBTyxZQUFZLDZCQUFaLFlBQVksbUdBQVU7WUFHN0IsK0xBQU8sZUFBZSw2QkFBZixlQUFlLHlHQUFVO1lBR2hDLG1MQUFPLFdBQVcsNkJBQVgsV0FBVyxpR0FBZ0I7WUFJbEMsdUtBQU8sT0FBTyw2QkFBUCxPQUFPLHlGQUFZO1lBSTFCLG1MQUFPLFdBQVcsNkJBQVgsV0FBVyxpR0FBVTtZQUc1Qix1S0FBTyxPQUFPLDZCQUFQLE9BQU8seUZBQVU7WUFHeEIsdUtBQU8sT0FBTyw2QkFBUCxPQUFPLHlGQUFVO1lBR3hCLGdMQUFPLFVBQVUsNkJBQVYsVUFBVSwrRkFBVTtZQUczQixtTEFBTyxXQUFXLDZCQUFYLFdBQVcsaUdBQVU7WUFHNUIsMEtBQU8sUUFBUSw2QkFBUixRQUFRLDJGQUFXO1lBRzFCLCtMQUFPLGVBQWUsNkJBQWYsZUFBZSx5R0FBVztZQUdqQyx3TUFBTyxrQkFBa0IsNkJBQWxCLGtCQUFrQiwrR0FBVztZQUdwQyw2S0FBTyxTQUFTLDZCQUFULFNBQVMsNkZBQVE7WUFHeEIsNktBQU8sU0FBUyw2QkFBVCxTQUFTLDZGQUFRO1lBMUQxQiw2S0E2VUM7OztZQTdVWSx1REFBTzs7UUFFWCxFQUFFLHFEQUFVO1FBSVosYUFBYSxrSEFBVTtRQUl2QixXQUFXLDJIQUFVO1FBSXJCLFlBQVksMEhBQVU7UUFHdEIsWUFBWSwySEFBVTtRQUd0QixlQUFlLDhIQUFVO1FBR3pCLFdBQVcsNkhBQWdCO1FBSTNCLE9BQU8scUhBQVk7UUFJbkIsV0FBVyxxSEFBVTtRQUdyQixPQUFPLHFIQUFVO1FBR2pCLE9BQU8saUhBQVU7UUFHakIsVUFBVSxvSEFBVTtRQUdwQixXQUFXLHdIQUFVO1FBR3JCLFFBQVEsc0hBQVc7UUFHbkIsZUFBZSwwSEFBVztRQUcxQixrQkFBa0Isb0lBQVc7UUFHN0IsU0FBUyw4SEFBUTtRQUdqQixTQUFTLHFIQUFRO1FBRXhCLFlBQVksSUFBNEI7WUFDdEMsS0FBSyxFQUFFLENBQUM7O1lBRVIsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFFbkUsc0NBQXNDO2dCQUN0QyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzFELElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7Z0JBQzNCLENBQUM7Z0JBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksS0FBSyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixDQUFDO1NBQ0Y7UUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFrQjtZQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FDcEMsYUFBcUIsRUFDckIsT0FBaUI7WUFFakIsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDO2dCQUN4QyxhQUFhO2dCQUNiLE9BQU87YUFDUixDQUFDLENBQUM7WUFDSCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FDcEMsWUFBb0IsRUFDcEIsT0FBaUI7WUFFakIsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDO2dCQUMxQyxZQUFZO2dCQUNaLE9BQU87Z0JBQ1AsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7WUFDSCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FDbkMsV0FBeUIsRUFDekIsT0FBaUI7WUFFakIsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDO2dCQUMxQyxXQUFXO2dCQUNYLE9BQU87Z0JBQ1AsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7WUFDSCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQ2hDLFVBQWtCLEVBQ2xCLE9BQWtCO1lBRWxCLE1BQU0sS0FBSyxHQUFRLEVBQUUsQ0FBQztZQUN0QixJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQzFCLENBQUM7WUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFbkQsd0JBQXdCO1lBQ3hCLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQ3BCLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDVixPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7Z0JBQzFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDM0QsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQzlELENBQUM7UUFDSixDQUFDO1FBRUQ7OztXQUdHO1FBQ0ksTUFBTSxDQUFDLGVBQWUsQ0FBQyxhQUFxQjtZQUNqRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDcEMsT0FBTyxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUM7UUFDdEMsQ0FBQztRQUVEOzs7V0FHRztRQUNJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxhQUFxQjtZQUNuRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDcEMsT0FBTyxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUM7UUFDdEMsQ0FBQztRQUVEOzs7V0FHRztRQUNJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxhQUFxQixFQUFFLE9BQWlCO1lBQ3ZFLHNEQUFzRDtZQUN0RCxzREFBc0Q7WUFDdEQscUZBQXFGO1lBQ3JGLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUN4QixPQUFPLGFBQWEsS0FBSyxNQUFNLElBQUksYUFBYSxLQUFLLE1BQU0sQ0FBQztZQUM5RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxhQUFhLEtBQUssTUFBTSxJQUFJLGFBQWEsS0FBSyxNQUFNLENBQUM7WUFDOUQsQ0FBQztRQUNILENBQUM7UUFFRDs7V0FFRztRQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQzNDLGFBQXFCLEVBQ3JCLE9BQWlCO1lBRWpCLDZCQUE2QjtZQUM3QixJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDdkQsTUFBTSxJQUFJLEtBQUssQ0FDYixXQUFXLGFBQWEsOEVBQThFO29CQUN0RywrRUFBK0UsQ0FDaEYsQ0FBQztZQUNKLENBQUM7WUFFRCxrQ0FBa0M7WUFDbEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixNQUFNLElBQUksS0FBSyxDQUNiLFdBQVcsYUFBYSxpQkFBaUIsT0FBTyxJQUFJO29CQUNwRCwyQ0FBMkMsQ0FDNUMsQ0FBQztZQUNKLENBQUM7WUFFRCw2QkFBNkI7WUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FDYixXQUFXLGFBQWEsdUNBQXVDLENBQ2hFLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVEOztXQUVHO1FBQ0ksZUFBZTtZQUNwQixPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRDs7V0FFRztRQUNJLGlCQUFpQjtZQUN0QixPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVNLEtBQUssQ0FBQyxhQUFhLENBQ3hCLGNBQXNCLENBQUMsRUFDdkIsZUFBdUIsQ0FBQztZQUV4QixJQUFJLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxJQUFJLFlBQVksQ0FBQztZQUVqQywwQ0FBMEM7WUFDMUMsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3pCLEtBQUssT0FBTyxDQUFDO2dCQUNiLEtBQUssU0FBUztvQkFDWix3QkFBd0I7b0JBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO29CQUNsRCxNQUFNO2dCQUNSLEtBQUssV0FBVyxDQUFDO2dCQUNqQixLQUFLLFFBQVEsQ0FBQztnQkFDZCxLQUFLLFNBQVM7b0JBQ1oseUJBQXlCO29CQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztvQkFDbEQsTUFBTTtZQUNWLENBQUM7WUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVNLEtBQUssQ0FBQyxVQUFVO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBRU0sS0FBSyxDQUFDLFFBQVE7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFFTSxnQkFBZ0I7WUFDckIsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3pCLEtBQUssT0FBTyxDQUFDO2dCQUNiLEtBQUssU0FBUztvQkFDWixPQUFPLE9BQU8sQ0FBQztnQkFDakIsS0FBSyxXQUFXLENBQUM7Z0JBQ2pCLEtBQUssUUFBUSxDQUFDO2dCQUNkLEtBQUssU0FBUztvQkFDWixPQUFPLFFBQVEsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQztRQUVNLEtBQUssQ0FBQyxVQUFVO1lBQ3JCLGlDQUFpQztZQUNqQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxJQUFJLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN4RSxNQUFNLElBQUksS0FBSyxDQUNiLGtDQUFrQyxJQUFJLENBQUMsYUFBYSxrRUFBa0UsQ0FDdkgsQ0FBQztZQUNKLENBQUM7WUFFRCxxQ0FBcUM7WUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sSUFBSSxLQUFLLENBQ2IsNENBQTRDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FDakUsQ0FBQztZQUNKLENBQUM7WUFFRCxtR0FBbUc7WUFDbkcsSUFBSSxhQUFhLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sUUFBUSxHQUFHLFVBQVUsSUFBSSxLQUFLLElBQUksVUFBVSxJQUFJLEtBQUssQ0FBQztnQkFDNUQsTUFBTSxVQUFVLEdBQUcsVUFBVSxJQUFJLEtBQUssSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDO2dCQUU5RCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMEJBQTBCLElBQUksQ0FBQyxhQUFhLHlFQUF5RSxDQUN0SCxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsNkNBQTZDO1lBQzdDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkQsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLElBQUksS0FBSyxDQUNiLGlCQUFpQixJQUFJLENBQUMsWUFBWSxrQ0FBa0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUN6RixDQUFDO1lBQ0osQ0FBQztZQUVELG9CQUFvQjtZQUNwQixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFFRCw0Q0FBNEM7WUFDNUMsK0RBQStEO1lBQy9ELElBQUksT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7Ozs7U0E1VVUsT0FBTyJ9
|