@fin.cx/chartdata 2.14.0 → 2.15.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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@fin.cx/chartdata',
6
- version: '2.14.0',
6
+ version: '2.15.0',
7
7
  description: 'Year-versioned German SKR03/SKR04 chart-of-accounts datasets with Automatikkonto functions, BU-key rules, UStVA-Kennzahl and Anlage EÜR mappings'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxtQkFBbUI7SUFDekIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLGtKQUFrSjtDQUNoSyxDQUFBIn0=
@@ -1,4 +1,4 @@
1
- import type { IChart, IChartAccount, IMappingCoverage, IScenarioKennzahlen, TAccountRole, TChartName, TEuerAccountLines, TMappingDimension } from './chartdata.types.js';
1
+ import type { IChart, IChartAccount, IMappingCoverage, IScenarioKennzahlen, TAccountRole, TChartName, TEuerAccountLines, TMappingDimension, TSecuritiesRole, TTaxRule } from './chartdata.types.js';
2
2
  import { type IEuerLinesOptions } from './chartdata.euer.js';
3
3
  /**
4
4
  * UStVA Kennzahlen driven by the tax scenario of a booking (not by a single
@@ -21,6 +21,19 @@ export declare function getAccount(chart: TChartName, year: number, accountNumbe
21
21
  * chart's order. Throws for unknown chart/year combinations, as `getChart`.
22
22
  */
23
23
  export declare function getAccountsByRole(chart: TChartName, year: number, role: TAccountRole): IChartAccount[];
