@fin.cx/skr 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +32 -24
- 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,388 +1,457 @@
|
|
|
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 JournalEntry_1;
|
|
11
35
|
import * as plugins from './plugins.js';
|
|
12
36
|
import { getDbSync } from './skr.database.js';
|
|
13
37
|
import { Account } from './skr.classes.account.js';
|
|
14
38
|
import { Transaction } from './skr.classes.transaction.js';
|
|
15
39
|
import { validatePostingKey, validatePostingKeyConsistency, getPostingKeyDescription, } from './skr.postingkeys.js';
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
40
|
+
const SmartDataDbDoc = plugins.smartdata.SmartDataDbDoc;
|
|
41
|
+
const Collection = plugins.smartdata.Collection;
|
|
42
|
+
const svDb = plugins.smartdata.svDb;
|
|
43
|
+
const unI = plugins.smartdata.unI;
|
|
44
|
+
const index = plugins.smartdata.index;
|
|
45
|
+
const searchable = plugins.smartdata.searchable;
|
|
46
|
+
let JournalEntry = (() => {
|
|
47
|
+
let _classDecorators = [Collection(() => getDbSync())];
|
|
48
|
+
let _classDescriptor;
|
|
49
|
+
let _classExtraInitializers = [];
|
|
50
|
+
let _classThis;
|
|
51
|
+
let _classSuper = SmartDataDbDoc;
|
|
52
|
+
let _id_decorators;
|
|
53
|
+
let _id_initializers = [];
|
|
54
|
+
let _id_extraInitializers = [];
|
|
55
|
+
let _journalNumber_decorators;
|
|
56
|
+
let _journalNumber_initializers = [];
|
|
57
|
+
let _journalNumber_extraInitializers = [];
|
|
58
|
+
let _date_decorators;
|
|
59
|
+
let _date_initializers = [];
|
|
60
|
+
let _date_extraInitializers = [];
|
|
61
|
+
let _description_decorators;
|
|
62
|
+
let _description_initializers = [];
|
|
63
|
+
let _description_extraInitializers = [];
|
|
64
|
+
let _reference_decorators;
|
|
65
|
+
let _reference_initializers = [];
|
|
66
|
+
let _reference_extraInitializers = [];
|
|
67
|
+
let _lines_decorators;
|
|
68
|
+
let _lines_initializers = [];
|
|
69
|
+
let _lines_extraInitializers = [];
|
|
70
|
+
let _skrType_decorators;
|
|
71
|
+
let _skrType_initializers = [];
|
|
72
|
+
let _skrType_extraInitializers = [];
|
|
73
|
+
let _totalDebits_decorators;
|
|
74
|
+
let _totalDebits_initializers = [];
|
|
75
|
+
let _totalDebits_extraInitializers = [];
|
|
76
|
+
let _totalCredits_decorators;
|
|
77
|
+
let _totalCredits_initializers = [];
|
|
78
|
+
let _totalCredits_extraInitializers = [];
|
|
79
|
+
let _isBalanced_decorators;
|
|
80
|
+
let _isBalanced_initializers = [];
|
|
81
|
+
let _isBalanced_extraInitializers = [];
|
|
82
|
+
let _status_decorators;
|
|
83
|
+
let _status_initializers = [];
|
|
84
|
+
let _status_extraInitializers = [];
|
|
85
|
+
let _transactionIds_decorators;
|
|
86
|
+
let _transactionIds_initializers = [];
|
|
87
|
+
let _transactionIds_extraInitializers = [];
|
|
88
|
+
let _period_decorators;
|
|
89
|
+
let _period_initializers = [];
|
|
90
|
+
let _period_extraInitializers = [];
|
|
91
|
+
let _fiscalYear_decorators;
|
|
92
|
+
let _fiscalYear_initializers = [];
|
|
93
|
+
let _fiscalYear_extraInitializers = [];
|
|
94
|
+
let _createdAt_decorators;
|
|
95
|
+
let _createdAt_initializers = [];
|
|
96
|
+
let _createdAt_extraInitializers = [];
|
|
97
|
+
let _postedAt_decorators;
|
|
98
|
+
let _postedAt_initializers = [];
|
|
99
|
+
let _postedAt_extraInitializers = [];
|
|
100
|
+
let _createdBy_decorators;
|
|
101
|
+
let _createdBy_initializers = [];
|
|
102
|
+
let _createdBy_extraInitializers = [];
|
|
103
|
+
var JournalEntry = 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
|
+
_journalNumber_decorators = [svDb(), index()];
|
|
109
|
+
_date_decorators = [svDb(), index()];
|
|
110
|
+
_description_decorators = [svDb(), searchable()];
|
|
111
|
+
_reference_decorators = [svDb(), index()];
|
|
112
|
+
_lines_decorators = [svDb()];
|
|
113
|
+
_skrType_decorators = [svDb(), index()];
|
|
114
|
+
_totalDebits_decorators = [svDb()];
|
|
115
|
+
_totalCredits_decorators = [svDb()];
|
|
116
|
+
_isBalanced_decorators = [svDb()];
|
|
117
|
+
_status_decorators = [svDb(), index()];
|
|
118
|
+
_transactionIds_decorators = [svDb()];
|
|
119
|
+
_period_decorators = [svDb(), index()];
|
|
120
|
+
_fiscalYear_decorators = [svDb()];
|
|
121
|
+
_createdAt_decorators = [svDb()];
|
|
122
|
+
_postedAt_decorators = [svDb()];
|
|
123
|
+
_createdBy_decorators = [svDb()];
|
|
124
|
+
__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);
|
|
125
|
+
__esDecorate(null, null, _journalNumber_decorators, { kind: "field", name: "journalNumber", static: false, private: false, access: { has: obj => "journalNumber" in obj, get: obj => obj.journalNumber, set: (obj, value) => { obj.journalNumber = value; } }, metadata: _metadata }, _journalNumber_initializers, _journalNumber_extraInitializers);
|
|
126
|
+
__esDecorate(null, null, _date_decorators, { kind: "field", name: "date", static: false, private: false, access: { has: obj => "date" in obj, get: obj => obj.date, set: (obj, value) => { obj.date = value; } }, metadata: _metadata }, _date_initializers, _date_extraInitializers);
|
|
127
|
+
__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);
|
|
128
|
+
__esDecorate(null, null, _reference_decorators, { kind: "field", name: "reference", static: false, private: false, access: { has: obj => "reference" in obj, get: obj => obj.reference, set: (obj, value) => { obj.reference = value; } }, metadata: _metadata }, _reference_initializers, _reference_extraInitializers);
|
|
129
|
+
__esDecorate(null, null, _lines_decorators, { kind: "field", name: "lines", static: false, private: false, access: { has: obj => "lines" in obj, get: obj => obj.lines, set: (obj, value) => { obj.lines = value; } }, metadata: _metadata }, _lines_initializers, _lines_extraInitializers);
|
|
130
|
+
__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);
|
|
131
|
+
__esDecorate(null, null, _totalDebits_decorators, { kind: "field", name: "totalDebits", static: false, private: false, access: { has: obj => "totalDebits" in obj, get: obj => obj.totalDebits, set: (obj, value) => { obj.totalDebits = value; } }, metadata: _metadata }, _totalDebits_initializers, _totalDebits_extraInitializers);
|
|
132
|
+
__esDecorate(null, null, _totalCredits_decorators, { kind: "field", name: "totalCredits", static: false, private: false, access: { has: obj => "totalCredits" in obj, get: obj => obj.totalCredits, set: (obj, value) => { obj.totalCredits = value; } }, metadata: _metadata }, _totalCredits_initializers, _totalCredits_extraInitializers);
|
|
133
|
+
__esDecorate(null, null, _isBalanced_decorators, { kind: "field", name: "isBalanced", static: false, private: false, access: { has: obj => "isBalanced" in obj, get: obj => obj.isBalanced, set: (obj, value) => { obj.isBalanced = value; } }, metadata: _metadata }, _isBalanced_initializers, _isBalanced_extraInitializers);
|
|
134
|
+
__esDecorate(null, null, _status_decorators, { kind: "field", name: "status", static: false, private: false, access: { has: obj => "status" in obj, get: obj => obj.status, set: (obj, value) => { obj.status = value; } }, metadata: _metadata }, _status_initializers, _status_extraInitializers);
|
|
135
|
+
__esDecorate(null, null, _transactionIds_decorators, { kind: "field", name: "transactionIds", static: false, private: false, access: { has: obj => "transactionIds" in obj, get: obj => obj.transactionIds, set: (obj, value) => { obj.transactionIds = value; } }, metadata: _metadata }, _transactionIds_initializers, _transactionIds_extraInitializers);
|
|
136
|
+
__esDecorate(null, null, _period_decorators, { kind: "field", name: "period", static: false, private: false, access: { has: obj => "period" in obj, get: obj => obj.period, set: (obj, value) => { obj.period = value; } }, metadata: _metadata }, _period_initializers, _period_extraInitializers);
|
|
137
|
+
__esDecorate(null, null, _fiscalYear_decorators, { kind: "field", name: "fiscalYear", static: false, private: false, access: { has: obj => "fiscalYear" in obj, get: obj => obj.fiscalYear, set: (obj, value) => { obj.fiscalYear = value; } }, metadata: _metadata }, _fiscalYear_initializers, _fiscalYear_extraInitializers);
|
|
138
|
+
__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);
|
|
139
|
+
__esDecorate(null, null, _postedAt_decorators, { kind: "field", name: "postedAt", static: false, private: false, access: { has: obj => "postedAt" in obj, get: obj => obj.postedAt, set: (obj, value) => { obj.postedAt = value; } }, metadata: _metadata }, _postedAt_initializers, _postedAt_extraInitializers);
|
|
140
|
+
__esDecorate(null, null, _createdBy_decorators, { kind: "field", name: "createdBy", static: false, private: false, access: { has: obj => "createdBy" in obj, get: obj => obj.createdBy, set: (obj, value) => { obj.createdBy = value; } }, metadata: _metadata }, _createdBy_initializers, _createdBy_extraInitializers);
|
|
141
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
142
|
+
JournalEntry = _classThis = _classDescriptor.value;
|
|
143
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
144
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
145
|
+
}
|
|
146
|
+
id = __runInitializers(this, _id_initializers, void 0);
|
|
147
|
+
journalNumber = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _journalNumber_initializers, void 0));
|
|
148
|
+
date = (__runInitializers(this, _journalNumber_extraInitializers), __runInitializers(this, _date_initializers, void 0));
|
|
149
|
+
description = (__runInitializers(this, _date_extraInitializers), __runInitializers(this, _description_initializers, void 0));
|
|
150
|
+
reference = (__runInitializers(this, _description_extraInitializers), __runInitializers(this, _reference_initializers, void 0));
|
|
151
|
+
lines = (__runInitializers(this, _reference_extraInitializers), __runInitializers(this, _lines_initializers, void 0));
|
|
152
|
+
skrType = (__runInitializers(this, _lines_extraInitializers), __runInitializers(this, _skrType_initializers, void 0));
|
|
153
|
+
totalDebits = (__runInitializers(this, _skrType_extraInitializers), __runInitializers(this, _totalDebits_initializers, void 0));
|
|
154
|
+
totalCredits = (__runInitializers(this, _totalDebits_extraInitializers), __runInitializers(this, _totalCredits_initializers, void 0));
|
|
155
|
+
isBalanced = (__runInitializers(this, _totalCredits_extraInitializers), __runInitializers(this, _isBalanced_initializers, void 0));
|
|
156
|
+
status = (__runInitializers(this, _isBalanced_extraInitializers), __runInitializers(this, _status_initializers, void 0));
|
|
157
|
+
transactionIds = (__runInitializers(this, _status_extraInitializers), __runInitializers(this, _transactionIds_initializers, void 0));
|
|
158
|
+
period = (__runInitializers(this, _transactionIds_extraInitializers), __runInitializers(this, _period_initializers, void 0));
|
|
159
|
+
fiscalYear = (__runInitializers(this, _period_extraInitializers), __runInitializers(this, _fiscalYear_initializers, void 0));
|
|
160
|
+
createdAt = (__runInitializers(this, _fiscalYear_extraInitializers), __runInitializers(this, _createdAt_initializers, void 0));
|
|
161
|
+
postedAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _postedAt_initializers, void 0));
|
|
162
|
+
createdBy = (__runInitializers(this, _postedAt_extraInitializers), __runInitializers(this, _createdBy_initializers, void 0));
|
|
163
|
+
constructor(data) {
|
|
164
|
+
super();
|
|
165
|
+
__runInitializers(this, _createdBy_extraInitializers);
|
|
166
|
+
if (data) {
|
|
167
|
+
this.id = plugins.smartunique.shortId();
|
|
168
|
+
this.journalNumber = this.generateJournalNumber();
|
|
169
|
+
this.date = data.date || new Date();
|
|
170
|
+
this.description = data.description || '';
|
|
171
|
+
this.reference = data.reference || '';
|
|
172
|
+
this.lines = data.lines || [];
|
|
173
|
+
this.skrType = data.skrType || 'SKR03';
|
|
174
|
+
this.totalDebits = 0;
|
|
175
|
+
this.totalCredits = 0;
|
|
176
|
+
this.isBalanced = false;
|
|
177
|
+
this.status = 'draft';
|
|
178
|
+
this.transactionIds = [];
|
|
179
|
+
// Set period and fiscal year
|
|
180
|
+
const entryDate = new Date(this.date);
|
|
181
|
+
this.period = `${entryDate.getFullYear()}-${String(entryDate.getMonth() + 1).padStart(2, '0')}`;
|
|
182
|
+
this.fiscalYear = entryDate.getFullYear();
|
|
183
|
+
this.createdAt = new Date();
|
|
184
|
+
this.postedAt = null;
|
|
185
|
+
this.createdBy = 'system';
|
|
186
|
+
// Normalize any negative amounts to the correct side
|
|
187
|
+
this.sanitizeLines();
|
|
188
|
+
// Calculate totals
|
|
189
|
+
this.calculateTotals();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
generateJournalNumber() {
|
|
193
|
+
const timestamp = Date.now();
|
|
194
|
+
const random = Math.floor(Math.random() * 1000);
|
|
195
|
+
return `JE-${timestamp}-${random}`;
|
|
196
|
+
}
|
|
197
|
+
sanitizeLines() {
|
|
198
|
+
for (const line of this.lines) {
|
|
199
|
+
// Check if both debit and credit are set (not allowed)
|
|
200
|
+
if (line.debit !== undefined && line.debit !== 0 &&
|
|
201
|
+
line.credit !== undefined && line.credit !== 0) {
|
|
202
|
+
throw new Error('A line cannot have both debit and credit amounts');
|
|
203
|
+
}
|
|
204
|
+
// Handle negative debit - convert to positive credit
|
|
205
|
+
if (line.debit !== undefined && line.debit < 0) {
|
|
206
|
+
line.credit = Math.abs(line.debit);
|
|
207
|
+
delete line.debit;
|
|
208
|
+
}
|
|
209
|
+
// Handle negative credit - convert to positive debit
|
|
210
|
+
if (line.credit !== undefined && line.credit < 0) {
|
|
211
|
+
line.debit = Math.abs(line.credit);
|
|
212
|
+
delete line.credit;
|
|
213
|
+
}
|
|
214
|
+
// Check that at least one side has a positive value
|
|
215
|
+
const hasDebit = line.debit !== undefined && line.debit > 0;
|
|
216
|
+
const hasCredit = line.credit !== undefined && line.credit > 0;
|
|
217
|
+
if (!hasDebit && !hasCredit) {
|
|
218
|
+
throw new Error('Either debit or credit must be a positive number');
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
calculateTotals() {
|
|
28
223
|
this.totalDebits = 0;
|
|
29
224
|
this.totalCredits = 0;
|
|
30
|
-
this.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
this.createdAt = new Date();
|
|
38
|
-
this.postedAt = null;
|
|
39
|
-
this.createdBy = 'system';
|
|
40
|
-
// Normalize any negative amounts to the correct side
|
|
41
|
-
this.sanitizeLines();
|
|
42
|
-
// Calculate totals
|
|
43
|
-
this.calculateTotals();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
generateJournalNumber() {
|
|
47
|
-
const timestamp = Date.now();
|
|
48
|
-
const random = Math.floor(Math.random() * 1000);
|
|
49
|
-
return `JE-${timestamp}-${random}`;
|
|
50
|
-
}
|
|
51
|
-
sanitizeLines() {
|
|
52
|
-
for (const line of this.lines) {
|
|
53
|
-
// Check if both debit and credit are set (not allowed)
|
|
54
|
-
if (line.debit !== undefined && line.debit !== 0 &&
|
|
55
|
-
line.credit !== undefined && line.credit !== 0) {
|
|
56
|
-
throw new Error('A line cannot have both debit and credit amounts');
|
|
225
|
+
for (const line of this.lines) {
|
|
226
|
+
if (line.debit) {
|
|
227
|
+
this.totalDebits += line.debit;
|
|
228
|
+
}
|
|
229
|
+
if (line.credit) {
|
|
230
|
+
this.totalCredits += line.credit;
|
|
231
|
+
}
|
|
57
232
|
}
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
233
|
+
// Check if balanced (allowing for small rounding differences)
|
|
234
|
+
const difference = Math.abs(this.totalDebits - this.totalCredits);
|
|
235
|
+
this.isBalanced = difference < 0.01;
|
|
236
|
+
}
|
|
237
|
+
static async createJournalEntry(data) {
|
|
238
|
+
const journalEntry = new JournalEntry(data);
|
|
239
|
+
await journalEntry.validate();
|
|
240
|
+
await journalEntry.save();
|
|
241
|
+
return journalEntry;
|
|
242
|
+
}
|
|
243
|
+
addLine(line) {
|
|
244
|
+
// Validate line
|
|
245
|
+
if (!line.accountNumber) {
|
|
246
|
+
throw new Error('Account number is required for journal entry line');
|
|
62
247
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
line.debit = Math.abs(line.credit);
|
|
66
|
-
delete line.credit;
|
|
248
|
+
if (!line.debit && !line.credit) {
|
|
249
|
+
throw new Error('Either debit or credit amount is required');
|
|
67
250
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const hasCredit = line.credit !== undefined && line.credit > 0;
|
|
71
|
-
if (!hasDebit && !hasCredit) {
|
|
72
|
-
throw new Error('Either debit or credit must be a positive number');
|
|
251
|
+
if (line.debit && line.credit) {
|
|
252
|
+
throw new Error('A line cannot have both debit and credit amounts');
|
|
73
253
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
calculateTotals() {
|
|
77
|
-
this.totalDebits = 0;
|
|
78
|
-
this.totalCredits = 0;
|
|
79
|
-
for (const line of this.lines) {
|
|
80
|
-
if (line.debit) {
|
|
81
|
-
this.totalDebits += line.debit;
|
|
254
|
+
if (line.debit && line.debit < 0) {
|
|
255
|
+
throw new Error('Debit amount must be positive');
|
|
82
256
|
}
|
|
83
|
-
if (line.credit) {
|
|
84
|
-
|
|
257
|
+
if (line.credit && line.credit < 0) {
|
|
258
|
+
throw new Error('Credit amount must be positive');
|
|
85
259
|
}
|
|
86
|
-
|
|
87
|
-
// Check if balanced (allowing for small rounding differences)
|
|
88
|
-
const difference = Math.abs(this.totalDebits - this.totalCredits);
|
|
89
|
-
this.isBalanced = difference < 0.01;
|
|
90
|
-
}
|
|
91
|
-
static async createJournalEntry(data) {
|
|
92
|
-
const journalEntry = new JournalEntry_1(data);
|
|
93
|
-
await journalEntry.validate();
|
|
94
|
-
await journalEntry.save();
|
|
95
|
-
return journalEntry;
|
|
96
|
-
}
|
|
97
|
-
addLine(line) {
|
|
98
|
-
// Validate line
|
|
99
|
-
if (!line.accountNumber) {
|
|
100
|
-
throw new Error('Account number is required for journal entry line');
|
|
101
|
-
}
|
|
102
|
-
if (!line.debit && !line.credit) {
|
|
103
|
-
throw new Error('Either debit or credit amount is required');
|
|
104
|
-
}
|
|
105
|
-
if (line.debit && line.credit) {
|
|
106
|
-
throw new Error('A line cannot have both debit and credit amounts');
|
|
107
|
-
}
|
|
108
|
-
if (line.debit && line.debit < 0) {
|
|
109
|
-
throw new Error('Debit amount must be positive');
|
|
110
|
-
}
|
|
111
|
-
if (line.credit && line.credit < 0) {
|
|
112
|
-
throw new Error('Credit amount must be positive');
|
|
113
|
-
}
|
|
114
|
-
this.lines.push(line);
|
|
115
|
-
this.calculateTotals();
|
|
116
|
-
}
|
|
117
|
-
removeLine(index) {
|
|
118
|
-
if (index >= 0 && index < this.lines.length) {
|
|
119
|
-
this.lines.splice(index, 1);
|
|
260
|
+
this.lines.push(line);
|
|
120
261
|
this.calculateTotals();
|
|
121
262
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
// Check minimum lines
|
|
129
|
-
if (this.lines.length < 2) {
|
|
130
|
-
throw new Error('Journal entry must have at least 2 lines');
|
|
263
|
+
removeLine(index) {
|
|
264
|
+
if (index >= 0 && index < this.lines.length) {
|
|
265
|
+
this.lines.splice(index, 1);
|
|
266
|
+
this.calculateTotals();
|
|
267
|
+
}
|
|
131
268
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const hasVATLines = this.lines.some(line => line.accountNumber === '1571' || line.accountNumber === '1771' || line.accountNumber === '1576');
|
|
137
|
-
for (const line of this.lines) {
|
|
138
|
-
// Validate posting key is present (REQUIRED)
|
|
139
|
-
if (!line.postingKey) {
|
|
140
|
-
validationErrors.push(`Line for account ${line.accountNumber} is missing required posting key (Buchungsschlüssel). ` +
|
|
141
|
-
`Posting keys are mandatory for DATEV compliance.`);
|
|
142
|
-
continue; // Skip further validation for this line
|
|
269
|
+
async validate() {
|
|
270
|
+
// Check if entry is balanced
|
|
271
|
+
if (!this.isBalanced) {
|
|
272
|
+
throw new Error(`Journal entry is not balanced. Debits: ${this.totalDebits}, Credits: ${this.totalCredits}`);
|
|
143
273
|
}
|
|
144
|
-
//
|
|
145
|
-
|
|
146
|
-
|
|
274
|
+
// Check minimum lines
|
|
275
|
+
if (this.lines.length < 2) {
|
|
276
|
+
throw new Error('Journal entry must have at least 2 lines');
|
|
147
277
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
278
|
+
// Validate all accounts exist, are active, and can be posted to
|
|
279
|
+
const validationErrors = [];
|
|
280
|
+
const validationWarnings = [];
|
|
281
|
+
// Check if this journal entry has VAT lines (for smarter posting key validation)
|
|
282
|
+
const hasVATLines = this.lines.some(line => line.accountNumber === '1571' || line.accountNumber === '1771' || line.accountNumber === '1576');
|
|
283
|
+
for (const line of this.lines) {
|
|
284
|
+
// Validate posting key is present (REQUIRED)
|
|
285
|
+
if (!line.postingKey) {
|
|
286
|
+
validationErrors.push(`Line for account ${line.accountNumber} is missing required posting key (Buchungsschlüssel). ` +
|
|
287
|
+
`Posting keys are mandatory for DATEV compliance.`);
|
|
288
|
+
continue; // Skip further validation for this line
|
|
289
|
+
}
|
|
290
|
+
// Validate account is not an automatic account (Automatikkonto)
|
|
291
|
+
try {
|
|
292
|
+
await Account.validateAccountForPosting(line.accountNumber, this.skrType);
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
validationErrors.push(error instanceof Error ? error.message : String(error));
|
|
296
|
+
continue; // Skip further validation for this line
|
|
297
|
+
}
|
|
298
|
+
// Get account for posting key validation
|
|
299
|
+
const account = await Account.getAccountByNumber(line.accountNumber, this.skrType);
|
|
300
|
+
if (!account) {
|
|
301
|
+
validationErrors.push(`Account ${line.accountNumber} not found for ${this.skrType}`);
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
if (!account.isActive) {
|
|
305
|
+
validationErrors.push(`Account ${line.accountNumber} is not active`);
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
// Validate posting key for this line
|
|
309
|
+
const amount = line.debit || line.credit || 0;
|
|
310
|
+
// For journal entries with VAT lines, pass amount as vatAmount to satisfy validation
|
|
311
|
+
const postingKeyValidation = validatePostingKey(line.postingKey, line.accountNumber, amount, hasVATLines ? amount : undefined // If entry has VAT lines, we consider the validation satisfied
|
|
312
|
+
);
|
|
313
|
+
if (!postingKeyValidation.isValid) {
|
|
314
|
+
validationErrors.push(...postingKeyValidation.errors);
|
|
315
|
+
}
|
|
316
|
+
if (postingKeyValidation.warnings.length > 0) {
|
|
317
|
+
validationWarnings.push(...postingKeyValidation.warnings);
|
|
318
|
+
}
|
|
151
319
|
}
|
|
152
|
-
//
|
|
153
|
-
const
|
|
154
|
-
if (!
|
|
155
|
-
validationErrors.push(
|
|
156
|
-
continue;
|
|
320
|
+
// Validate posting key consistency across all lines
|
|
321
|
+
const consistencyValidation = validatePostingKeyConsistency(this.lines);
|
|
322
|
+
if (!consistencyValidation.isValid) {
|
|
323
|
+
validationErrors.push(...consistencyValidation.errors);
|
|
157
324
|
}
|
|
158
|
-
if (
|
|
159
|
-
|
|
160
|
-
continue;
|
|
325
|
+
if (consistencyValidation.warnings.length > 0) {
|
|
326
|
+
validationWarnings.push(...consistencyValidation.warnings);
|
|
161
327
|
}
|
|
162
|
-
//
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
);
|
|
167
|
-
if (!postingKeyValidation.isValid) {
|
|
168
|
-
validationErrors.push(...postingKeyValidation.errors);
|
|
328
|
+
// Log warnings but don't fail validation
|
|
329
|
+
if (validationWarnings.length > 0) {
|
|
330
|
+
console.warn('Journal entry validation warnings:');
|
|
331
|
+
validationWarnings.forEach(warning => console.warn(` - ${warning}`));
|
|
169
332
|
}
|
|
170
|
-
|
|
171
|
-
|
|
333
|
+
// Throw if any errors
|
|
334
|
+
if (validationErrors.length > 0) {
|
|
335
|
+
throw new Error('Journal entry validation failed:\n' +
|
|
336
|
+
validationErrors.map(e => ` - ${e}`).join('\n'));
|
|
172
337
|
}
|
|
173
338
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
const amount = Math.min(d.remaining, c.remaining);
|
|
236
|
-
if (amount > 0.0000001) { // small epsilon to avoid float artifacts
|
|
237
|
-
const transaction = await Transaction.createTransaction({
|
|
238
|
-
date: this.date,
|
|
239
|
-
debitAccount: d.line.accountNumber,
|
|
240
|
-
creditAccount: c.line.accountNumber,
|
|
241
|
-
amount: Math.round(amount * 100) / 100, // round to 2 decimals
|
|
242
|
-
description: `${this.description} - ${d.line.description || c.line.description || ''}`,
|
|
243
|
-
reference: this.reference,
|
|
244
|
-
skrType: this.skrType,
|
|
245
|
-
costCenter: d.line.costCenter || c.line.costCenter,
|
|
246
|
-
});
|
|
247
|
-
transactions.push(transaction);
|
|
248
|
-
// Reduce remaining amounts in working copies (not original lines)
|
|
249
|
-
d.remaining -= amount;
|
|
250
|
-
c.remaining -= amount;
|
|
339
|
+
async post() {
|
|
340
|
+
if (this.status === 'posted') {
|
|
341
|
+
throw new Error('Journal entry is already posted');
|
|
342
|
+
}
|
|
343
|
+
// Normalize any negative amounts to the correct side
|
|
344
|
+
this.sanitizeLines();
|
|
345
|
+
// Validate before posting
|
|
346
|
+
await this.validate();
|
|
347
|
+
// Create individual transactions for each debit-credit pair
|
|
348
|
+
const transactions = [];
|
|
349
|
+
// Simple posting logic: match debits with credits
|
|
350
|
+
// For complex entries, this could be enhanced with specific pairing logic
|
|
351
|
+
const debitLines = this.lines.filter((l) => l.debit);
|
|
352
|
+
const creditLines = this.lines.filter((l) => l.credit);
|
|
353
|
+
if (debitLines.length === 1 && creditLines.length === 1) {
|
|
354
|
+
// Simple entry: one debit, one credit
|
|
355
|
+
const transaction = await Transaction.createTransaction({
|
|
356
|
+
date: this.date,
|
|
357
|
+
debitAccount: debitLines[0].accountNumber,
|
|
358
|
+
creditAccount: creditLines[0].accountNumber,
|
|
359
|
+
amount: debitLines[0].debit || 0,
|
|
360
|
+
description: this.description,
|
|
361
|
+
reference: this.reference,
|
|
362
|
+
skrType: this.skrType,
|
|
363
|
+
costCenter: debitLines[0].costCenter,
|
|
364
|
+
});
|
|
365
|
+
transactions.push(transaction);
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
// Complex entry: multiple debits and/or credits
|
|
369
|
+
// Build working queues with remaining amounts (don't mutate original lines)
|
|
370
|
+
const debitQueue = debitLines.map(l => ({
|
|
371
|
+
line: l,
|
|
372
|
+
remaining: l.debit || 0
|
|
373
|
+
}));
|
|
374
|
+
const creditQueue = creditLines.map(l => ({
|
|
375
|
+
line: l,
|
|
376
|
+
remaining: l.credit || 0
|
|
377
|
+
}));
|
|
378
|
+
// Create transactions to balance the entry
|
|
379
|
+
for (const d of debitQueue) {
|
|
380
|
+
for (const c of creditQueue) {
|
|
381
|
+
const amount = Math.min(d.remaining, c.remaining);
|
|
382
|
+
if (amount > 0.0000001) { // small epsilon to avoid float artifacts
|
|
383
|
+
const transaction = await Transaction.createTransaction({
|
|
384
|
+
date: this.date,
|
|
385
|
+
debitAccount: d.line.accountNumber,
|
|
386
|
+
creditAccount: c.line.accountNumber,
|
|
387
|
+
amount: Math.round(amount * 100) / 100, // round to 2 decimals
|
|
388
|
+
description: `${this.description} - ${d.line.description || c.line.description || ''}`,
|
|
389
|
+
reference: this.reference,
|
|
390
|
+
skrType: this.skrType,
|
|
391
|
+
costCenter: d.line.costCenter || c.line.costCenter,
|
|
392
|
+
});
|
|
393
|
+
transactions.push(transaction);
|
|
394
|
+
// Reduce remaining amounts in working copies (not original lines)
|
|
395
|
+
d.remaining -= amount;
|
|
396
|
+
c.remaining -= amount;
|
|
397
|
+
}
|
|
398
|
+
if (d.remaining <= 0.0000001)
|
|
399
|
+
break;
|
|
251
400
|
}
|
|
252
|
-
if (d.remaining <= 0.0000001)
|
|
253
|
-
break;
|
|
254
401
|
}
|
|
255
402
|
}
|
|
403
|
+
// Store transaction IDs
|
|
404
|
+
this.transactionIds = transactions.map((t) => t.id);
|
|
405
|
+
// Update status
|
|
406
|
+
this.status = 'posted';
|
|
407
|
+
this.postedAt = new Date();
|
|
408
|
+
await this.save();
|
|
256
409
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
});
|
|
284
|
-
await reversalEntry.validate();
|
|
285
|
-
await reversalEntry.post();
|
|
286
|
-
// Update original entry status
|
|
287
|
-
this.status = 'reversed';
|
|
288
|
-
await this.save();
|
|
289
|
-
return reversalEntry;
|
|
290
|
-
}
|
|
291
|
-
async beforeSave() {
|
|
292
|
-
// Normalize any negative amounts to the correct side
|
|
293
|
-
this.sanitizeLines();
|
|
294
|
-
// Recalculate totals before saving
|
|
295
|
-
this.calculateTotals();
|
|
296
|
-
// Validate required fields
|
|
297
|
-
if (!this.date) {
|
|
298
|
-
throw new Error('Journal entry date is required');
|
|
299
|
-
}
|
|
300
|
-
if (!this.description) {
|
|
301
|
-
throw new Error('Journal entry description is required');
|
|
410
|
+
async reverse() {
|
|
411
|
+
if (this.status !== 'posted') {
|
|
412
|
+
throw new Error('Can only reverse posted journal entries');
|
|
413
|
+
}
|
|
414
|
+
// Create reversal entry with swapped debits and credits
|
|
415
|
+
const reversalLines = this.lines.map((line) => ({
|
|
416
|
+
accountNumber: line.accountNumber,
|
|
417
|
+
debit: line.credit, // Swap
|
|
418
|
+
credit: line.debit, // Swap
|
|
419
|
+
description: `Reversal: ${line.description || ''}`,
|
|
420
|
+
costCenter: line.costCenter,
|
|
421
|
+
postingKey: line.postingKey, // Keep same posting key for reversal
|
|
422
|
+
}));
|
|
423
|
+
const reversalEntry = new JournalEntry({
|
|
424
|
+
date: new Date(),
|
|
425
|
+
description: `Reversal of ${this.journalNumber}: ${this.description}`,
|
|
426
|
+
reference: `REV-${this.journalNumber}`,
|
|
427
|
+
lines: reversalLines,
|
|
428
|
+
skrType: this.skrType,
|
|
429
|
+
});
|
|
430
|
+
await reversalEntry.validate();
|
|
431
|
+
await reversalEntry.post();
|
|
432
|
+
// Update original entry status
|
|
433
|
+
this.status = 'reversed';
|
|
434
|
+
await this.save();
|
|
435
|
+
return reversalEntry;
|
|
302
436
|
}
|
|
303
|
-
|
|
304
|
-
|
|
437
|
+
async beforeSave() {
|
|
438
|
+
// Normalize any negative amounts to the correct side
|
|
439
|
+
this.sanitizeLines();
|
|
440
|
+
// Recalculate totals before saving
|
|
441
|
+
this.calculateTotals();
|
|
442
|
+
// Validate required fields
|
|
443
|
+
if (!this.date) {
|
|
444
|
+
throw new Error('Journal entry date is required');
|
|
445
|
+
}
|
|
446
|
+
if (!this.description) {
|
|
447
|
+
throw new Error('Journal entry description is required');
|
|
448
|
+
}
|
|
449
|
+
if (this.lines.length === 0) {
|
|
450
|
+
throw new Error('Journal entry must have at least one line');
|
|
451
|
+
}
|
|
305
452
|
}
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
unI(),
|
|
310
|
-
__metadata("design:type", String)
|
|
311
|
-
], JournalEntry.prototype, "id", void 0);
|
|
312
|
-
__decorate([
|
|
313
|
-
svDb(),
|
|
314
|
-
index(),
|
|
315
|
-
__metadata("design:type", String)
|
|
316
|
-
], JournalEntry.prototype, "journalNumber", void 0);
|
|
317
|
-
__decorate([
|
|
318
|
-
svDb(),
|
|
319
|
-
index(),
|
|
320
|
-
__metadata("design:type", Date)
|
|
321
|
-
], JournalEntry.prototype, "date", void 0);
|
|
322
|
-
__decorate([
|
|
323
|
-
svDb(),
|
|
324
|
-
searchable(),
|
|
325
|
-
__metadata("design:type", String)
|
|
326
|
-
], JournalEntry.prototype, "description", void 0);
|
|
327
|
-
__decorate([
|
|
328
|
-
svDb(),
|
|
329
|
-
index(),
|
|
330
|
-
__metadata("design:type", String)
|
|
331
|
-
], JournalEntry.prototype, "reference", void 0);
|
|
332
|
-
__decorate([
|
|
333
|
-
svDb(),
|
|
334
|
-
__metadata("design:type", Array)
|
|
335
|
-
], JournalEntry.prototype, "lines", void 0);
|
|
336
|
-
__decorate([
|
|
337
|
-
svDb(),
|
|
338
|
-
index(),
|
|
339
|
-
__metadata("design:type", String)
|
|
340
|
-
], JournalEntry.prototype, "skrType", void 0);
|
|
341
|
-
__decorate([
|
|
342
|
-
svDb(),
|
|
343
|
-
__metadata("design:type", Number)
|
|
344
|
-
], JournalEntry.prototype, "totalDebits", void 0);
|
|
345
|
-
__decorate([
|
|
346
|
-
svDb(),
|
|
347
|
-
__metadata("design:type", Number)
|
|
348
|
-
], JournalEntry.prototype, "totalCredits", void 0);
|
|
349
|
-
__decorate([
|
|
350
|
-
svDb(),
|
|
351
|
-
__metadata("design:type", Boolean)
|
|
352
|
-
], JournalEntry.prototype, "isBalanced", void 0);
|
|
353
|
-
__decorate([
|
|
354
|
-
svDb(),
|
|
355
|
-
index(),
|
|
356
|
-
__metadata("design:type", String)
|
|
357
|
-
], JournalEntry.prototype, "status", void 0);
|
|
358
|
-
__decorate([
|
|
359
|
-
svDb(),
|
|
360
|
-
__metadata("design:type", Array)
|
|
361
|
-
], JournalEntry.prototype, "transactionIds", void 0);
|
|
362
|
-
__decorate([
|
|
363
|
-
svDb(),
|
|
364
|
-
index(),
|
|
365
|
-
__metadata("design:type", String)
|
|
366
|
-
], JournalEntry.prototype, "period", void 0);
|
|
367
|
-
__decorate([
|
|
368
|
-
svDb(),
|
|
369
|
-
__metadata("design:type", Number)
|
|
370
|
-
], JournalEntry.prototype, "fiscalYear", void 0);
|
|
371
|
-
__decorate([
|
|
372
|
-
svDb(),
|
|
373
|
-
__metadata("design:type", Date)
|
|
374
|
-
], JournalEntry.prototype, "createdAt", void 0);
|
|
375
|
-
__decorate([
|
|
376
|
-
svDb(),
|
|
377
|
-
__metadata("design:type", Date)
|
|
378
|
-
], JournalEntry.prototype, "postedAt", void 0);
|
|
379
|
-
__decorate([
|
|
380
|
-
svDb(),
|
|
381
|
-
__metadata("design:type", String)
|
|
382
|
-
], JournalEntry.prototype, "createdBy", void 0);
|
|
383
|
-
JournalEntry = JournalEntry_1 = __decorate([
|
|
384
|
-
plugins.smartdata.Collection(() => getDbSync()),
|
|
385
|
-
__metadata("design:paramtypes", [Object])
|
|
386
|
-
], JournalEntry);
|
|
453
|
+
};
|
|
454
|
+
return JournalEntry = _classThis;
|
|
455
|
+
})();
|
|
387
456
|
export { JournalEntry };
|
|
388
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmNsYXNzZXMuam91cm5hbGVudHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc2tyLmNsYXNzZXMuam91cm5hbGVudHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLDZCQUE2QixFQUM3Qix3QkFBd0IsR0FDekIsTUFBTSxzQkFBc0IsQ0FBQztBQU85QixNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFHcEUsSUFBTSxZQUFZLG9CQUFsQixNQUFNLFlBQWEsU0FBUSxjQUEwQztJQTJEMUUsWUFBWSxJQUE2QjtRQUN2QyxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJ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
|
|
457
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmNsYXNzZXMuam91cm5hbGVudHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc2tyLmNsYXNzZXMuam91cm5hbGVudHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLDZCQUE2QixFQUM3Qix3QkFBd0IsR0FDekIsTUFBTSxzQkFBc0IsQ0FBQztBQW9COUIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFzRCxDQUFDO0FBQ2hHLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBaUIsQ0FBQztBQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQVcsQ0FBQztBQUMzQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQVUsQ0FBQztBQUN6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQVksQ0FBQztBQUM3QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQWlCLENBQUM7SUFHMUMsWUFBWTs0QkFEeEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDOzs7O3NCQUNJLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NEJBQXRCLFNBQVEsV0FBYzs7Ozs4QkFDN0MsR0FBRyxFQUFFO3lDQUdMLElBQUksRUFBRSxFQUNOLEtB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
|