@fin.cx/skr 1.3.1 → 2.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/.smartconfig.json +33 -6
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/core/core.accountpolicy.d.ts +67 -0
- package/dist_ts/core/core.accountpolicy.js +91 -0
- package/dist_ts/core/core.bukeys.d.ts +38 -0
- package/dist_ts/core/core.bukeys.js +117 -0
- package/dist_ts/core/core.datev.captions.d.ts +7 -0
- package/dist_ts/core/core.datev.captions.js +134 -0
- package/dist_ts/core/core.datev.d.ts +47 -0
- package/dist_ts/core/core.datev.js +129 -0
- package/dist_ts/core/core.hash.d.ts +27 -0
- package/dist_ts/core/core.hash.js +72 -0
- package/dist_ts/core/core.plugins.d.ts +3 -0
- package/dist_ts/core/core.plugins.js +9 -0
- package/dist_ts/core/core.recipes.d.ts +118 -0
- package/dist_ts/core/core.recipes.js +504 -0
- package/dist_ts/core/core.taxscenario.d.ts +27 -0
- package/dist_ts/core/core.taxscenario.js +85 -0
- package/dist_ts/core/core.types.d.ts +48 -0
- package/dist_ts/core/core.types.js +2 -0
- package/dist_ts/core/core.validate.d.ts +17 -0
- package/dist_ts/core/core.validate.js +89 -0
- package/dist_ts/core/index.d.ts +15 -0
- package/dist_ts/core/index.js +16 -0
- package/dist_ts/index.d.ts +15 -0
- package/dist_ts/index.js +10 -1
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +4 -2
- package/dist_ts/skr.api.d.ts +91 -22
- package/dist_ts/skr.api.js +357 -42
- package/dist_ts/skr.balances.d.ts +28 -0
- package/dist_ts/skr.balances.js +96 -0
- package/dist_ts/skr.classes.journalentry.d.ts +19 -3
- package/dist_ts/skr.classes.journalentry.js +67 -4
- package/dist_ts/skr.classes.reports.js +49 -102
- package/dist_ts/skr.database.d.ts +2 -0
- package/dist_ts/skr.database.js +1 -1
- package/dist_ts/skr.errors.d.ts +18 -0
- package/dist_ts/skr.errors.js +34 -0
- package/dist_ts/skr.export.js +4 -7
- package/dist_ts/skr.invoice.booking.js +14 -28
- package/dist_ts/skr.migrate.d.ts +20 -0
- package/dist_ts/skr.migrate.js +223 -0
- package/dist_ts/skr.period.d.ts +47 -0
- package/dist_ts/skr.period.js +95 -0
- package/dist_ts/skr.posting.d.ts +74 -0
- package/dist_ts/skr.posting.js +209 -0
- package/dist_ts/skr.security.d.ts +6 -9
- package/dist_ts/skr.security.js +16 -89
- package/dist_ts/skr.sequence.d.ts +32 -0
- package/dist_ts/skr.sequence.js +51 -0
- package/dist_ts/skr.txview.d.ts +46 -0
- package/dist_ts/skr.txview.js +235 -0
- package/dist_ts/skr.types.d.ts +35 -1
- package/dist_ts/skr.verify.d.ts +13 -0
- package/dist_ts/skr.verify.js +84 -0
- package/package.json +5 -4
- package/readme.hints.md +37 -0
- package/readme.md +69 -1
- package/readme.plan.md +180 -243
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/core/core.accountpolicy.ts +154 -0
- package/ts/core/core.bukeys.ts +146 -0
- package/ts/core/core.datev.captions.ts +133 -0
- package/ts/core/core.datev.ts +174 -0
- package/ts/core/core.hash.ts +76 -0
- package/ts/core/core.plugins.ts +9 -0
- package/ts/core/core.recipes.ts +659 -0
- package/ts/core/core.taxscenario.ts +156 -0
- package/ts/core/core.types.ts +74 -0
- package/ts/core/core.validate.ts +119 -0
- package/ts/core/index.ts +15 -0
- package/ts/index.ts +31 -0
- package/ts/plugins.ts +4 -0
- package/ts/skr.api.ts +432 -46
- package/ts/skr.balances.ts +127 -0
- package/ts/skr.classes.journalentry.ts +54 -5
- package/ts/skr.classes.reports.ts +54 -126
- package/ts/skr.database.ts +3 -0
- package/ts/skr.errors.ts +44 -0
- package/ts/skr.export.ts +3 -6
- package/ts/skr.invoice.booking.ts +22 -34
- package/ts/skr.migrate.ts +268 -0
- package/ts/skr.period.ts +139 -0
- package/ts/skr.posting.ts +273 -0
- package/ts/skr.security.ts +18 -93
- package/ts/skr.sequence.ts +89 -0
- package/ts/skr.txview.ts +268 -0
- package/ts/skr.types.ts +37 -1
- package/ts/skr.verify.ts +99 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { TSKRType } from './skr.types.js';
|
|
2
|
+
export interface IAccountBalanceCents {
|
|
3
|
+
accountNumber: string;
|
|
4
|
+
debitCents: number;
|
|
5
|
+
creditCents: number;
|
|
6
|
+
/** debit - credit; sign interpretation belongs to the account type */
|
|
7
|
+
balanceCents: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ITrialBalanceCents {
|
|
10
|
+
accounts: IAccountBalanceCents[];
|
|
11
|
+
totalDebitCents: number;
|
|
12
|
+
totalCreditCents: number;
|
|
13
|
+
isBalanced: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface IBalanceQueryOptions {
|
|
16
|
+
dateFrom?: Date;
|
|
17
|
+
dateTo?: Date;
|
|
18
|
+
/** include festgeschriebene entries (default true) */
|
|
19
|
+
includeFinalized?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Aggregated trial balance over all schemaVersion-2 entries.
|
|
23
|
+
*/
|
|
24
|
+
export declare function aggregateTrialBalance(skrType: TSKRType, options?: IBalanceQueryOptions): Promise<ITrialBalanceCents>;
|
|
25
|
+
/**
|
|
26
|
+
* Exact balance of one account.
|
|
27
|
+
*/
|
|
28
|
+
export declare function aggregateAccountBalance(accountNumber: string, skrType: TSKRType, options?: IBalanceQueryOptions): Promise<IAccountBalanceCents>;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Balance computation for the v2 ledger: always aggregated from the
|
|
3
|
+
* journal, never incrementally stored. Exact integer cents throughout.
|
|
4
|
+
*/
|
|
5
|
+
import { getDbSync } from './skr.database.js';
|
|
6
|
+
import { JOURNAL_ENTRY_COLLECTION } from './skr.period.js';
|
|
7
|
+
function entryMatch(skrType, options) {
|
|
8
|
+
const statuses = options?.includeFinalized === false ? ['posted'] : ['posted', 'finalized'];
|
|
9
|
+
const match = {
|
|
10
|
+
schemaVersion: 2,
|
|
11
|
+
skrType,
|
|
12
|
+
status: { $in: statuses },
|
|
13
|
+
};
|
|
14
|
+
if (options?.dateFrom || options?.dateTo) {
|
|
15
|
+
const range = {};
|
|
16
|
+
if (options.dateFrom)
|
|
17
|
+
range.$gte = options.dateFrom;
|
|
18
|
+
if (options.dateTo)
|
|
19
|
+
range.$lte = options.dateTo;
|
|
20
|
+
match.date = range;
|
|
21
|
+
}
|
|
22
|
+
return match;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Aggregated trial balance over all schemaVersion-2 entries.
|
|
26
|
+
*/
|
|
27
|
+
export async function aggregateTrialBalance(skrType, options) {
|
|
28
|
+
const collection = getDbSync().mongoDb.collection(JOURNAL_ENTRY_COLLECTION);
|
|
29
|
+
const rows = await collection
|
|
30
|
+
.aggregate([
|
|
31
|
+
{ $match: entryMatch(skrType, options) },
|
|
32
|
+
{ $unwind: '$lines' },
|
|
33
|
+
{
|
|
34
|
+
$group: {
|
|
35
|
+
_id: '$lines.accountNumber',
|
|
36
|
+
debitCents: {
|
|
37
|
+
$sum: { $cond: [{ $eq: ['$lines.side', 'debit'] }, '$lines.amountCents', 0] },
|
|
38
|
+
},
|
|
39
|
+
creditCents: {
|
|
40
|
+
$sum: { $cond: [{ $eq: ['$lines.side', 'credit'] }, '$lines.amountCents', 0] },
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
{ $sort: { _id: 1 } },
|
|
45
|
+
])
|
|
46
|
+
.toArray();
|
|
47
|
+
const accounts = rows.map((row) => ({
|
|
48
|
+
accountNumber: row._id,
|
|
49
|
+
debitCents: row.debitCents,
|
|
50
|
+
creditCents: row.creditCents,
|
|
51
|
+
balanceCents: row.debitCents - row.creditCents,
|
|
52
|
+
}));
|
|
53
|
+
const totalDebitCents = accounts.reduce((sum, account) => sum + account.debitCents, 0);
|
|
54
|
+
const totalCreditCents = accounts.reduce((sum, account) => sum + account.creditCents, 0);
|
|
55
|
+
return {
|
|
56
|
+
accounts,
|
|
57
|
+
totalDebitCents,
|
|
58
|
+
totalCreditCents,
|
|
59
|
+
isBalanced: totalDebitCents === totalCreditCents,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Exact balance of one account.
|
|
64
|
+
*/
|
|
65
|
+
export async function aggregateAccountBalance(accountNumber, skrType, options) {
|
|
66
|
+
const collection = getDbSync().mongoDb.collection(JOURNAL_ENTRY_COLLECTION);
|
|
67
|
+
const rows = await collection
|
|
68
|
+
.aggregate([
|
|
69
|
+
{ $match: { ...entryMatch(skrType, options), 'lines.accountNumber': accountNumber } },
|
|
70
|
+
{ $unwind: '$lines' },
|
|
71
|
+
{ $match: { 'lines.accountNumber': accountNumber } },
|
|
72
|
+
{
|
|
73
|
+
$group: {
|
|
74
|
+
_id: '$lines.accountNumber',
|
|
75
|
+
debitCents: {
|
|
76
|
+
$sum: { $cond: [{ $eq: ['$lines.side', 'debit'] }, '$lines.amountCents', 0] },
|
|
77
|
+
},
|
|
78
|
+
creditCents: {
|
|
79
|
+
$sum: { $cond: [{ $eq: ['$lines.side', 'credit'] }, '$lines.amountCents', 0] },
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
])
|
|
84
|
+
.toArray();
|
|
85
|
+
const row = rows[0];
|
|
86
|
+
if (!row) {
|
|
87
|
+
return { accountNumber, debitCents: 0, creditCents: 0, balanceCents: 0 };
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
accountNumber,
|
|
91
|
+
debitCents: row.debitCents,
|
|
92
|
+
creditCents: row.creditCents,
|
|
93
|
+
balanceCents: row.debitCents - row.creditCents,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmJhbGFuY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc2tyLmJhbGFuY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQXlCM0QsU0FBUyxVQUFVLENBQUMsT0FBaUIsRUFBRSxPQUE4QjtJQUNuRSxNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsZ0JBQWdCLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1RixNQUFNLEtBQUssR0FBNEI7UUFDckMsYUFBYSxFQUFFLENBQUM7UUFDaEIsT0FBTztRQUNQLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUU7S0FDMUIsQ0FBQztJQUNGLElBQUksT0FBTyxFQUFFLFFBQVEsSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQXlCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLE9BQU8sQ0FBQyxRQUFRO1lBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ3BELElBQUksT0FBTyxDQUFDLE1BQU07WUFBRSxLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDaEQsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxxQkFBcUIsQ0FDekMsT0FBaUIsRUFDakIsT0FBOEI7SUFFOUIsTUFBTSxVQUFVLEdBQUcsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLFVB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
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import type { TSKRType, IJournalEntry, IJournalEntryLine } from './skr.types.js';
|
|
2
2
|
declare abstract class SmartDataDbDocBase {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
creationStatus: 'db' | 'new' | 'mixed';
|
|
4
|
+
save(opts?: {
|
|
5
|
+
session?: any;
|
|
6
|
+
}): Promise<void>;
|
|
7
|
+
delete(opts?: {
|
|
8
|
+
session?: any;
|
|
9
|
+
}): Promise<void>;
|
|
5
10
|
static getInstance<T>(this: new (...args: any[]) => T, query: Record<string, any>): Promise<T | null>;
|
|
6
11
|
static getInstances<T>(this: new (...args: any[]) => T, query: Record<string, any>): Promise<T[]>;
|
|
7
12
|
}
|
|
@@ -17,7 +22,15 @@ export declare class JournalEntry extends SmartDataDbDoc {
|
|
|
17
22
|
totalDebits: number;
|
|
18
23
|
totalCredits: number;
|
|
19
24
|
isBalanced: boolean;
|
|
20
|
-
status: 'draft' | 'posted' | 'reversed';
|
|
25
|
+
status: 'draft' | 'posted' | 'reversed' | 'finalized';
|
|
26
|
+
schemaVersion?: number;
|
|
27
|
+
sequenceNumber?: number;
|
|
28
|
+
prevHash?: string;
|
|
29
|
+
entryHash?: string;
|
|
30
|
+
finalizedAt?: Date | null;
|
|
31
|
+
reversalOf?: string;
|
|
32
|
+
taxScenario?: string;
|
|
33
|
+
currency?: string;
|
|
21
34
|
transactionIds: string[];
|
|
22
35
|
period: string;
|
|
23
36
|
fiscalYear: number;
|
|
@@ -35,5 +48,8 @@ export declare class JournalEntry extends SmartDataDbDoc {
|
|
|
35
48
|
post(): Promise<void>;
|
|
36
49
|
reverse(): Promise<JournalEntry>;
|
|
37
50
|
beforeSave(): Promise<void>;
|
|
51
|
+
delete(opts?: {
|
|
52
|
+
session?: any;
|
|
53
|
+
}): Promise<void>;
|
|
38
54
|
}
|
|
39
55
|
export {};
|
|
@@ -37,6 +37,7 @@ import { getDbSync } from './skr.database.js';
|
|
|
37
37
|
import { Account } from './skr.classes.account.js';
|
|
38
38
|
import { Transaction } from './skr.classes.transaction.js';
|
|
39
39
|
import { validatePostingKey, validatePostingKeyConsistency, getPostingKeyDescription, } from './skr.postingkeys.js';
|
|
40
|
+
import { ImmutableEntryError } from './skr.errors.js';
|
|
40
41
|
const SmartDataDbDoc = plugins.smartdata.SmartDataDbDoc;
|
|
41
42
|
const Collection = plugins.smartdata.Collection;
|
|
42
43
|
const svDb = plugins.smartdata.svDb;
|
|
@@ -82,6 +83,30 @@ let JournalEntry = (() => {
|
|
|
82
83
|
let _status_decorators;
|
|
83
84
|
let _status_initializers = [];
|
|
84
85
|
let _status_extraInitializers = [];
|
|
86
|
+
let _schemaVersion_decorators;
|
|
87
|
+
let _schemaVersion_initializers = [];
|
|
88
|
+
let _schemaVersion_extraInitializers = [];
|
|
89
|
+
let _sequenceNumber_decorators;
|
|
90
|
+
let _sequenceNumber_initializers = [];
|
|
91
|
+
let _sequenceNumber_extraInitializers = [];
|
|
92
|
+
let _prevHash_decorators;
|
|
93
|
+
let _prevHash_initializers = [];
|
|
94
|
+
let _prevHash_extraInitializers = [];
|
|
95
|
+
let _entryHash_decorators;
|
|
96
|
+
let _entryHash_initializers = [];
|
|
97
|
+
let _entryHash_extraInitializers = [];
|
|
98
|
+
let _finalizedAt_decorators;
|
|
99
|
+
let _finalizedAt_initializers = [];
|
|
100
|
+
let _finalizedAt_extraInitializers = [];
|
|
101
|
+
let _reversalOf_decorators;
|
|
102
|
+
let _reversalOf_initializers = [];
|
|
103
|
+
let _reversalOf_extraInitializers = [];
|
|
104
|
+
let _taxScenario_decorators;
|
|
105
|
+
let _taxScenario_initializers = [];
|
|
106
|
+
let _taxScenario_extraInitializers = [];
|
|
107
|
+
let _currency_decorators;
|
|
108
|
+
let _currency_initializers = [];
|
|
109
|
+
let _currency_extraInitializers = [];
|
|
85
110
|
let _transactionIds_decorators;
|
|
86
111
|
let _transactionIds_initializers = [];
|
|
87
112
|
let _transactionIds_extraInitializers = [];
|
|
@@ -115,6 +140,14 @@ let JournalEntry = (() => {
|
|
|
115
140
|
_totalCredits_decorators = [svDb()];
|
|
116
141
|
_isBalanced_decorators = [svDb()];
|
|
117
142
|
_status_decorators = [svDb(), index()];
|
|
143
|
+
_schemaVersion_decorators = [svDb()];
|
|
144
|
+
_sequenceNumber_decorators = [svDb(), index()];
|
|
145
|
+
_prevHash_decorators = [svDb()];
|
|
146
|
+
_entryHash_decorators = [svDb()];
|
|
147
|
+
_finalizedAt_decorators = [svDb()];
|
|
148
|
+
_reversalOf_decorators = [svDb(), index()];
|
|
149
|
+
_taxScenario_decorators = [svDb()];
|
|
150
|
+
_currency_decorators = [svDb()];
|
|
118
151
|
_transactionIds_decorators = [svDb()];
|
|
119
152
|
_period_decorators = [svDb(), index()];
|
|
120
153
|
_fiscalYear_decorators = [svDb()];
|
|
@@ -132,6 +165,14 @@ let JournalEntry = (() => {
|
|
|
132
165
|
__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
166
|
__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
167
|
__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);
|
|
168
|
+
__esDecorate(null, null, _schemaVersion_decorators, { kind: "field", name: "schemaVersion", static: false, private: false, access: { has: obj => "schemaVersion" in obj, get: obj => obj.schemaVersion, set: (obj, value) => { obj.schemaVersion = value; } }, metadata: _metadata }, _schemaVersion_initializers, _schemaVersion_extraInitializers);
|
|
169
|
+
__esDecorate(null, null, _sequenceNumber_decorators, { kind: "field", name: "sequenceNumber", static: false, private: false, access: { has: obj => "sequenceNumber" in obj, get: obj => obj.sequenceNumber, set: (obj, value) => { obj.sequenceNumber = value; } }, metadata: _metadata }, _sequenceNumber_initializers, _sequenceNumber_extraInitializers);
|
|
170
|
+
__esDecorate(null, null, _prevHash_decorators, { kind: "field", name: "prevHash", static: false, private: false, access: { has: obj => "prevHash" in obj, get: obj => obj.prevHash, set: (obj, value) => { obj.prevHash = value; } }, metadata: _metadata }, _prevHash_initializers, _prevHash_extraInitializers);
|
|
171
|
+
__esDecorate(null, null, _entryHash_decorators, { kind: "field", name: "entryHash", static: false, private: false, access: { has: obj => "entryHash" in obj, get: obj => obj.entryHash, set: (obj, value) => { obj.entryHash = value; } }, metadata: _metadata }, _entryHash_initializers, _entryHash_extraInitializers);
|
|
172
|
+
__esDecorate(null, null, _finalizedAt_decorators, { kind: "field", name: "finalizedAt", static: false, private: false, access: { has: obj => "finalizedAt" in obj, get: obj => obj.finalizedAt, set: (obj, value) => { obj.finalizedAt = value; } }, metadata: _metadata }, _finalizedAt_initializers, _finalizedAt_extraInitializers);
|
|
173
|
+
__esDecorate(null, null, _reversalOf_decorators, { kind: "field", name: "reversalOf", static: false, private: false, access: { has: obj => "reversalOf" in obj, get: obj => obj.reversalOf, set: (obj, value) => { obj.reversalOf = value; } }, metadata: _metadata }, _reversalOf_initializers, _reversalOf_extraInitializers);
|
|
174
|
+
__esDecorate(null, null, _taxScenario_decorators, { kind: "field", name: "taxScenario", static: false, private: false, access: { has: obj => "taxScenario" in obj, get: obj => obj.taxScenario, set: (obj, value) => { obj.taxScenario = value; } }, metadata: _metadata }, _taxScenario_initializers, _taxScenario_extraInitializers);
|
|
175
|
+
__esDecorate(null, null, _currency_decorators, { kind: "field", name: "currency", static: false, private: false, access: { has: obj => "currency" in obj, get: obj => obj.currency, set: (obj, value) => { obj.currency = value; } }, metadata: _metadata }, _currency_initializers, _currency_extraInitializers);
|
|
135
176
|
__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
177
|
__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
178
|
__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);
|
|
@@ -154,7 +195,16 @@ let JournalEntry = (() => {
|
|
|
154
195
|
totalCredits = (__runInitializers(this, _totalDebits_extraInitializers), __runInitializers(this, _totalCredits_initializers, void 0));
|
|
155
196
|
isBalanced = (__runInitializers(this, _totalCredits_extraInitializers), __runInitializers(this, _isBalanced_initializers, void 0));
|
|
156
197
|
status = (__runInitializers(this, _isBalanced_extraInitializers), __runInitializers(this, _status_initializers, void 0));
|
|
157
|
-
|
|
198
|
+
// --- schemaVersion 2: GoBD hash chain + Festschreibung ------------------
|
|
199
|
+
schemaVersion = (__runInitializers(this, _status_extraInitializers), __runInitializers(this, _schemaVersion_initializers, void 0));
|
|
200
|
+
sequenceNumber = (__runInitializers(this, _schemaVersion_extraInitializers), __runInitializers(this, _sequenceNumber_initializers, void 0));
|
|
201
|
+
prevHash = (__runInitializers(this, _sequenceNumber_extraInitializers), __runInitializers(this, _prevHash_initializers, void 0));
|
|
202
|
+
entryHash = (__runInitializers(this, _prevHash_extraInitializers), __runInitializers(this, _entryHash_initializers, void 0));
|
|
203
|
+
finalizedAt = (__runInitializers(this, _entryHash_extraInitializers), __runInitializers(this, _finalizedAt_initializers, void 0));
|
|
204
|
+
reversalOf = (__runInitializers(this, _finalizedAt_extraInitializers), __runInitializers(this, _reversalOf_initializers, void 0));
|
|
205
|
+
taxScenario = (__runInitializers(this, _reversalOf_extraInitializers), __runInitializers(this, _taxScenario_initializers, void 0));
|
|
206
|
+
currency = (__runInitializers(this, _taxScenario_extraInitializers), __runInitializers(this, _currency_initializers, void 0));
|
|
207
|
+
transactionIds = (__runInitializers(this, _currency_extraInitializers), __runInitializers(this, _transactionIds_initializers, void 0));
|
|
158
208
|
period = (__runInitializers(this, _transactionIds_extraInitializers), __runInitializers(this, _period_initializers, void 0));
|
|
159
209
|
fiscalYear = (__runInitializers(this, _period_extraInitializers), __runInitializers(this, _fiscalYear_initializers, void 0));
|
|
160
210
|
createdAt = (__runInitializers(this, _fiscalYear_extraInitializers), __runInitializers(this, _createdAt_initializers, void 0));
|
|
@@ -317,8 +367,9 @@ let JournalEntry = (() => {
|
|
|
317
367
|
validationWarnings.push(...postingKeyValidation.warnings);
|
|
318
368
|
}
|
|
319
369
|
}
|
|
320
|
-
// Validate posting key consistency across all lines
|
|
321
|
-
|
|
370
|
+
// Validate posting key consistency across all lines (v1 numeric keys only;
|
|
371
|
+
// schemaVersion-2 lines carry string buKeys validated by the core)
|
|
372
|
+
const consistencyValidation = validatePostingKeyConsistency(this.lines.filter((line) => line.postingKey !== undefined));
|
|
322
373
|
if (!consistencyValidation.isValid) {
|
|
323
374
|
validationErrors.push(...consistencyValidation.errors);
|
|
324
375
|
}
|
|
@@ -435,6 +486,12 @@ let JournalEntry = (() => {
|
|
|
435
486
|
return reversalEntry;
|
|
436
487
|
}
|
|
437
488
|
async beforeSave() {
|
|
489
|
+
// GoBD immutability: once a hashed (schemaVersion 2) entry is persisted it
|
|
490
|
+
// must never change — corrections happen via Storno entries only.
|
|
491
|
+
// Festschreibung stamps bypass doc saves (raw updates outside the hash).
|
|
492
|
+
if (this.creationStatus === 'db' && this.entryHash) {
|
|
493
|
+
throw new ImmutableEntryError(this.id);
|
|
494
|
+
}
|
|
438
495
|
// Normalize any negative amounts to the correct side
|
|
439
496
|
this.sanitizeLines();
|
|
440
497
|
// Recalculate totals before saving
|
|
@@ -450,8 +507,14 @@ let JournalEntry = (() => {
|
|
|
450
507
|
throw new Error('Journal entry must have at least one line');
|
|
451
508
|
}
|
|
452
509
|
}
|
|
510
|
+
async delete(opts) {
|
|
511
|
+
if (this.entryHash) {
|
|
512
|
+
throw new ImmutableEntryError(this.id);
|
|
513
|
+
}
|
|
514
|
+
await super.delete(opts);
|
|
515
|
+
}
|
|
453
516
|
};
|
|
454
517
|
return JournalEntry = _classThis;
|
|
455
518
|
})();
|
|
456
519
|
export { JournalEntry };
|
|
457
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmNsYXNzZXMuam91cm5hbGVudHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc2tyLmNsYXNzZXMuam91cm5hbGVudHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLDZCQUE2QixFQUM3Qix3QkFBd0IsR0FDekIsTUFBTSxzQkFBc0IsQ0FBQztBQW9COUIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFzRCxDQUFDO0FBQ2hHLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBaUIsQ0FBQztBQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQVcsQ0FBQztBQUMzQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQVUsQ0FBQztBQUN6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQVksQ0FBQztBQUM3QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQWlCLENBQUM7SUFHMUMsWUFBWTs0QkFEeEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDOzs7O3NCQUNJLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NEJBQXRCLFNBQVEsV0FBYzs7Ozs4QkFDN0MsR0FBRyxFQUFFO3lDQUdMLElBQUksRUFBRSxFQUNOLEtB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
|
|
520
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmNsYXNzZXMuam91cm5hbGVudHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc2tyLmNsYXNzZXMuam91cm5hbGVudHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLDZCQUE2QixFQUM3Qix3QkFBd0IsR0FDekIsTUFBTSxzQkFBc0IsQ0FBQztBQU05QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWdCdEQsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFzRCxDQUFDO0FBQ2hHLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBaUIsQ0FBQztBQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQVcsQ0FBQztBQUMzQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQVUsQ0FBQztBQUN6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQVksQ0FBQztBQUM3QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQWlCLENBQUM7SUFHMUMsWUFBWTs0QkFEeEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDOzs7O3NCQUNJLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|