Method & sources
Anyone reporting a figure to the tax office should know where it came from. This page sets out which legal provisions capi.tax calculates from, which official data feeds in, and how the calculations are checked.
Legal basis
The calculations reproduce the relevant provisions — not a private interpretation of them:
- § 20 EStG — capital income: dividends, interest, disposal gains, writer premiums (Abs. 1 Nr. 11), forward transactions (Abs. 2 S. 1 Nr. 3), cost basis and FIFO (Abs. 4), loss offsetting (Abs. 6), the Sparer-Pauschbetrag (Abs. 9)
- § 32d EStG — the separate tax rate (Abs. 1), the duty to declare income not taxed at source (Abs. 3), crediting foreign tax (Abs. 5), the Günstigerprüfung (Abs. 6)
- §§ 16, 18, 19, 20, 21 InvStG — investment income, the Vorabpauschale, gains on fund units (including the credit for taxed Vorabpauschalen under § 19 Abs. 1 S. 3), the Teilfreistellung and its effect on expenses and losses (§ 21)
- Alongside these, the relevant BMF circulars on the Abgeltungsteuer and the applicable double-taxation treaties for creditable withholding tax
Official data
Two inputs do not come from your broker export but from official publications:
- Exchange rates: the ECB reference rate, as published by the Bundesbank, taken for the day of each individual transaction. If there is no rate for that day (weekend, holiday), the last one published before it applies. Not broker rates, not yearly averages. The rate table is part of the application.
- The base rate (Basiszins) for the Vorabpauschale: the annual BMF announcement under § 18 Abs. 4 InvStG. For a year with no published value the calculation stops rather than quietly using zero.
Rules apply per tax year
Tax law changes. capi.tax therefore keeps a rule set per period — Teilfreistellung rates, the Basiszins and the Anlage KAP line numbers follow the chosen tax year. The 2024 Anlage KAP, for example, still has its own lines for forward transactions, which were dropped for 2025.
The exception is where the legislator itself changed the law retroactively: the separate loss bucket for forward transactions with its €20,000 cap (§ 20 Abs. 6 S. 5 EStG old version) was removed by the 2024 Annual Tax Act for all open cases (§ 52 Abs. 28 S. 25 EStG). capi.tax therefore applies the cap to no tax year, including 2021 to 2024.
How it is checked
Three layers that run independently of one another:
- A readable specification. The tax rules are written as scenarios in plain German — each with its legal basis, the facts, and the expected result in euro. Those scenarios run on every change, and they are written so a tax advisor can follow them without reading code.
- Regression comparison. A frozen set of worked examples makes sure a change in one place does not silently move a figure somewhere else.
- Exact arithmetic. Every amount is computed as a decimal, never as a floating-point number. Rounding happens only for display, so the method itself introduces no cent-level drift.
Where it deliberately does not calculate
Just as important as what is computed: if a sale has no purchase, no cost basis is estimated — the trade stays out of the totals until you add the opening. Rows capi.tax cannot calculate (crypto, for example) are skipped with a notice. If the fund type is missing, capi.tax currently books a fund as a share, although legally it would be an other investment fund (0 %) on Anlage KAP-INV — wrong form, wrong loss pot; with Interactive Brokers there is usually a notice, with the Tastytrade export there is not. Well-known large US ETFs are pre-assigned from a symbol list. See what we need from you.
Limits
capi.tax is a preparation tool, not tax advice. It does not know your personal situation — the Sparer-Pauschbetrag, church tax, the Günstigerprüfung, loss carryforwards or other income do not enter into it. capi.tax calculates currency gains for Interactive Brokers and shows them, but does not yet include them in the Anlage KAP lines; for Tastytrade they are not calculated (see Currency gains). Also not calculated: corporate actions other than stock splits (among others § 20 Abs. 4a EStG) and holdings bought before 2009 — tax-free shares (§ 52 Abs. 28 S. 11 EStG) and fund units with the €100,000 allowance (§ 56 Abs. 6 S. 1 Nr. 2 InvStG); the list is in What is supported. What it outputs is the taxable base, not your finished tax bill. Rare edge cases are not covered, and where a result would be uncertain the tool says so rather than inventing a number.