@fin.cx/skr 1.0.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/dist_ts/index.d.ts +10 -0
- package/dist_ts/index.js +11 -0
- package/dist_ts/plugins.d.ts +5 -0
- package/dist_ts/plugins.js +7 -0
- package/dist_ts/skr.api.d.ts +181 -0
- package/dist_ts/skr.api.js +402 -0
- package/dist_ts/skr.classes.account.d.ts +34 -0
- package/dist_ts/skr.classes.account.js +224 -0
- package/dist_ts/skr.classes.chartofaccounts.d.ts +99 -0
- package/dist_ts/skr.classes.chartofaccounts.js +377 -0
- package/dist_ts/skr.classes.journalentry.d.ts +33 -0
- package/dist_ts/skr.classes.journalentry.js +296 -0
- package/dist_ts/skr.classes.ledger.d.ts +61 -0
- package/dist_ts/skr.classes.ledger.js +363 -0
- package/dist_ts/skr.classes.reports.d.ts +55 -0
- package/dist_ts/skr.classes.reports.js +514 -0
- package/dist_ts/skr.classes.transaction.d.ts +37 -0
- package/dist_ts/skr.classes.transaction.js +263 -0
- package/dist_ts/skr.database.d.ts +5 -0
- package/dist_ts/skr.database.js +28 -0
- package/dist_ts/skr.types.d.ts +126 -0
- package/dist_ts/skr.types.js +2 -0
- package/dist_ts/skr03.data.d.ts +18 -0
- package/dist_ts/skr03.data.js +890 -0
- package/dist_ts/skr04.data.d.ts +18 -0
- package/dist_ts/skr04.data.js +912 -0
- package/npmextra.json +17 -0
- package/package.json +61 -0
- package/readme.hints.md +3 -0
- package/readme.md +409 -0
- package/readme.plan.md +243 -0
- package/ts/index.ts +10 -0
- package/ts/plugins.ts +7 -0
- package/ts/skr.api.ts +533 -0
- package/ts/skr.classes.account.ts +238 -0
- package/ts/skr.classes.chartofaccounts.ts +508 -0
- package/ts/skr.classes.journalentry.ts +318 -0
- package/ts/skr.classes.ledger.ts +528 -0
- package/ts/skr.classes.reports.ts +721 -0
- package/ts/skr.classes.transaction.ts +300 -0
- package/ts/skr.database.ts +39 -0
- package/ts/skr.types.ts +154 -0
- package/ts/skr03.data.ts +901 -0
- package/ts/skr04.data.ts +923 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var Transaction_1;
|
|
11
|
+
import * as plugins from './plugins.js';
|
|
12
|
+
import { getDbSync } from './skr.database.js';
|
|
13
|
+
import { Account } from './skr.classes.account.js';
|
|
14
|
+
const { SmartDataDbDoc, svDb, unI, index, searchable } = plugins.smartdata;
|
|
15
|
+
let Transaction = Transaction_1 = class Transaction extends SmartDataDbDoc {
|
|
16
|
+
constructor(data) {
|
|
17
|
+
super();
|
|
18
|
+
if (data) {
|
|
19
|
+
this.id = plugins.smartunique.shortId();
|
|
20
|
+
this.transactionNumber = this.generateTransactionNumber();
|
|
21
|
+
this.date = data.date || new Date();
|
|
22
|
+
this.debitAccount = data.debitAccount || '';
|
|
23
|
+
this.creditAccount = data.creditAccount || '';
|
|
24
|
+
this.amount = data.amount || 0;
|
|
25
|
+
this.description = data.description || '';
|
|
26
|
+
this.reference = data.reference || '';
|
|
27
|
+
this.skrType = data.skrType || 'SKR03';
|
|
28
|
+
this.vatAmount = data.vatAmount || 0;
|
|
29
|
+
this.costCenter = data.costCenter || '';
|
|
30
|
+
this.status = 'pending';
|
|
31
|
+
this.reversalOf = '';
|
|
32
|
+
this.reversedBy = '';
|
|
33
|
+
// Set period and fiscal year
|
|
34
|
+
const transDate = new Date(this.date);
|
|
35
|
+
this.period = `${transDate.getFullYear()}-${String(transDate.getMonth() + 1).padStart(2, '0')}`;
|
|
36
|
+
this.fiscalYear = transDate.getFullYear();
|
|
37
|
+
this.createdAt = new Date();
|
|
38
|
+
this.postedAt = null;
|
|
39
|
+
this.createdBy = 'system';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
generateTransactionNumber() {
|
|
43
|
+
const timestamp = Date.now();
|
|
44
|
+
const random = Math.floor(Math.random() * 1000);
|
|
45
|
+
return `TXN-${timestamp}-${random}`;
|
|
46
|
+
}
|
|
47
|
+
static async createTransaction(data) {
|
|
48
|
+
const transaction = new Transaction_1(data);
|
|
49
|
+
await transaction.validateAndPost();
|
|
50
|
+
return transaction;
|
|
51
|
+
}
|
|
52
|
+
static async getTransactionById(id) {
|
|
53
|
+
const transaction = await Transaction_1.getInstance({ id });
|
|
54
|
+
return transaction;
|
|
55
|
+
}
|
|
56
|
+
static async getTransactionsByAccount(accountNumber, skrType) {
|
|
57
|
+
const transactionsDebit = await Transaction_1.getInstances({
|
|
58
|
+
debitAccount: accountNumber,
|
|
59
|
+
skrType,
|
|
60
|
+
status: 'posted',
|
|
61
|
+
});
|
|
62
|
+
const transactionsCredit = await Transaction_1.getInstances({
|
|
63
|
+
creditAccount: accountNumber,
|
|
64
|
+
skrType,
|
|
65
|
+
status: 'posted',
|
|
66
|
+
});
|
|
67
|
+
const transactions = [...transactionsDebit, ...transactionsCredit];
|
|
68
|
+
return transactions;
|
|
69
|
+
}
|
|
70
|
+
static async getTransactionsByPeriod(period, skrType) {
|
|
71
|
+
const transactions = await Transaction_1.getInstances({
|
|
72
|
+
period,
|
|
73
|
+
skrType,
|
|
74
|
+
status: 'posted',
|
|
75
|
+
});
|
|
76
|
+
return transactions;
|
|
77
|
+
}
|
|
78
|
+
static async getTransactionsByDateRange(dateFrom, dateTo, skrType) {
|
|
79
|
+
const allTransactions = await Transaction_1.getInstances({
|
|
80
|
+
skrType,
|
|
81
|
+
status: 'posted',
|
|
82
|
+
});
|
|
83
|
+
const transactions = allTransactions.filter((t) => t.date >= dateFrom && t.date <= dateTo);
|
|
84
|
+
return transactions;
|
|
85
|
+
}
|
|
86
|
+
async validateAndPost() {
|
|
87
|
+
// Validate transaction
|
|
88
|
+
await this.validateTransaction();
|
|
89
|
+
// Update account balances
|
|
90
|
+
await this.updateAccountBalances();
|
|
91
|
+
// Mark as posted
|
|
92
|
+
this.status = 'posted';
|
|
93
|
+
this.postedAt = new Date();
|
|
94
|
+
await this.save();
|
|
95
|
+
}
|
|
96
|
+
async validateTransaction() {
|
|
97
|
+
// Check if accounts exist
|
|
98
|
+
const debitAccount = await Account.getAccountByNumber(this.debitAccount, this.skrType);
|
|
99
|
+
const creditAccount = await Account.getAccountByNumber(this.creditAccount, this.skrType);
|
|
100
|
+
if (!debitAccount) {
|
|
101
|
+
throw new Error(`Debit account ${this.debitAccount} not found for ${this.skrType}`);
|
|
102
|
+
}
|
|
103
|
+
if (!creditAccount) {
|
|
104
|
+
throw new Error(`Credit account ${this.creditAccount} not found for ${this.skrType}`);
|
|
105
|
+
}
|
|
106
|
+
// Check if accounts are active
|
|
107
|
+
if (!debitAccount.isActive) {
|
|
108
|
+
throw new Error(`Debit account ${this.debitAccount} is not active`);
|
|
109
|
+
}
|
|
110
|
+
if (!creditAccount.isActive) {
|
|
111
|
+
throw new Error(`Credit account ${this.creditAccount} is not active`);
|
|
112
|
+
}
|
|
113
|
+
// Validate amount
|
|
114
|
+
if (this.amount <= 0) {
|
|
115
|
+
throw new Error('Transaction amount must be greater than zero');
|
|
116
|
+
}
|
|
117
|
+
// Check for same account
|
|
118
|
+
if (this.debitAccount === this.creditAccount) {
|
|
119
|
+
throw new Error('Debit and credit accounts cannot be the same');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async updateAccountBalances() {
|
|
123
|
+
const debitAccount = await Account.getAccountByNumber(this.debitAccount, this.skrType);
|
|
124
|
+
const creditAccount = await Account.getAccountByNumber(this.creditAccount, this.skrType);
|
|
125
|
+
if (debitAccount) {
|
|
126
|
+
await debitAccount.updateBalance(this.amount, 0);
|
|
127
|
+
}
|
|
128
|
+
if (creditAccount) {
|
|
129
|
+
await creditAccount.updateBalance(0, this.amount);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async reverseTransaction() {
|
|
133
|
+
if (this.status !== 'posted') {
|
|
134
|
+
throw new Error('Can only reverse posted transactions');
|
|
135
|
+
}
|
|
136
|
+
if (this.reversedBy) {
|
|
137
|
+
throw new Error('Transaction has already been reversed');
|
|
138
|
+
}
|
|
139
|
+
// Create reversal transaction
|
|
140
|
+
const reversalData = {
|
|
141
|
+
date: new Date(),
|
|
142
|
+
debitAccount: this.creditAccount, // Swap accounts
|
|
143
|
+
creditAccount: this.debitAccount, // Swap accounts
|
|
144
|
+
amount: this.amount,
|
|
145
|
+
description: `Reversal of ${this.transactionNumber}: ${this.description}`,
|
|
146
|
+
reference: `REV-${this.transactionNumber}`,
|
|
147
|
+
skrType: this.skrType,
|
|
148
|
+
vatAmount: this.vatAmount,
|
|
149
|
+
costCenter: this.costCenter,
|
|
150
|
+
};
|
|
151
|
+
const reversalTransaction = new Transaction_1(reversalData);
|
|
152
|
+
reversalTransaction.reversalOf = this.id;
|
|
153
|
+
await reversalTransaction.validateAndPost();
|
|
154
|
+
// Update original transaction
|
|
155
|
+
this.reversedBy = reversalTransaction.id;
|
|
156
|
+
this.status = 'reversed';
|
|
157
|
+
await this.save();
|
|
158
|
+
return reversalTransaction;
|
|
159
|
+
}
|
|
160
|
+
async beforeSave() {
|
|
161
|
+
// Additional validation before saving
|
|
162
|
+
if (!this.debitAccount || !this.creditAccount) {
|
|
163
|
+
throw new Error('Both debit and credit accounts are required');
|
|
164
|
+
}
|
|
165
|
+
if (!this.date) {
|
|
166
|
+
throw new Error('Transaction date is required');
|
|
167
|
+
}
|
|
168
|
+
if (!this.description) {
|
|
169
|
+
throw new Error('Transaction description is required');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
__decorate([
|
|
174
|
+
unI(),
|
|
175
|
+
__metadata("design:type", String)
|
|
176
|
+
], Transaction.prototype, "id", void 0);
|
|
177
|
+
__decorate([
|
|
178
|
+
svDb(),
|
|
179
|
+
index(),
|
|
180
|
+
__metadata("design:type", String)
|
|
181
|
+
], Transaction.prototype, "transactionNumber", void 0);
|
|
182
|
+
__decorate([
|
|
183
|
+
svDb(),
|
|
184
|
+
index(),
|
|
185
|
+
__metadata("design:type", Date)
|
|
186
|
+
], Transaction.prototype, "date", void 0);
|
|
187
|
+
__decorate([
|
|
188
|
+
svDb(),
|
|
189
|
+
index(),
|
|
190
|
+
__metadata("design:type", String)
|
|
191
|
+
], Transaction.prototype, "debitAccount", void 0);
|
|
192
|
+
__decorate([
|
|
193
|
+
svDb(),
|
|
194
|
+
index(),
|
|
195
|
+
__metadata("design:type", String)
|
|
196
|
+
], Transaction.prototype, "creditAccount", void 0);
|
|
197
|
+
__decorate([
|
|
198
|
+
svDb(),
|
|
199
|
+
__metadata("design:type", Number)
|
|
200
|
+
], Transaction.prototype, "amount", void 0);
|
|
201
|
+
__decorate([
|
|
202
|
+
svDb(),
|
|
203
|
+
searchable(),
|
|
204
|
+
__metadata("design:type", String)
|
|
205
|
+
], Transaction.prototype, "description", void 0);
|
|
206
|
+
__decorate([
|
|
207
|
+
svDb(),
|
|
208
|
+
index(),
|
|
209
|
+
__metadata("design:type", String)
|
|
210
|
+
], Transaction.prototype, "reference", void 0);
|
|
211
|
+
__decorate([
|
|
212
|
+
svDb(),
|
|
213
|
+
index(),
|
|
214
|
+
__metadata("design:type", String)
|
|
215
|
+
], Transaction.prototype, "skrType", void 0);
|
|
216
|
+
__decorate([
|
|
217
|
+
svDb(),
|
|
218
|
+
__metadata("design:type", Number)
|
|
219
|
+
], Transaction.prototype, "vatAmount", void 0);
|
|
220
|
+
__decorate([
|
|
221
|
+
svDb(),
|
|
222
|
+
__metadata("design:type", String)
|
|
223
|
+
], Transaction.prototype, "costCenter", void 0);
|
|
224
|
+
__decorate([
|
|
225
|
+
svDb(),
|
|
226
|
+
index(),
|
|
227
|
+
__metadata("design:type", String)
|
|
228
|
+
], Transaction.prototype, "status", void 0);
|
|
229
|
+
__decorate([
|
|
230
|
+
svDb(),
|
|
231
|
+
__metadata("design:type", String)
|
|
232
|
+
], Transaction.prototype, "reversalOf", void 0);
|
|
233
|
+
__decorate([
|
|
234
|
+
svDb(),
|
|
235
|
+
__metadata("design:type", String)
|
|
236
|
+
], Transaction.prototype, "reversedBy", void 0);
|
|
237
|
+
__decorate([
|
|
238
|
+
svDb(),
|
|
239
|
+
index(),
|
|
240
|
+
__metadata("design:type", String)
|
|
241
|
+
], Transaction.prototype, "period", void 0);
|
|
242
|
+
__decorate([
|
|
243
|
+
svDb(),
|
|
244
|
+
__metadata("design:type", Number)
|
|
245
|
+
], Transaction.prototype, "fiscalYear", void 0);
|
|
246
|
+
__decorate([
|
|
247
|
+
svDb(),
|
|
248
|
+
__metadata("design:type", Date)
|
|
249
|
+
], Transaction.prototype, "createdAt", void 0);
|
|
250
|
+
__decorate([
|
|
251
|
+
svDb(),
|
|
252
|
+
__metadata("design:type", Date)
|
|
253
|
+
], Transaction.prototype, "postedAt", void 0);
|
|
254
|
+
__decorate([
|
|
255
|
+
svDb(),
|
|
256
|
+
__metadata("design:type", String)
|
|
257
|
+
], Transaction.prototype, "createdBy", void 0);
|
|
258
|
+
Transaction = Transaction_1 = __decorate([
|
|
259
|
+
plugins.smartdata.Collection(() => getDbSync()),
|
|
260
|
+
__metadata("design:paramtypes", [Object])
|
|
261
|
+
], Transaction);
|
|
262
|
+
export { Transaction };
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmNsYXNzZXMudHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9za3IuY2xhc3Nlcy50cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU9uRCxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFHcEUsSUFBTSxXQUFXLG1CQUFqQixNQUFNLFdBQVksU0FBUSxjQUF3QztJQW1FdkUsWUFBWSxJQUFnQztRQUMxQyxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJ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
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import type { IDatabaseConfig } from './skr.types.js';
|
|
3
|
+
export declare const getDb: (config?: IDatabaseConfig) => Promise<plugins.smartdata.SmartdataDb>;
|
|
4
|
+
export declare const getDbSync: () => plugins.smartdata.SmartdataDb;
|
|
5
|
+
export declare const closeDb: () => Promise<void>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
let dbInstance = null;
|
|
3
|
+
export const getDb = async (config) => {
|
|
4
|
+
if (!dbInstance) {
|
|
5
|
+
if (!config) {
|
|
6
|
+
throw new Error('Database configuration required for first initialization');
|
|
7
|
+
}
|
|
8
|
+
dbInstance = new plugins.smartdata.SmartdataDb({
|
|
9
|
+
mongoDbUrl: config.mongoDbUrl,
|
|
10
|
+
mongoDbName: config.dbName || 'skr_accounting',
|
|
11
|
+
});
|
|
12
|
+
await dbInstance.init();
|
|
13
|
+
}
|
|
14
|
+
return dbInstance;
|
|
15
|
+
};
|
|
16
|
+
export const getDbSync = () => {
|
|
17
|
+
if (!dbInstance) {
|
|
18
|
+
throw new Error('Database not initialized. Call getDb() first.');
|
|
19
|
+
}
|
|
20
|
+
return dbInstance;
|
|
21
|
+
};
|
|
22
|
+
export const closeDb = async () => {
|
|
23
|
+
if (dbInstance) {
|
|
24
|
+
await dbInstance.close();
|
|
25
|
+
dbInstance = null;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmRhdGFiYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc2tyLmRhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBR3hDLElBQUksVUFBVSxHQUF5QyxJQUFJLENBQUM7QUFFNUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLEtBQUssRUFDeEIsTUFBd0IsRUFDZ0IsRUFBRTtJQUMxQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FDYiwwREFBMEQsQ0FDM0QsQ0FBQztRQUNKLENBQUM7UUFFRCxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztZQUM3QyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksZ0JBQWdCO1NBQy9DLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsR0FBa0MsRUFBRTtJQUMzRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxJQUFtQixFQUFFO0lBQy9DLElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7QUFDSCxDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
export type TAccountType = 'asset' | 'liability' | 'equity' | 'revenue' | 'expense';
|
|
2
|
+
export type TSKRType = 'SKR03' | 'SKR04';
|
|
3
|
+
export type TTransactionStatus = 'pending' | 'posted' | 'reversed';
|
|
4
|
+
export type TReportType = 'trial_balance' | 'income_statement' | 'balance_sheet' | 'general_ledger' | 'cash_flow';
|
|
5
|
+
export interface IAccountData {
|
|
6
|
+
accountNumber: string;
|
|
7
|
+
accountName: string;
|
|
8
|
+
accountClass: number;
|
|
9
|
+
accountType: TAccountType;
|
|
10
|
+
skrType: TSKRType;
|
|
11
|
+
description?: string;
|
|
12
|
+
vatRate?: number;
|
|
13
|
+
isActive?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ITransactionData {
|
|
16
|
+
date: Date;
|
|
17
|
+
debitAccount: string;
|
|
18
|
+
creditAccount: string;
|
|
19
|
+
amount: number;
|
|
20
|
+
description: string;
|
|
21
|
+
reference?: string;
|
|
22
|
+
skrType: TSKRType;
|
|
23
|
+
vatAmount?: number;
|
|
24
|
+
costCenter?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface IJournalEntry {
|
|
27
|
+
date: Date;
|
|
28
|
+
description: string;
|
|
29
|
+
reference?: string;
|
|
30
|
+
lines: IJournalEntryLine[];
|
|
31
|
+
skrType: TSKRType;
|
|
32
|
+
}
|
|
33
|
+
export interface IJournalEntryLine {
|
|
34
|
+
accountNumber: string;
|
|
35
|
+
debit?: number;
|
|
36
|
+
credit?: number;
|
|
37
|
+
description?: string;
|
|
38
|
+
costCenter?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface ITrialBalanceEntry {
|
|
41
|
+
accountNumber: string;
|
|
42
|
+
accountName: string;
|
|
43
|
+
debitBalance: number;
|
|
44
|
+
creditBalance: number;
|
|
45
|
+
netBalance: number;
|
|
46
|
+
}
|
|
47
|
+
export interface ITrialBalanceReport {
|
|
48
|
+
date: Date;
|
|
49
|
+
skrType: TSKRType;
|
|
50
|
+
entries: ITrialBalanceEntry[];
|
|
51
|
+
totalDebits: number;
|
|
52
|
+
totalCredits: number;
|
|
53
|
+
isBalanced: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface IIncomeStatementEntry {
|
|
56
|
+
accountNumber: string;
|
|
57
|
+
accountName: string;
|
|
58
|
+
amount: number;
|
|
59
|
+
percentage?: number;
|
|
60
|
+
}
|
|
61
|
+
export interface IIncomeStatement {
|
|
62
|
+
date: Date;
|
|
63
|
+
skrType: TSKRType;
|
|
64
|
+
revenue: IIncomeStatementEntry[];
|
|
65
|
+
expenses: IIncomeStatementEntry[];
|
|
66
|
+
totalRevenue: number;
|
|
67
|
+
totalExpenses: number;
|
|
68
|
+
netIncome: number;
|
|
69
|
+
}
|
|
70
|
+
export interface IBalanceSheetEntry {
|
|
71
|
+
accountNumber: string;
|
|
72
|
+
accountName: string;
|
|
73
|
+
amount: number;
|
|
74
|
+
}
|
|
75
|
+
export interface IBalanceSheet {
|
|
76
|
+
date: Date;
|
|
77
|
+
skrType: TSKRType;
|
|
78
|
+
assets: {
|
|
79
|
+
current: IBalanceSheetEntry[];
|
|
80
|
+
fixed: IBalanceSheetEntry[];
|
|
81
|
+
totalAssets: number;
|
|
82
|
+
};
|
|
83
|
+
liabilities: {
|
|
84
|
+
current: IBalanceSheetEntry[];
|
|
85
|
+
longTerm: IBalanceSheetEntry[];
|
|
86
|
+
totalLiabilities: number;
|
|
87
|
+
};
|
|
88
|
+
equity: {
|
|
89
|
+
entries: IBalanceSheetEntry[];
|
|
90
|
+
totalEquity: number;
|
|
91
|
+
};
|
|
92
|
+
isBalanced: boolean;
|
|
93
|
+
}
|
|
94
|
+
export interface IAccountFilter {
|
|
95
|
+
skrType?: TSKRType;
|
|
96
|
+
accountClass?: number;
|
|
97
|
+
accountType?: TAccountType;
|
|
98
|
+
isActive?: boolean;
|
|
99
|
+
searchTerm?: string;
|
|
100
|
+
}
|
|
101
|
+
export interface ITransactionFilter {
|
|
102
|
+
skrType?: TSKRType;
|
|
103
|
+
dateFrom?: Date;
|
|
104
|
+
dateTo?: Date;
|
|
105
|
+
accountNumber?: string;
|
|
106
|
+
minAmount?: number;
|
|
107
|
+
maxAmount?: number;
|
|
108
|
+
searchTerm?: string;
|
|
109
|
+
}
|
|
110
|
+
export interface IDatabaseConfig {
|
|
111
|
+
mongoDbUrl: string;
|
|
112
|
+
dbName?: string;
|
|
113
|
+
}
|
|
114
|
+
export interface IReportParams {
|
|
115
|
+
dateFrom?: Date;
|
|
116
|
+
dateTo?: Date;
|
|
117
|
+
skrType: TSKRType;
|
|
118
|
+
format?: 'json' | 'csv' | 'datev';
|
|
119
|
+
}
|
|
120
|
+
export interface IAccountBalance {
|
|
121
|
+
accountNumber: string;
|
|
122
|
+
debitTotal: number;
|
|
123
|
+
creditTotal: number;
|
|
124
|
+
balance: number;
|
|
125
|
+
lastUpdated: Date;
|
|
126
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { IAccountData } from './skr.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* SKR03 - Process Structure Principle (Prozessgliederungsprinzip)
|
|
4
|
+
* Organized by business process flow
|
|
5
|
+
*/
|
|
6
|
+
export declare const SKR03_ACCOUNTS: IAccountData[];
|
|
7
|
+
export declare const SKR03_ACCOUNT_CLASSES: {
|
|
8
|
+
0: string;
|
|
9
|
+
1: string;
|
|
10
|
+
2: string;
|
|
11
|
+
3: string;
|
|
12
|
+
4: string;
|
|
13
|
+
5: string;
|
|
14
|
+
6: string;
|
|
15
|
+
7: string;
|
|
16
|
+
8: string;
|
|
17
|
+
9: string;
|
|
18
|
+
};
|