@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.
Files changed (44) hide show
  1. package/dist_ts/index.d.ts +10 -0
  2. package/dist_ts/index.js +11 -0
  3. package/dist_ts/plugins.d.ts +5 -0
  4. package/dist_ts/plugins.js +7 -0
  5. package/dist_ts/skr.api.d.ts +181 -0
  6. package/dist_ts/skr.api.js +402 -0
  7. package/dist_ts/skr.classes.account.d.ts +34 -0
  8. package/dist_ts/skr.classes.account.js +224 -0
  9. package/dist_ts/skr.classes.chartofaccounts.d.ts +99 -0
  10. package/dist_ts/skr.classes.chartofaccounts.js +377 -0
  11. package/dist_ts/skr.classes.journalentry.d.ts +33 -0
  12. package/dist_ts/skr.classes.journalentry.js +296 -0
  13. package/dist_ts/skr.classes.ledger.d.ts +61 -0
  14. package/dist_ts/skr.classes.ledger.js +363 -0
  15. package/dist_ts/skr.classes.reports.d.ts +55 -0
  16. package/dist_ts/skr.classes.reports.js +514 -0
  17. package/dist_ts/skr.classes.transaction.d.ts +37 -0
  18. package/dist_ts/skr.classes.transaction.js +263 -0
  19. package/dist_ts/skr.database.d.ts +5 -0
  20. package/dist_ts/skr.database.js +28 -0
  21. package/dist_ts/skr.types.d.ts +126 -0
  22. package/dist_ts/skr.types.js +2 -0
  23. package/dist_ts/skr03.data.d.ts +18 -0
  24. package/dist_ts/skr03.data.js +890 -0
  25. package/dist_ts/skr04.data.d.ts +18 -0
  26. package/dist_ts/skr04.data.js +912 -0
  27. package/npmextra.json +17 -0
  28. package/package.json +61 -0
  29. package/readme.hints.md +3 -0
  30. package/readme.md +409 -0
  31. package/readme.plan.md +243 -0
  32. package/ts/index.ts +10 -0
  33. package/ts/plugins.ts +7 -0
  34. package/ts/skr.api.ts +533 -0
  35. package/ts/skr.classes.account.ts +238 -0
  36. package/ts/skr.classes.chartofaccounts.ts +508 -0
  37. package/ts/skr.classes.journalentry.ts +318 -0
  38. package/ts/skr.classes.ledger.ts +528 -0
  39. package/ts/skr.classes.reports.ts +721 -0
  40. package/ts/skr.classes.transaction.ts +300 -0
  41. package/ts/skr.database.ts +39 -0
  42. package/ts/skr.types.ts +154 -0
  43. package/ts/skr03.data.ts +901 -0
  44. package/ts/skr04.data.ts +923 -0