24
+ /**
25
+ * The accounts of a chart with the securities role (`IChartAccount.securitiesRole`),
26
+ * in the chart's order: one without a tax rule and, where DATEV keeps one apart,
27
+ * one under § 3 Nr. 40 EStG / § 8b KStG. Throws for unknown chart/year
28
+ * combinations, as `getChart`.
29
+ */
30
+ export declare function getAccountsBySecuritiesRole(chart: TChartName, year: number, role: TSecuritiesRole): IChartAccount[];
31
+ /**
32
+ * The one account of a chart that books the securities role under the tax rule
33
+ * (`taxRule`; none: the account without one), or `null` where the chart keeps
34
+ * none for it. Throws for unknown chart/year combinations, as `getChart`.
35
+ */
36
+ export declare function getSecuritiesAccount(chart: TChartName, year: number, role: TSecuritiesRole, taxRule?: TTaxRule): IChartAccount | null;
24
37
  /**
25
38
  * Coverage check for the accounts a ledger actually uses. Callers must treat
26
39
  * missing/unknown accounts as a hard error before generating filings.
@@ -50,6 +50,23 @@ export function getAccount(chart, year, accountNumber) {
50
50
  export function getAccountsByRole(chart, year, role) {
51
51
  return getChart(chart, year).accounts.filter((account) => account.accountRole === role);
52
52
  }
53
+ /**
54
+ * The accounts of a chart with the securities role (`IChartAccount.securitiesRole`),
55
+ * in the chart's order: one without a tax rule and, where DATEV keeps one apart,
56
+ * one under § 3 Nr. 40 EStG / § 8b KStG. Throws for unknown chart/year
57
+ * combinations, as `getChart`.
58
+ */
59
+ export function getAccountsBySecuritiesRole(chart, year, role) {
60
+ return getChart(chart, year).accounts.filter((account) => account.securitiesRole === role);
61
+ }
62
+ /**
63
+ * The one account of a chart that books the securities role under the tax rule
64
+ * (`taxRule`; none: the account without one), or `null` where the chart keeps
65
+ * none for it. Throws for unknown chart/year combinations, as `getChart`.
66
+ */
67
+ export function getSecuritiesAccount(chart, year, role, taxRule) {
68
+ return getAccountsBySecuritiesRole(chart, year, role).find((account) => account.taxRule === taxRule) ?? null;
69
+ }
53
70
  function hasMapping(account, dimension) {
54
71
  switch (dimension) {
55
72
  case 'ustva':
@@ -98,4 +115,4 @@ export function getEuerLines(chart, chartYear, accountNumber, formYear, options
98
115
  const account = getAccount(chart, chartYear, accountNumber);
99
116
  return account ? euerLinesOf(account, formYear, options) : null;
100
117
  }
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRkYXRhLmxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NoYXJ0ZGF0YS5sb29rdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE1BQU0sTUFBTSxHQUFhLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBRWxEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBd0I7SUFDNUQsOEJBQThCLEVBQUUsRUFBRTtJQUNsQyw2QkFBNkIsRUFBRSxFQUFFO0lBQ2pDLDJCQUEyQixFQUFFLEVBQUU7SUFDL0IsMEJBQTBCLEVBQUUsRUFBRTtJQUM5QiwyQkFBMkIsRUFBRSxFQUFFO0lBQy9CLDBCQUEwQixFQUFFLEVBQUU7SUFDOUIsc0JBQXNCLEVBQUUsRUFBRTtJQUMxQixxQkFBcUIsRUFBRSxFQUFFO0lBQ3pCLGlCQUFpQixFQUFFLEVBQUU7SUFDckIsVUFBVSxFQUFFLEVBQUU7SUFDZCxvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLG1CQUFtQixFQUFFLEVBQUU7SUFDdkIseUJBQXlCLEVBQUUsRUFBRTtJQUM3QixRQUFRLEVBQUUsRUFBRTtJQUNaLGVBQWUsRUFBRSxFQUFFO0lBQ25CLHFCQUFxQixFQUFFLEVBQUU7SUFDekIsU0FBUyxFQUFFLEVBQUU7Q0FDZCxDQUFDO0FBRUYsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVEOzs7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
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRkYXRhLmxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NoYXJ0ZGF0YS5sb29rdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUEsT0FBTyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE1BQU0sTUFBTSxHQUFhLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBRWxEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBd0I7SUFDNUQsOEJBQThCLEVBQUUsRUFBRTtJQUNsQyw2QkFBNkIsRUFBRSxFQUFFO0lBQ2pDLDJCQUEyQixFQUFFLEVBQUU7SUFDL0IsMEJBQTBCLEVBQUUsRUFBRTtJQUM5QiwyQkFBMkIsRUFBRSxFQUFFO0lBQy9CLDBCQUEwQixFQUFFLEVBQUU7SUFDOUIsc0JBQXNCLEVBQUUsRUFBRTtJQUMxQixxQkFBcUIsRUFBRSxFQUFFO0lBQ3pCLGlCQUFpQixFQUFFLEVBQUU7SUFDckIsVUFBVSxFQUFFLEVBQUU7SUFDZCxvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLG1CQUFtQixFQUFFLEVBQUU7SUFDdkIseUJBQXlCLEVBQUUsRUFBRTtJQUM3QixRQUFRLEVBQUUsRUFBRTtJQUNaLGVBQWUsRUFBRSxFQUFFO0lBQ25CLHFCQUFxQixFQUFFLEVBQUU7SUFDekIsU0FBUyxFQUFFLEVBQUU7Q0FDZCxDQUFDO0FBRUYsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVEOzs7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
@@ -13,6 +13,55 @@ export type TAccountType = 'asset' | 'liability' | 'equity' | 'revenue' | 'expen
13
13
  * books with ("Anlagenabgänge … (Restbuchwert …)"), an expense account.
14
14
  */
15
15
  export type TAccountRole = 'asset_sale_proceeds' | 'disposal_book_value';
16
+ /**
17
+ * What an account books of a business's securities (Wertpapiere): holding
18
+ * them, their income, their sale, their valuation at a closing date and the
19
+ * taxes withheld from their income. A booking of securities finds its
20
+ * account by this role together with the account's `taxRule`: within a
21
+ * chart, no two accounts share both.
22
+ * - holdings, by the balance-sheet item (§ 266 Abs. 2 HGB):
23
+ * 'holding_fixed' (Wertpapiere des Anlagevermögens, A.III.5),
24
+ * 'holding_fixed_shares' (those whose income falls under the
25
+ * Teileinkünfteverfahren, A.III.5), 'holding_fixed_bonds' (fixed-interest
26
+ * ones, A.III.5), 'holding_current' (sonstige Wertpapiere, B.III.2);
27
+ * - their income (dividends, distributions, coupons) by whether the
28
+ * securities are fixed or current assets: 'income_fixed', 'income_current';
29
+ * - the sale of current assets, stated net: 'sale_gain_current',
30
+ * 'sale_loss_current';
31
+ * - the sale of fixed assets, stated gross on the accounts of a fixed asset's
32
+ * disposal (`accountRole`): what it fetched, 'sale_proceeds_fixed_gain' and
33
+ * 'sale_proceeds_fixed_loss', and the book value it leaves the books with,
34
+ * 'book_value_fixed_gain' and 'book_value_fixed_loss', by whether the sale
35
+ * makes a book gain or a book loss;
36
+ * - the costs of a sale DATEV states apart, 'sale_costs_gain' and
37
+ * 'sale_costs_loss' (§ 8b Abs. 2 Satz 2 KStG);
38
+ * - the valuation at a closing date (§ 253 Abs. 3 to 5 HGB): a fixed asset's
39
+ * write-down for a lasting or a temporary decline,
40
+ * 'writedown_fixed_lasting' and 'writedown_fixed_temporary', a current
41
+ * asset's, 'writedown_current', and the write-ups, 'writeup_fixed',
42
+ * 'writeup_current', and 'writeup' where one account takes either;
43
+ * - the taxes withheld from their income: 'capital_gains_tax'
44
+ * (Kapitalertragsteuer) and 'capital_gains_tax_soli' (the Solidaritätszuschlag
45
+ * on it), 'foreign_withholding_tax' (a foreign tax to be credited or
46
+ * deducted), 'foreign_tax_exempt_income' (a foreign tax on income exempt at
47
+ * home), and 'foreign_tax_refund' (a foreign tax to be refunded);
48
+ * - 'margin_interest': the interest on a short-term debt, such as a broker's
49
+ * margin loan.
50
+ */
51
+ export type TSecuritiesRole = 'holding_fixed' | 'holding_fixed_shares' | 'holding_fixed_bonds' | 'holding_current' | 'income_fixed' | 'income_current' | 'sale_gain_current' | 'sale_loss_current' | 'sale_proceeds_fixed_gain' | 'sale_proceeds_fixed_loss' | 'book_value_fixed_gain' | 'book_value_fixed_loss' | 'sale_costs_gain' | 'sale_costs_loss' | 'writedown_fixed_lasting' | 'writedown_fixed_temporary' | 'writedown_current' | 'writeup_fixed' | 'writeup_current' | 'writeup' | 'capital_gains_tax' | 'capital_gains_tax_soli' | 'foreign_withholding_tax' | 'foreign_tax_exempt_income' | 'foreign_tax_refund' | 'margin_interest';
52
+ /**
53
+ * A rule of the income tax law an income or expense account is kept for, as
54
+ * its DATEV name states it:
55
+ * - 'estg_3_40_kstg_8b': income from shares and the expenses of it under the
56
+ * Teileinkünfteverfahren (§ 3 Nr. 40, § 3c Abs. 2 EStG) or, for a
57
+ * corporation, § 8b KStG — DATEV names these accounts "§ 3 Nr. 40 EStG bzw.
58
+ * § 8b … KStG". DATEV's interface to the corporate income tax treats their
59
+ * income as 100 % tax-free and their expenses as 100 % non-deductible, its
60
+ * interface to the trade tax 40 % each (Kontenrahmen SKR 03 and SKR 04,
61
+ * gültig für 2026, footnote 9); the corrections are made in the return, not
62
+ * in the books.
63
+ */
64
+ export type TTaxRule = 'estg_3_40_kstg_8b';
16
65
  /**
17
66
  * Built-in DATEV tax automatism of an account. Lines on automatik accounts
18
67
  * must carry no BU key (automatism applies) or key 40 (automatism cancelled).
@@ -73,9 +122,14 @@ export type TEuerMapping = {
73
122
  * return: no receipt and no payment of its own (Anleitung zur Anlage EÜR,
74
123
  * Zeile 58); what a return leaves to pay counts as paid VAT (Kz 186);
75
124
  * - 'closing': a carry-forward, closing or statistical account, which records
76
- * no business transaction.
125
+ * no business transaction;
126
+ * - 'deferred_current_asset': a current asset named in § 4 Abs. 3 Satz 4
127
+ * EStG — shares, securities, land and buildings —, whose cost counts only
128
+ * when its sale's proceeds are received or it is withdrawn, as goods
129
+ * (Zeile 29, Kz 100), through the list of such assets in the Anlage AVEÜR
130
+ * (Zeilen 93 bis 96), not when it is paid.
77
131
  */
78
- export type TEuerExclusion = 'balance_sheet' | 'fixed_asset' | 'inventory' | 'valuation' | 'pass_through' | 'reverse_charge' | 'closing';
132
+ export type TEuerExclusion = 'balance_sheet' | 'fixed_asset' | 'inventory' | 'valuation' | 'pass_through' | 'reverse_charge' | 'closing' | 'deferred_current_asset';
79
133
  /**
80
134
  * The part of the Anlage EÜR a line belongs to: Betriebseinnahmen (Zeilen
81
135
  * 12 bis 22), Betriebsausgaben (Zeilen 24 bis 76 of the 2026 form), or the
@@ -136,6 +190,10 @@ export interface IChartAccount {
136
190
  accountType: TAccountType;
137
191
  /** what the account is for beyond its type and HGB position; unset = they say it all */
138
192
  accountRole?: TAccountRole;
193
+ /** what the account books of a business's securities; unset = nothing of its own */
194
+ securitiesRole?: TSecuritiesRole;
195
+ /** the income tax rule the account is kept for, as its DATEV name states it; unset = none of its own */
196
+ taxRule?: TTaxRule;
139
197
  description?: string;
140
198
  automatikFunction?: TAutomatikFunction;
141
199
  /** BU keys allowed on lines of this account ('' = none). Unset = all. */