@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,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';
|
package/dist_ts/index.js
ADDED
|
@@ -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 {};
|