@fin.cx/skr 1.2.1 → 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.js +1 -1
- 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 +8 -3
- package/dist_ts/skr.classes.account.js +358 -285
- 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 +424 -355
- package/dist_ts/skr.classes.ledger.js +3 -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 +8 -3
- package/dist_ts/skr.invoice.mapper.js +84 -82
- package/dist_ts/skr.invoice.storage.js +10 -5
- package/dist_ts/skr.security.js +24 -21
- package/license.md +21 -0
- package/package.json +31 -23
- package/readme.md +215 -632
- package/readme.plan.md +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- 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 +39 -21
- package/ts/skr.classes.chartofaccounts.ts +8 -3
- package/ts/skr.classes.journalentry.ts +40 -22
- 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 +5 -3
- package/ts/skr.invoice.storage.ts +3 -2
- package/ts/skr.security.ts +23 -22
|
@@ -1,307 +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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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();
|
|
36
196
|
}
|
|
37
|
-
this.balance = 0;
|
|
38
|
-
this.debitTotal = 0;
|
|
39
|
-
this.creditTotal = 0;
|
|
40
|
-
this.isSystemAccount = true;
|
|
41
|
-
this.isAutomaticAccount = data.isAutomaticAccount || false;
|
|
42
|
-
this.createdAt = new Date();
|
|
43
|
-
this.updatedAt = new Date();
|
|
44
197
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return account;
|
|
50
|
-
}
|
|
51
|
-
static async getAccountByNumber(accountNumber, skrType) {
|
|
52
|
-
const account = await Account_1.getInstance({
|
|
53
|
-
accountNumber,
|
|
54
|
-
skrType,
|
|
55
|
-
});
|
|
56
|
-
return account;
|
|
57
|
-
}
|
|
58
|
-
static async getAccountsByClass(accountClass, skrType) {
|
|
59
|
-
const accounts = await Account_1.getInstances({
|
|
60
|
-
accountClass,
|
|
61
|
-
skrType,
|
|
62
|
-
isActive: true,
|
|
63
|
-
});
|
|
64
|
-
return accounts;
|
|
65
|
-
}
|
|
66
|
-
static async getAccountsByType(accountType, skrType) {
|
|
67
|
-
const accounts = await Account_1.getInstances({
|
|
68
|
-
accountType,
|
|
69
|
-
skrType,
|
|
70
|
-
isActive: true,
|
|
71
|
-
});
|
|
72
|
-
return accounts;
|
|
73
|
-
}
|
|
74
|
-
static async searchAccounts(searchTerm, skrType) {
|
|
75
|
-
const query = {};
|
|
76
|
-
if (skrType) {
|
|
77
|
-
query.skrType = skrType;
|
|
198
|
+
static async createAccount(data) {
|
|
199
|
+
const account = new Account(data);
|
|
200
|
+
await account.save();
|
|
201
|
+
return account;
|
|
78
202
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
account
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Check if account number is in debtor range (10000-69999)
|
|
88
|
-
* Debtor accounts (Debitorenkonten) are individual customer accounts
|
|
89
|
-
*/
|
|
90
|
-
static isInDebtorRange(accountNumber) {
|
|
91
|
-
const num = parseInt(accountNumber);
|
|
92
|
-
return num >= 10000 && num <= 69999;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Check if account number is in creditor range (70000-99999)
|
|
96
|
-
* Creditor accounts (Kreditorenkonten) are individual vendor accounts
|
|
97
|
-
*/
|
|
98
|
-
static isInCreditorRange(accountNumber) {
|
|
99
|
-
const num = parseInt(accountNumber);
|
|
100
|
-
return num >= 70000 && num <= 99999;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Check if account is an automatic account (Automatikkonto)
|
|
104
|
-
* Automatic accounts like 1400/1600 cannot be posted to directly
|
|
105
|
-
*/
|
|
106
|
-
static isAutomaticAccount(accountNumber, skrType) {
|
|
107
|
-
// SKR03: 1400 (Forderungen), 1600 (Verbindlichkeiten)
|
|
108
|
-
// SKR04: 1400 (Forderungen), 1600 (Verbindlichkeiten)
|
|
109
|
-
// Note: In SKR04, 3300 is "Fahrzeugkosten" (vehicle costs), NOT an automatic account
|
|
110
|
-
if (skrType === 'SKR03') {
|
|
111
|
-
return accountNumber === '1400' || accountNumber === '1600';
|
|
203
|
+
static async getAccountByNumber(accountNumber, skrType) {
|
|
204
|
+
const account = await Account.getInstance({
|
|
205
|
+
accountNumber,
|
|
206
|
+
skrType,
|
|
207
|
+
});
|
|
208
|
+
return account;
|
|
112
209
|
}
|
|
113
|
-
|
|
114
|
-
|
|
210
|
+
static async getAccountsByClass(accountClass, skrType) {
|
|
211
|
+
const accounts = await Account.getInstances({
|
|
212
|
+
accountClass,
|
|
213
|
+
skrType,
|
|
214
|
+
isActive: true,
|
|
215
|
+
});
|
|
216
|
+
return accounts;
|
|
115
217
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
throw new Error(`Account ${accountNumber} is an automatic account (Automatikkonto) and cannot be posted to directly. ` +
|
|
124
|
-
`Use debtor accounts (10000-69999) or creditor accounts (70000-99999) instead.`);
|
|
218
|
+
static async getAccountsByType(accountType, skrType) {
|
|
219
|
+
const accounts = await Account.getInstances({
|
|
220
|
+
accountType,
|
|
221
|
+
skrType,
|
|
222
|
+
isActive: true,
|
|
223
|
+
});
|
|
224
|
+
return accounts;
|
|
125
225
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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));
|
|
131
237
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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;
|
|
135
245
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Check if this account instance is a creditor account
|
|
145
|
-
*/
|
|
146
|
-
isCreditorAccount() {
|
|
147
|
-
return Account_1.isInCreditorRange(this.accountNumber);
|
|
148
|
-
}
|
|
149
|
-
async updateBalance(debitAmount = 0, creditAmount = 0) {
|
|
150
|
-
this.debitTotal += debitAmount;
|
|
151
|
-
this.creditTotal += creditAmount;
|
|
152
|
-
// Calculate balance based on account type
|
|
153
|
-
switch (this.accountType) {
|
|
154
|
-
case 'asset':
|
|
155
|
-
case 'expense':
|
|
156
|
-
// Normal debit accounts
|
|
157
|
-
this.balance = this.debitTotal - this.creditTotal;
|
|
158
|
-
break;
|
|
159
|
-
case 'liability':
|
|
160
|
-
case 'equity':
|
|
161
|
-
case 'revenue':
|
|
162
|
-
// Normal credit accounts
|
|
163
|
-
this.balance = this.creditTotal - this.debitTotal;
|
|
164
|
-
break;
|
|
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;
|
|
165
253
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
switch (this.accountType) {
|
|
181
|
-
case 'asset':
|
|
182
|
-
case 'expense':
|
|
183
|
-
return 'debit';
|
|
184
|
-
case 'liability':
|
|
185
|
-
case 'equity':
|
|
186
|
-
case 'revenue':
|
|
187
|
-
return 'credit';
|
|
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';
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
return accountNumber === '1400' || accountNumber === '1600';
|
|
267
|
+
}
|
|
188
268
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Check if this account instance is a debtor account
|
|
291
|
+
*/
|
|
292
|
+
isDebtorAccount() {
|
|
293
|
+
return Account.isInDebtorRange(this.accountNumber);
|
|
195
294
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
295
|
+
/**
|
|
296
|
+
* Check if this account instance is a creditor account
|
|
297
|
+
*/
|
|
298
|
+
isCreditorAccount() {
|
|
299
|
+
return Account.isInCreditorRange(this.accountNumber);
|
|
199
300
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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;
|
|
207
317
|
}
|
|
318
|
+
this.updatedAt = new Date();
|
|
319
|
+
await this.save();
|
|
320
|
+
}
|
|
321
|
+
async deactivate() {
|
|
322
|
+
this.isActive = false;
|
|
323
|
+
this.updatedAt = new Date();
|
|
324
|
+
await this.save();
|
|
208
325
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
326
|
+
async activate() {
|
|
327
|
+
this.isActive = true;
|
|
328
|
+
this.updatedAt = new Date();
|
|
329
|
+
await this.save();
|
|
213
330
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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
|
+
}
|
|
217
341
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
this.
|
|
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
|
+
}
|
|
222
375
|
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
unI(),
|
|
227
|
-
__metadata("design:type", String)
|
|
228
|
-
], Account.prototype, "id", void 0);
|
|
229
|
-
__decorate([
|
|
230
|
-
svDb(),
|
|
231
|
-
index(),
|
|
232
|
-
__metadata("design:type", String)
|
|
233
|
-
], Account.prototype, "accountNumber", void 0);
|
|
234
|
-
__decorate([
|
|
235
|
-
svDb(),
|
|
236
|
-
searchable(),
|
|
237
|
-
__metadata("design:type", String)
|
|
238
|
-
], Account.prototype, "accountName", void 0);
|
|
239
|
-
__decorate([
|
|
240
|
-
svDb(),
|
|
241
|
-
index(),
|
|
242
|
-
__metadata("design:type", Number)
|
|
243
|
-
], Account.prototype, "accountClass", void 0);
|
|
244
|
-
__decorate([
|
|
245
|
-
svDb(),
|
|
246
|
-
__metadata("design:type", Number)
|
|
247
|
-
], Account.prototype, "accountGroup", void 0);
|
|
248
|
-
__decorate([
|
|
249
|
-
svDb(),
|
|
250
|
-
__metadata("design:type", Number)
|
|
251
|
-
], Account.prototype, "accountSubgroup", void 0);
|
|
252
|
-
__decorate([
|
|
253
|
-
svDb(),
|
|
254
|
-
__metadata("design:type", String)
|
|
255
|
-
], Account.prototype, "accountType", void 0);
|
|
256
|
-
__decorate([
|
|
257
|
-
svDb(),
|
|
258
|
-
index(),
|
|
259
|
-
__metadata("design:type", String)
|
|
260
|
-
], Account.prototype, "skrType", void 0);
|
|
261
|
-
__decorate([
|
|
262
|
-
svDb(),
|
|
263
|
-
searchable(),
|
|
264
|
-
__metadata("design:type", String)
|
|
265
|
-
], Account.prototype, "description", void 0);
|
|
266
|
-
__decorate([
|
|
267
|
-
svDb(),
|
|
268
|
-
__metadata("design:type", Number)
|
|
269
|
-
], Account.prototype, "vatRate", void 0);
|
|
270
|
-
__decorate([
|
|
271
|
-
svDb(),
|
|
272
|
-
__metadata("design:type", Number)
|
|
273
|
-
], Account.prototype, "balance", void 0);
|
|
274
|
-
__decorate([
|
|
275
|
-
svDb(),
|
|
276
|
-
__metadata("design:type", Number)
|
|
277
|
-
], Account.prototype, "debitTotal", void 0);
|
|
278
|
-
__decorate([
|
|
279
|
-
svDb(),
|
|
280
|
-
__metadata("design:type", Number)
|
|
281
|
-
], Account.prototype, "creditTotal", void 0);
|
|
282
|
-
__decorate([
|
|
283
|
-
svDb(),
|
|
284
|
-
__metadata("design:type", Boolean)
|
|
285
|
-
], Account.prototype, "isActive", void 0);
|
|
286
|
-
__decorate([
|
|
287
|
-
svDb(),
|
|
288
|
-
__metadata("design:type", Boolean)
|
|
289
|
-
], Account.prototype, "isSystemAccount", void 0);
|
|
290
|
-
__decorate([
|
|
291
|
-
svDb(),
|
|
292
|
-
__metadata("design:type", Boolean)
|
|
293
|
-
], Account.prototype, "isAutomaticAccount", void 0);
|
|
294
|
-
__decorate([
|
|
295
|
-
svDb(),
|
|
296
|
-
__metadata("design:type", Date)
|
|
297
|
-
], Account.prototype, "createdAt", void 0);
|
|
298
|
-
__decorate([
|
|
299
|
-
svDb(),
|
|
300
|
-
__metadata("design:type", Date)
|
|
301
|
-
], Account.prototype, "updatedAt", void 0);
|
|
302
|
-
Account = Account_1 = __decorate([
|
|
303
|
-
plugins.smartdata.Collection(() => getDbSync()),
|
|
304
|
-
__metadata("design:paramtypes", [Object])
|
|
305
|
-
], Account);
|
|
376
|
+
};
|
|
377
|
+
return Account = _classThis;
|
|
378
|
+
})();
|
|
306
379
|
export { Account };
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmNsYXNzZXMuYWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Nrci5jbGFzc2VzLmFjY291bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHckQsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBR3BFLElBQU0sT0FBTyxlQUFiLE1BQU0sT0FBUSxTQUFRLGNBQWdDO0lBNEQzRCxZQUFZLElBQTRCO1FBQ3RDLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDO1lBQy9DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcs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
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmNsYXNzZXMuYWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Nrci5jbGFzc2VzLmFjY291bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFnQnJELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBc0QsQ0FBQztBQUNoRyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQWlCLENBQUM7QUFDdkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFXLENBQUM7QUFDM0MsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFVLENBQUM7QUFDekMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFZLENBQUM7QUFDN0MsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFpQixDQUFDO0lBRzFDLE9BQU87NEJBRG5CLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7OztzQkFDRCxjQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3VCQUF0QixTQUFRLFdBQWM7Ozs7OEJBQ3hDLEdBQUcsRUFBRTt5Q0FHTCxJQUFJLEVBQUUsRUFDTixLQUFLLEVBQUU7dUNBR1AsSUFBSSxFQUFFLEVBQ04sVUFBVSxFQUFFO3dDQUdaLElBQUksRUFBRSxFQUNOLEtBQUssRUFBRTt3Q0FHUCxJQUFJLEVBQUU7MkNBR04sSUFBSSxFQUFFO3VDQUdOLElBQUksRUFBRTttQ0FHTixJQUFJLEVBQUUsRUFDTixLQUFLLEVBQUU7dUNBR1As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
|