@fin.cx/skr 2.0.1 → 3.1.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.
@@ -0,0 +1,182 @@
1
+ /**
2
+ * OPOS (Offene-Posten-Buchhaltung): open-item accounting over the v2 ledger.
3
+ *
4
+ * Open items are DERIVED from the hashed journal — no separate bookkeeping
5
+ * state that could drift. A line on a personal account (debtors 10000-69999,
6
+ * creditors 70000-99999) belongs to the open item keyed by
7
+ * (account, belegfeld1); the item is open while its signed sum is non-zero.
8
+ * Settling an item is ordinary posting (core.bookBankPayment + JournalPoster),
9
+ * so Festschreibung and the audit chain apply unchanged.
10
+ *
11
+ * Only dunning metadata lives outside the ledger (OposMeta collection) —
12
+ * process state, not bookkeeping.
13
+ */
14
+ import * as core from './core/index.js';
15
+ import { getDbSync } from './skr.database.js';
16
+ import { JOURNAL_ENTRY_COLLECTION } from './skr.period.js';
17
+ export const OPOS_META_COLLECTION = 'OposMeta';
18
+ function kindOf(accountNumber, policy) {
19
+ if (core.isDebtorAccount(policy, accountNumber))
20
+ return 'debtor';
21
+ if (core.isCreditorAccount(policy, accountNumber))
22
+ return 'creditor';
23
+ return null;
24
+ }
25
+ async function loadPersonalLines(skrType, policy, accountNumber, asOf) {
26
+ const match = {
27
+ skrType,
28
+ schemaVersion: 2,
29
+ status: { $in: ['posted', 'finalized'] },
30
+ };
31
+ if (asOf)
32
+ match.date = { $lte: asOf };
33
+ if (accountNumber)
34
+ match['lines.accountNumber'] = accountNumber;
35
+ const docs = await getDbSync()
36
+ .mongoDb.collection(JOURNAL_ENTRY_COLLECTION)
37
+ .find(match)
38
+ .sort({ date: 1, sequenceNumber: 1 })
39
+ .toArray();
40
+ const rows = [];
41
+ for (const doc of docs) {
42
+ for (const line of (doc.lines ?? [])) {
43
+ const account = line.accountNumber;
44
+ if (!kindOf(account, policy))
45
+ continue;
46
+ if (accountNumber && account !== accountNumber)
47
+ continue;
48
+ rows.push({
49
+ entryId: doc.id,
50
+ accountNumber: account,
51
+ belegfeld1: line.belegfeld1 || doc.reference || '',
52
+ side: line.side,
53
+ amountCents: line.amountCents ?? 0,
54
+ date: doc.date,
55
+ });
56
+ }
57
+ }
58
+ return rows;
59
+ }
60
+ /**
61
+ * Derive open items. Debtors: claims are debits, settlements credits;
62
+ * creditors inverse. Items with openCents === 0 are settled and omitted
63
+ * unless includeSettled is set.
64
+ */
65
+ export async function listOpenItems(skrType, policy, options) {
66
+ const rows = await loadPersonalLines(skrType, policy, options?.accountNumber, options?.asOf);
67
+ const groups = new Map();
68
+ for (const row of rows) {
69
+ const kind = kindOf(row.accountNumber, policy);
70
+ if (options?.kind && kind !== options.kind)
71
+ continue;
72
+ const key = `${row.accountNumber}:${row.belegfeld1}`;
73
+ let item = groups.get(key);
74
+ if (!item) {
75
+ item = {
76
+ accountNumber: row.accountNumber,
77
+ kind,
78
+ reference: row.belegfeld1 ?? '',
79
+ invoiceCents: 0,
80
+ clearedCents: 0,
81
+ openCents: 0,
82
+ firstDate: row.date.toISOString().slice(0, 10),
83
+ lastDate: row.date.toISOString().slice(0, 10),
84
+ entryIds: [],
85
+ dunningLevel: 0,
86
+ };
87
+ groups.set(key, item);
88
+ }
89
+ const isClaim = (kind === 'debtor') === (row.side === 'debit');
90
+ if (isClaim)
91
+ item.invoiceCents += row.amountCents;
92
+ else
93
+ item.clearedCents += row.amountCents;
94
+ item.lastDate = row.date.toISOString().slice(0, 10);
95
+ if (!item.entryIds.includes(row.entryId))
96
+ item.entryIds.push(row.entryId);
97
+ }
98
+ const meta = await getDbSync().mongoDb.collection(OPOS_META_COLLECTION).find({ skrType }).toArray();
99
+ const metaByKey = new Map(meta.map((m) => [`${m.accountNumber}:${m.reference}`, m]));
100
+ const items = [];
101
+ for (const item of groups.values()) {
102
+ item.openCents = item.invoiceCents - item.clearedCents;
103
+ const extra = metaByKey.get(`${item.accountNumber}:${item.reference}`);
104
+ if (extra) {
105
+ item.dunningLevel = extra.dunningLevel ?? 0;
106
+ item.dueDate = extra.dueDate;
107
+ }
108
+ if (item.openCents !== 0 || options?.includeSettled)
109
+ items.push(item);
110
+ }
111
+ return items.sort((a, b) => a.accountNumber.localeCompare(b.accountNumber) || a.firstDate.localeCompare(b.firstDate));
112
+ }
113
+ /**
114
+ * Aging list relative to asOf, bucketed by days since dueDate (falling back
115
+ * to the item's first posting date).
116
+ */
117
+ export async function getAging(skrType, policy, kind, asOf, bucketDays = [30, 60, 90]) {
118
+ const items = await listOpenItems(skrType, policy, { kind, asOf });
119
+ const buckets = [
120
+ ...bucketDays.map((days, index) => ({
121
+ label: index === 0 ? `0-${days}` : `${bucketDays[index - 1] + 1}-${days}`,
122
+ maxAgeDays: days,
123
+ items: [],
124
+ totalCents: 0,
125
+ })),
126
+ { label: `> ${bucketDays[bucketDays.length - 1]}`, maxAgeDays: null, items: [], totalCents: 0 },
127
+ ];
128
+ for (const item of items) {
129
+ const anchor = item.dueDate ?? item.firstDate;
130
+ const ageDays = Math.max(0, Math.floor((asOf.getTime() - new Date(anchor).getTime()) / 86_400_000));
131
+ const bucket = buckets.find((candidate) => candidate.maxAgeDays !== null && ageDays <= candidate.maxAgeDays) ??
132
+ buckets[buckets.length - 1];
133
+ bucket.items.push(item);
134
+ bucket.totalCents += item.openCents;
135
+ }
136
+ return buckets;
137
+ }
138
+ /**
139
+ * Subledger control totals: the aggregated personal-account balances that a
140
+ * balance sheet reports as Forderungen (B.II.1) / Verbindlichkeiten (C.4)
141
+ * aus Lieferungen und Leistungen. Control accounts themselves are blocked for
142
+ * posting, so these aggregates ARE the control balances.
143
+ */
144
+ export async function getControlTotals(skrType, policy, asOf) {
145
+ const rows = await loadPersonalLines(skrType, policy, undefined, asOf);
146
+ let debtorsCents = 0;
147
+ let creditorsCents = 0;
148
+ const debtorAccounts = new Set();
149
+ const creditorAccounts = new Set();
150
+ for (const row of rows) {
151
+ const signed = row.side === 'debit' ? row.amountCents : -row.amountCents;
152
+ if (kindOf(row.accountNumber, policy) === 'debtor') {
153
+ debtorsCents += signed;
154
+ debtorAccounts.add(row.accountNumber);
155
+ }
156
+ else {
157
+ creditorsCents -= signed; // creditors carry credit balances positive
158
+ creditorAccounts.add(row.accountNumber);
159
+ }
160
+ }
161
+ return {
162
+ debtorsCents,
163
+ creditorsCents,
164
+ debtorAccounts: debtorAccounts.size,
165
+ creditorAccounts: creditorAccounts.size,
166
+ };
167
+ }
168
+ /**
169
+ * Dunning metadata (process state, not bookkeeping — letters are out of
170
+ * scope; the level/due-date state machine is in).
171
+ */
172
+ export async function setOposMeta(params) {
173
+ const update = { updatedAt: new Date() };
174
+ if (params.dunningLevel !== undefined)
175
+ update.dunningLevel = params.dunningLevel;
176
+ if (params.dueDate !== undefined)
177
+ update.dueDate = params.dueDate;
178
+ await getDbSync()
179
+ .mongoDb.collection(OPOS_META_COLLECTION)
180
+ .updateOne({ skrType: params.skrType, accountNumber: params.accountNumber, reference: params.reference }, { $set: update }, { upsert: true });
181
+ }
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLm9wb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9za3Iub3Bvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxPQUFPLEtBQUssSUFBSSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUM7QUFvQy9DLFNBQVMsTUFBTSxDQUFDLGFBQXFCLEVBQUUsTUFBMkI7SUFDaEUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUM7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUNqRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDO1FBQUUsT0FBTyxVQUFVLENBQUM7SUFDckUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBV0QsS0FBSyxVQUFVLGlCQUFpQixDQUM5QixPQUFpQixFQUNqQixNQUEyQixFQUMzQixhQUFzQixFQUN0QixJQUFXO0lBRVgsTUFBTSxLQUFLLEdBQTRCO1FBQ3JDLE9BQU87UUFDUCxhQUFhLEVBQUUsQ0FBQztRQUNoQixNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUU7S0FDekMsQ0FBQztJQUNGLElBQUksSUFBSTtRQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDdEMsSUFBSSxhQUFhO1FBQUUsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsYUFBYSxDQUFDO0lBRWhFLE1BQU0sSUFBSSxHQUFHLE1BQU0sU0FBUyxFQUFFO1NBQzNCLE9BQU8sQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENB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
@@ -1,18 +1,3 @@
1
1
  import type { IAccountData } from './skr.types.js';
2
- /**
3
- * SKR03 - Process Structure Principle (Prozessgliederungsprinzip)
4
- * Organized by business process flow
5
- */
6
2
  export declare const SKR03_ACCOUNTS: IAccountData[];
7
- export declare const SKR03_ACCOUNT_CLASSES: {
8
- 0: string;
9
- 1: string;
10
- 2: string;
11
- 3: string;
12
- 4: string;
13
- 5: string;
14
- 6: string;
15
- 7: string;
16
- 8: string;
17
- 9: string;
18
- };
3
+ export declare const SKR03_ACCOUNT_CLASSES: Record<number, string>;