@@ -0,0 +1,10 @@
1
+ export * from './skr.types.js';
2
+ export * from './skr.classes.account.js';
3
+ export * from './skr.classes.transaction.js';
4
+ export * from './skr.classes.journalentry.js';
5
+ export * from './skr.classes.chartofaccounts.js';
6
+ export * from './skr.classes.ledger.js';
7
+ export * from './skr.classes.reports.js';
8
+ export * from './skr.api.js';
9
+ export * from './skr03.data.js';
10
+ export * from './skr04.data.js';
@@ -0,0 +1,11 @@
1
+ export * from './skr.types.js';
2
+ export * from './skr.classes.account.js';
3
+ export * from './skr.classes.transaction.js';
4
+ export * from './skr.classes.journalentry.js';
5
+ export * from './skr.classes.chartofaccounts.js';
6
+ export * from './skr.classes.ledger.js';
7
+ export * from './skr.classes.reports.js';
8
+ export * from './skr.api.js';
9
+ export * from './skr03.data.js';
10
+ export * from './skr04.data.js';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxpQkFBaUIsQ0FBQyJ9
@@ -0,0 +1,5 @@
1
+ import * as smartdata from '@push.rocks/smartdata';
2
+ import * as smartunique from '@push.rocks/smartunique';
3
+ import * as smarttime from '@push.rocks/smarttime';
4
+ import * as smartlog from '@push.rocks/smartlog';
5
+ export { smartdata, smartunique, smarttime, smartlog };
@@ -0,0 +1,7 @@
1
+ // @push.rocks scope
2
+ import * as smartdata from '@push.rocks/smartdata';
3
+ import * as smartunique from '@push.rocks/smartunique';
4
+ import * as smarttime from '@push.rocks/smarttime';
5
+ import * as smartlog from '@push.rocks/smartlog';
6
+ export { smartdata, smartunique, smarttime, smartlog };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFFakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDIn0=
@@ -0,0 +1,181 @@
1
+ import { Account } from './skr.classes.account.js';
2
+ import { Transaction } from './skr.classes.transaction.js';
3
+ import { JournalEntry } from './skr.classes.journalentry.js';
4
+ import type { IDatabaseConfig, TSKRType, IAccountData, IAccountFilter, ITransactionData, ITransactionFilter, IJournalEntry, IReportParams, ITrialBalanceReport, IIncomeStatement, IBalanceSheet } from './skr.types.js';
5
+ /**
6
+ * Main API class for SKR accounting operations
7
+ */
8
+ export declare class SkrApi {
9
+ private config;
10
+ private chartOfAccounts;
11
+ private ledger;
12
+ private reports;
13
+ private logger;
14
+ private initialized;
15
+ private currentSKRType;
16
+ constructor(config: IDatabaseConfig);
17
+ /**
18
+ * Initialize the API with specified SKR type
19
+ */
20
+ initialize(skrType: TSKRType): Promise<void>;
21
+ /**
22
+ * Ensure API is initialized
23
+ */
24
+ private ensureInitialized;
25
+ /**
26
+ * Create a new account
27
+ */
28
+ createAccount(accountData: Partial<IAccountData>): Promise<Account>;
29
+ /**
30
+ * Get account by number
31
+ */
32
+ getAccount(accountNumber: string): Promise<Account | null>;
33
+ /**
34
+ * Update an account
35
+ */
36
+ updateAccount(accountNumber: string, updates: Partial<IAccountData>): Promise<Account>;
37
+ /**
38
+ * Delete an account
39
+ */
40
+ deleteAccount(accountNumber: string): Promise<void>;
41
+ /**
42
+ * List accounts with optional filter
43
+ */
44
+ listAccounts(filter?: IAccountFilter): Promise<Account[]>;
45
+ /**
46
+ * Search accounts by term
47
+ */
48
+ searchAccounts(searchTerm: string): Promise<Account[]>;
49
+ /**
50
+ * Get accounts by class
51
+ */
52
+ getAccountsByClass(accountClass: number): Promise<Account[]>;
53
+ /**
54
+ * Get accounts by type
55
+ */
56
+ getAccountsByType(accountType: IAccountData['accountType']): Promise<Account[]>;
57
+ /**
58
+ * Post a simple transaction
59
+ */
60
+ postTransaction(transactionData: ITransactionData): Promise<Transaction>;
61
+ /**
62
+ * Post a journal entry
63
+ */
64
+ postJournalEntry(journalData: IJournalEntry): Promise<JournalEntry>;
65
+ /**
66
+ * Get transaction by ID
67
+ */
68
+ getTransaction(transactionId: string): Promise<Transaction | null>;
69
+ /**
70
+ * List transactions with optional filter
71
+ */
72
+ listTransactions(filter?: ITransactionFilter): Promise<Transaction[]>;
73
+ /**
74
+ * Get transactions for specific account
75
+ */
76
+ getAccountTransactions(accountNumber: string): Promise<Transaction[]>;
77
+ /**
78
+ * Reverse a transaction
79
+ */
80
+ reverseTransaction(transactionId: string): Promise<Transaction>;
81
+ /**
82
+ * Reverse a journal entry
83
+ */
84
+ reverseJournalEntry(journalId: string): Promise<JournalEntry>;
85
+ /**
86
+ * Generate trial balance
87
+ */
88
+ generateTrialBalance(params?: IReportParams): Promise<ITrialBalanceReport>;
89
+ /**
90
+ * Generate income statement
91
+ */
92
+ generateIncomeStatement(params?: IReportParams): Promise<IIncomeStatement>;
93
+ /**
94
+ * Generate balance sheet
95
+ */
96
+ generateBalanceSheet(params?: IReportParams): Promise<IBalanceSheet>;
97
+ /**
98
+ * Generate general ledger
99
+ */
100
+ generateGeneralLedger(params?: IReportParams): Promise<any>;
101
+ /**
102
+ * Generate cash flow statement
103
+ */
104
+ generateCashFlowStatement(params?: IReportParams): Promise<any>;
105
+ /**
106
+ * Export report to CSV
107
+ */
108
+ exportReportToCSV(reportType: 'trial_balance' | 'income_statement' | 'balance_sheet', params?: IReportParams): Promise<string>;
109
+ /**
110
+ * Export to DATEV format
111
+ */
112
+ exportToDATEV(params?: IReportParams): Promise<string>;
113
+ /**
114
+ * Close accounting period
115
+ */
116
+ closePeriod(period: string, closingAccountNumber?: string): Promise<JournalEntry[]>;
117
+ /**
118
+ * Get account balance
119
+ */
120
+ getAccountBalance(accountNumber: string, asOfDate?: Date): Promise<any>;
121
+ /**
122
+ * Recalculate all account balances
123
+ */
124
+ recalculateBalances(): Promise<void>;
125
+ /**
126
+ * Import accounts from CSV
127
+ */
128
+ importAccountsFromCSV(csvContent: string): Promise<number>;
129
+ /**
130
+ * Export accounts to CSV
131
+ */
132
+ exportAccountsToCSV(): Promise<string>;
133
+ /**
134
+ * Get current SKR type
135
+ */
136
+ getSKRType(): TSKRType | null;
137
+ /**
138
+ * Get account class description
139
+ */
140
+ getAccountClassDescription(accountClass: number): string;
141
+ /**
142
+ * Validate double-entry rules
143
+ */
144
+ validateDoubleEntry(debitAmount: number, creditAmount: number): boolean;
145
+ /**
146
+ * Get unbalanced transactions (for audit)
147
+ */
148
+ getUnbalancedTransactions(): Promise<Transaction[]>;
149
+ /**
150
+ * Close the API and database connection
151
+ */
152
+ close(): Promise<void>;
153
+ /**
154
+ * Post multiple transactions
155
+ */
156
+ postBatchTransactions(transactions: ITransactionData[]): Promise<Transaction[]>;
157
+ /**
158
+ * Create multiple accounts
159
+ */
160
+ createBatchAccounts(accounts: IAccountData[]): Promise<Account[]>;
161
+ /**
162
+ * Get paginated accounts
163
+ */
164
+ getAccountsPaginated(page?: number, pageSize?: number, filter?: IAccountFilter): Promise<{
165
+ data: Account[];
166
+ total: number;
167
+ page: number;
168
+ pageSize: number;
169
+ totalPages: number;
170
+ }>;
171
+ /**
172
+ * Get paginated transactions
173
+ */
174
+ getTransactionsPaginated(page?: number, pageSize?: number, filter?: ITransactionFilter): Promise<{
175
+ data: Transaction[];
176
+ total: number;
177
+ page: number;
178
+ pageSize: number;
179
+ totalPages: number;
180
+ }>;
181
+ }
@@ -0,0 +1,402 @@
1
+ import * as plugins from './plugins.js';
2
+ import { ChartOfAccounts } from './skr.classes.chartofaccounts.js';
3
+ import { Ledger } from './skr.classes.ledger.js';
4
+ import { Reports } from './skr.classes.reports.js';
5
+ import { Account } from './skr.classes.account.js';
6
+ import { Transaction } from './skr.classes.transaction.js';
7
+ import { JournalEntry } from './skr.classes.journalentry.js';
8
+ /**
9
+ * Main API class for SKR accounting operations
10
+ */
11
+ export class SkrApi {
12
+ constructor(config) {
13
+ this.config = config;
14
+ this.ledger = null;
15
+ this.reports = null;
16
+ this.initialized = false;
17
+ this.currentSKRType = null;
18
+ this.chartOfAccounts = new ChartOfAccounts(config);
19
+ this.logger = new plugins.smartlog.Smartlog({
20
+ logContext: {
21
+ company: 'fin.cx',
22
+ companyunit: 'skr',
23
+ containerName: 'SkrApi',
24
+ environment: 'local',
25
+ runtime: 'node',
26
+ zone: 'local',
27
+ },
28
+ });
29
+ }
30
+ /**
31
+ * Initialize the API with specified SKR type
32
+ */
33
+ async initialize(skrType) {
34
+ this.logger.log('info', `Initializing SKR API with ${skrType}`);
35
+ // Initialize chart of accounts
36
+ if (skrType === 'SKR03') {
37
+ await this.chartOfAccounts.initializeSKR03();
38
+ }
39
+ else if (skrType === 'SKR04') {
40
+ await this.chartOfAccounts.initializeSKR04();
41
+ }
42
+ else {
43
+ throw new Error(`Invalid SKR type: ${skrType}`);
44
+ }
45
+ this.currentSKRType = skrType;
46
+ this.ledger = new Ledger(skrType);
47
+ this.reports = new Reports(skrType);
48
+ this.initialized = true;
49
+ this.logger.log('info', 'SKR API initialized successfully');
50
+ }
51
+ /**
52
+ * Ensure API is initialized
53
+ */
54
+ ensureInitialized() {
55
+ if (!this.initialized || !this.currentSKRType) {
56
+ throw new Error('API not initialized. Call initialize() first.');
57
+ }
58
+ }
59
+ // ========== Account Management ==========
60
+ /**
61
+ * Create a new account
62
+ */
63
+ async createAccount(accountData) {
64
+ this.ensureInitialized();
65
+ return await this.chartOfAccounts.createCustomAccount(accountData);
66
+ }
67
+ /**
68
+ * Get account by number
69
+ */
70
+ async getAccount(accountNumber) {
71
+ this.ensureInitialized();
72
+ return await this.chartOfAccounts.getAccountByNumber(accountNumber);
73
+ }
74
+ /**
75
+ * Update an account
76
+ */
77
+ async updateAccount(accountNumber, updates) {
78
+ this.ensureInitialized();
79
+ return await this.chartOfAccounts.updateAccount(accountNumber, updates);
80
+ }
81
+ /**
82
+ * Delete an account
83
+ */
84
+ async deleteAccount(accountNumber) {
85
+ this.ensureInitialized();
86
+ await this.chartOfAccounts.deleteAccount(accountNumber);
87
+ }
88
+ /**
89
+ * List accounts with optional filter
90
+ */
91
+ async listAccounts(filter) {
92
+ this.ensureInitialized();
93
+ return await this.chartOfAccounts.getAllAccounts(filter);
94
+ }
95
+ /**
96
+ * Search accounts by term
97
+ */
98
+ async searchAccounts(searchTerm) {
99
+ this.ensureInitialized();
100
+ return await this.chartOfAccounts.searchAccounts(searchTerm);
101
+ }
102
+ /**
103
+ * Get accounts by class
104
+ */
105
+ async getAccountsByClass(accountClass) {
106
+ this.ensureInitialized();
107
+ return await this.chartOfAccounts.getAccountsByClass(accountClass);
108
+ }
109
+ /**
110
+ * Get accounts by type
111
+ */
112
+ async getAccountsByType(accountType) {
113
+ this.ensureInitialized();
114
+ return await this.chartOfAccounts.getAccountsByType(accountType);
115
+ }
116
+ // ========== Transaction Management ==========
117
+ /**
118
+ * Post a simple transaction
119
+ */
120
+ async postTransaction(transactionData) {
121
+ this.ensureInitialized();
122
+ return await this.chartOfAccounts.postTransaction(transactionData);
123
+ }
124
+ /**
125
+ * Post a journal entry
126
+ */
127
+ async postJournalEntry(journalData) {
128
+ this.ensureInitialized();
129
+ return await this.chartOfAccounts.postJournalEntry(journalData);
130
+ }
131
+ /**
132
+ * Get transaction by ID
133
+ */
134
+ async getTransaction(transactionId) {
135
+ this.ensureInitialized();
136
+ return await Transaction.getTransactionById(transactionId);
137
+ }
138
+ /**
139
+ * List transactions with optional filter
140
+ */
141
+ async listTransactions(filter) {
142
+ this.ensureInitialized();
143
+ return await this.chartOfAccounts.getTransactions(filter);
144
+ }
145
+ /**
146
+ * Get transactions for specific account
147
+ */
148
+ async getAccountTransactions(accountNumber) {
149
+ this.ensureInitialized();
150
+ return await this.chartOfAccounts.getAccountTransactions(accountNumber);
151
+ }
152
+ /**
153
+ * Reverse a transaction
154
+ */
155
+ async reverseTransaction(transactionId) {
156
+ this.ensureInitialized();
157
+ return await this.chartOfAccounts.reverseTransaction(transactionId);
158
+ }
159
+ /**
160
+ * Reverse a journal entry
161
+ */
162
+ async reverseJournalEntry(journalId) {
163
+ this.ensureInitialized();
164
+ if (!this.ledger)
165
+ throw new Error('Ledger not initialized');
166
+ return await this.ledger.reverseJournalEntry(journalId);
167
+ }
168
+ // ========== Reporting ==========
169
+ /**
170
+ * Generate trial balance
171
+ */
172
+ async generateTrialBalance(params) {
173
+ this.ensureInitialized();
174
+ if (!this.reports)
175
+ throw new Error('Reports not initialized');
176
+ return await this.reports.getTrialBalance(params);
177
+ }
178
+ /**
179
+ * Generate income statement
180
+ */
181
+ async generateIncomeStatement(params) {
182
+ this.ensureInitialized();
183
+ if (!this.reports)
184
+ throw new Error('Reports not initialized');
185
+ return await this.reports.getIncomeStatement(params);
186
+ }
187
+ /**
188
+ * Generate balance sheet
189
+ */
190
+ async generateBalanceSheet(params) {
191
+ this.ensureInitialized();
192
+ if (!this.reports)
193
+ throw new Error('Reports not initialized');
194
+ return await this.reports.getBalanceSheet(params);
195
+ }
196
+ /**
197
+ * Generate general ledger
198
+ */
199
+ async generateGeneralLedger(params) {
200
+ this.ensureInitialized();
201
+ if (!this.reports)
202
+ throw new Error('Reports not initialized');
203
+ return await this.reports.getGeneralLedger(params);
204
+ }
205
+ /**
206
+ * Generate cash flow statement
207
+ */
208
+ async generateCashFlowStatement(params) {
209
+ this.ensureInitialized();
210
+ if (!this.reports)
211
+ throw new Error('Reports not initialized');
212
+ return await this.reports.getCashFlowStatement(params);
213
+ }
214
+ /**
215
+ * Export report to CSV
216
+ */
217
+ async exportReportToCSV(reportType, params) {
218
+ this.ensureInitialized();
219
+ if (!this.reports)
220
+ throw new Error('Reports not initialized');
221
+ return await this.reports.exportToCSV(reportType, params);
222
+ }
223
+ /**
224
+ * Export to DATEV format
225
+ */
226
+ async exportToDATEV(params) {
227
+ this.ensureInitialized();
228
+ if (!this.reports)
229
+ throw new Error('Reports not initialized');
230
+ return await this.reports.exportToDATEV(params);
231
+ }
232
+ // ========== Period Management ==========
233
+ /**
234
+ * Close accounting period
235
+ */
236
+ async closePeriod(period, closingAccountNumber) {
237
+ this.ensureInitialized();
238
+ if (!this.ledger)
239
+ throw new Error('Ledger not initialized');
240
+ return await this.ledger.closeAccountingPeriod(period, closingAccountNumber);
241
+ }
242
+ /**
243
+ * Get account balance
244
+ */
245
+ async getAccountBalance(accountNumber, asOfDate) {
246
+ this.ensureInitialized();
247
+ if (!this.ledger)
248
+ throw new Error('Ledger not initialized');
249
+ return await this.ledger.getAccountBalance(accountNumber, asOfDate);
250
+ }
251
+ /**
252
+ * Recalculate all account balances
253
+ */
254
+ async recalculateBalances() {
255
+ this.ensureInitialized();
256
+ if (!this.ledger)
257
+ throw new Error('Ledger not initialized');
258
+ await this.ledger.recalculateAllBalances();
259
+ }
260
+ // ========== Import/Export ==========
261
+ /**
262
+ * Import accounts from CSV
263
+ */
264
+ async importAccountsFromCSV(csvContent) {
265
+ this.ensureInitialized();
266
+ return await this.chartOfAccounts.importAccountsFromCSV(csvContent);
267
+ }
268
+ /**
269
+ * Export accounts to CSV
270
+ */
271
+ async exportAccountsToCSV() {
272
+ this.ensureInitialized();
273
+ return await this.chartOfAccounts.exportAccountsToCSV();
274
+ }
275
+ // ========== Utility Methods ==========
276
+ /**
277
+ * Get current SKR type
278
+ */
279
+ getSKRType() {
280
+ return this.currentSKRType;
281
+ }
282
+ /**
283
+ * Get account class description
284
+ */
285
+ getAccountClassDescription(accountClass) {
286
+ this.ensureInitialized();
287
+ return this.chartOfAccounts.getAccountClassDescription(accountClass);
288
+ }
289
+ /**
290
+ * Validate double-entry rules
291
+ */
292
+ validateDoubleEntry(debitAmount, creditAmount) {
293
+ if (!this.ledger)
294
+ throw new Error('Ledger not initialized');
295
+ return this.ledger.validateDoubleEntry(debitAmount, creditAmount);
296
+ }
297
+ /**
298
+ * Get unbalanced transactions (for audit)
299
+ */
300
+ async getUnbalancedTransactions() {
301
+ this.ensureInitialized();
302
+ if (!this.ledger)
303
+ throw new Error('Ledger not initialized');
304
+ return await this.ledger.getUnbalancedTransactions();
305
+ }
306
+ /**
307
+ * Close the API and database connection
308
+ */
309
+ async close() {
310
+ await this.chartOfAccounts.close();
311
+ this.initialized = false;
312
+ this.currentSKRType = null;
313
+ this.ledger = null;
314
+ this.reports = null;
315
+ this.logger.log('info', 'SKR API closed');
316
+ }
317
+ // ========== Batch Operations ==========
318
+ /**
319
+ * Post multiple transactions
320
+ */
321
+ async postBatchTransactions(transactions) {
322
+ this.ensureInitialized();
323
+ const results = [];
324
+ const errors = [];
325
+ for (let i = 0; i < transactions.length; i++) {
326
+ try {
327
+ const transaction = await this.postTransaction(transactions[i]);
328
+ results.push(transaction);
329
+ }
330
+ catch (error) {
331
+ errors.push({ index: i, error: error.message });
332
+ }
333
+ }
334
+ if (errors.length > 0) {
335
+ this.logger.log('warn', `Batch transaction posting completed with ${errors.length} errors`);
336
+ throw new Error(`Batch posting failed for ${errors.length} transactions: ${JSON.stringify(errors)}`);
337
+ }
338
+ return results;
339
+ }
340
+ /**
341
+ * Create multiple accounts
342
+ */
343
+ async createBatchAccounts(accounts) {
344
+ this.ensureInitialized();
345
+ const results = [];
346
+ const errors = [];
347
+ for (let i = 0; i < accounts.length; i++) {
348
+ try {
349
+ const account = await this.createAccount(accounts[i]);
350
+ results.push(account);
351
+ }
352
+ catch (error) {
353
+ errors.push({ index: i, error: error.message });
354
+ }
355
+ }
356
+ if (errors.length > 0) {
357
+ this.logger.log('warn', `Batch account creation completed with ${errors.length} errors`);
358
+ throw new Error(`Batch creation failed for ${errors.length} accounts: ${JSON.stringify(errors)}`);
359
+ }
360
+ return results;
361
+ }
362
+ // ========== Pagination Support ==========
363
+ /**
364
+ * Get paginated accounts
365
+ */
366
+ async getAccountsPaginated(page = 1, pageSize = 50, filter) {
367
+ this.ensureInitialized();
368
+ const allAccounts = await this.listAccounts(filter);
369
+ const total = allAccounts.length;
370
+ const totalPages = Math.ceil(total / pageSize);
371
+ const start = (page - 1) * pageSize;
372
+ const end = start + pageSize;
373
+ const data = allAccounts.slice(start, end);
374
+ return {
375
+ data,
376
+ total,
377
+ page,
378
+ pageSize,
379
+ totalPages,
380
+ };
381
+ }
382
+ /**
383
+ * Get paginated transactions
384
+ */
385
+ async getTransactionsPaginated(page = 1, pageSize = 50, filter) {
386
+ this.ensureInitialized();
387
+ const allTransactions = await this.listTransactions(filter);
388
+ const total = allTransactions.length;
389
+ const totalPages = Math.ceil(total / pageSize);
390
+ const start = (page - 1) * pageSize;
391
+ const end = start + pageSize;
392
+ const data = allTransactions.slice(start, end);
393
+ return {
394
+ data,
395
+ total,
396
+ page,
397
+ pageSize,
398
+ totalPages,
399
+ };
400
+ }
401
+ }
402
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Nrci5hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFlN0Q7O0dBRUc7QUFDSCxNQUFNLE9BQU8sTUFBTTtJQVFqQixZQUFvQixNQUF1QjtRQUF2QixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQU5uQyxXQUFNLEdBQWtCLElBQUksQ0FBQztRQUM3QixZQUFPLEdBQW1CLElBQUksQ0FBQztRQUUvQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixtQkFBYyxHQUFvQixJQUFJLENBQUM7UUFHN0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDMUMsVUFBVSxFQUFFO2dCQUNWLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixXQUFXLEVBQUUsS0FBSztnQkFDbEIsYUFBYSxFQUFFLFFBQVE7Z0JBQ3ZCLFdBQVcsRUFBRSxPQUFPO2dCQUNwQixPQUFPLEVBQUUsTUFBTTtnQkFDZixJQUFJLEVBQUUsT0FBTzthQUNkO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFD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
@@ -0,0 +1,34 @@
1
+ import * as plugins from './plugins.js';
2
+ import type { TAccountType, TSKRType, IAccountData } from './skr.types.js';
3
+ declare const SmartDataDbDoc: typeof plugins.smartdata.SmartDataDbDoc;
4
+ export declare class Account extends SmartDataDbDoc<Account, Account> {
5
+ id: string;
6
+ accountNumber: string;
7
+ accountName: string;
8
+ accountClass: number;
9
+ accountGroup: number;
10
+ accountSubgroup: number;
11
+ accountType: TAccountType;
12
+ skrType: TSKRType;
13
+ description: string;
14
+ vatRate: number;
15
+ balance: number;
16
+ debitTotal: number;
17
+ creditTotal: number;
18
+ isActive: boolean;
19
+ isSystemAccount: boolean;
20
+ createdAt: Date;
21
+ updatedAt: Date;
22
+ constructor(data?: Partial<IAccountData>);
23
+ static createAccount(data: IAccountData): Promise<Account>;
24
+ static getAccountByNumber(accountNumber: string, skrType: TSKRType): Promise<Account | null>;
25
+ static getAccountsByClass(accountClass: number, skrType: TSKRType): Promise<Account[]>;
26
+ static getAccountsByType(accountType: TAccountType, skrType: TSKRType): Promise<Account[]>;
27
+ static searchAccounts(searchTerm: string, skrType?: TSKRType): Promise<Account[]>;
28
+ updateBalance(debitAmount?: number, creditAmount?: number): Promise<void>;
29
+ deactivate(): Promise<void>;
30
+ activate(): Promise<void>;
31
+ getNormalBalance(): 'debit' | 'credit';
32
+ beforeSave(): Promise<void>;
33
+ }
34
+ export {};