@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.
Files changed (90) hide show
  1. package/.smartconfig.json +33 -6
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/core/core.accountpolicy.d.ts +67 -0
  4. package/dist_ts/core/core.accountpolicy.js +91 -0
  5. package/dist_ts/core/core.bukeys.d.ts +38 -0
  6. package/dist_ts/core/core.bukeys.js +117 -0
  7. package/dist_ts/core/core.datev.captions.d.ts +7 -0
  8. package/dist_ts/core/core.datev.captions.js +134 -0
  9. package/dist_ts/core/core.datev.d.ts +47 -0
  10. package/dist_ts/core/core.datev.js +129 -0
  11. package/dist_ts/core/core.hash.d.ts +27 -0
  12. package/dist_ts/core/core.hash.js +72 -0
  13. package/dist_ts/core/core.plugins.d.ts +3 -0
  14. package/dist_ts/core/core.plugins.js +9 -0
  15. package/dist_ts/core/core.recipes.d.ts +118 -0
  16. package/dist_ts/core/core.recipes.js +504 -0
  17. package/dist_ts/core/core.taxscenario.d.ts +27 -0
  18. package/dist_ts/core/core.taxscenario.js +85 -0
  19. package/dist_ts/core/core.types.d.ts +48 -0
  20. package/dist_ts/core/core.types.js +2 -0
  21. package/dist_ts/core/core.validate.d.ts +17 -0
  22. package/dist_ts/core/core.validate.js +89 -0
  23. package/dist_ts/core/index.d.ts +15 -0
  24. package/dist_ts/core/index.js +16 -0
  25. package/dist_ts/index.d.ts +15 -0
  26. package/dist_ts/index.js +10 -1
  27. package/dist_ts/plugins.d.ts +2 -1
  28. package/dist_ts/plugins.js +4 -2
  29. package/dist_ts/skr.api.d.ts +91 -22
  30. package/dist_ts/skr.api.js +357 -42
  31. package/dist_ts/skr.balances.d.ts +28 -0
  32. package/dist_ts/skr.balances.js +96 -0
  33. package/dist_ts/skr.classes.journalentry.d.ts +19 -3
  34. package/dist_ts/skr.classes.journalentry.js +67 -4
  35. package/dist_ts/skr.classes.reports.js +49 -102
  36. package/dist_ts/skr.database.d.ts +2 -0
  37. package/dist_ts/skr.database.js +1 -1
  38. package/dist_ts/skr.errors.d.ts +18 -0
  39. package/dist_ts/skr.errors.js +34 -0
  40. package/dist_ts/skr.export.js +4 -7
  41. package/dist_ts/skr.invoice.booking.js +14 -28
  42. package/dist_ts/skr.migrate.d.ts +20 -0
  43. package/dist_ts/skr.migrate.js +223 -0
  44. package/dist_ts/skr.period.d.ts +47 -0
  45. package/dist_ts/skr.period.js +95 -0
  46. package/dist_ts/skr.posting.d.ts +74 -0
  47. package/dist_ts/skr.posting.js +209 -0
  48. package/dist_ts/skr.security.d.ts +6 -9
  49. package/dist_ts/skr.security.js +16 -89
  50. package/dist_ts/skr.sequence.d.ts +32 -0
  51. package/dist_ts/skr.sequence.js +51 -0
  52. package/dist_ts/skr.txview.d.ts +46 -0
  53. package/dist_ts/skr.txview.js +235 -0
  54. package/dist_ts/skr.types.d.ts +35 -1
  55. package/dist_ts/skr.verify.d.ts +13 -0
  56. package/dist_ts/skr.verify.js +84 -0
  57. package/package.json +5 -4
  58. package/readme.hints.md +37 -0
  59. package/readme.md +69 -1
  60. package/readme.plan.md +180 -243
  61. package/ts/00_commitinfo_data.ts +1 -1
  62. package/ts/core/core.accountpolicy.ts +154 -0
  63. package/ts/core/core.bukeys.ts +146 -0
  64. package/ts/core/core.datev.captions.ts +133 -0
  65. package/ts/core/core.datev.ts +174 -0
  66. package/ts/core/core.hash.ts +76 -0
  67. package/ts/core/core.plugins.ts +9 -0
  68. package/ts/core/core.recipes.ts +659 -0
  69. package/ts/core/core.taxscenario.ts +156 -0
  70. package/ts/core/core.types.ts +74 -0
  71. package/ts/core/core.validate.ts +119 -0
  72. package/ts/core/index.ts +15 -0
  73. package/ts/index.ts +31 -0
  74. package/ts/plugins.ts +4 -0
  75. package/ts/skr.api.ts +432 -46
  76. package/ts/skr.balances.ts +127 -0
  77. package/ts/skr.classes.journalentry.ts +54 -5
  78. package/ts/skr.classes.reports.ts +54 -126
  79. package/ts/skr.database.ts +3 -0
  80. package/ts/skr.errors.ts +44 -0
  81. package/ts/skr.export.ts +3 -6
  82. package/ts/skr.invoice.booking.ts +22 -34
  83. package/ts/skr.migrate.ts +268 -0
  84. package/ts/skr.period.ts +139 -0
  85. package/ts/skr.posting.ts +273 -0
  86. package/ts/skr.security.ts +18 -93
  87. package/ts/skr.sequence.ts +89 -0
  88. package/ts/skr.txview.ts +268 -0
  89. package/ts/skr.types.ts +37 -1
  90. 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
- save(): Promise<void>;
4
- delete(): Promise<void>;
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
- transactionIds = (__runInitializers(this, _status_extraInitializers), __runInitializers(this, _transactionIds_initializers, void 0));
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
- const consistencyValidation = validatePostingKeyConsistency(this.lines);
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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