The rules
The manual of the tax engine: every rule it applies, each on its own page with the real transactions or the typed histories that pin it. Rendered from what the tests run, so it cannot drift from the product.
Two kinds of rule, one seam
A source rule reads what a provider returned into legs: an asset was acquired, disposed of, received as income, or paid as a fee, and why the rule thinks so. It knows the chain and nothing about tax. A jurisdiction rule reads legs, valued in euros, into outcomes: taxable or not, at what cost, with which paragraph behind it. It knows the letter and nothing about chains.
Between them is one seam, the event: a leg with its value, stripped of everything a chain would recognise. A source is done for a jurisdiction the day its fixtures appear beside the others; a jurisdiction is done for a source without knowing it exists.
What pins a rule
A source rule is pinned by fixtures: real transactions from the cache, run by the tests. Its page shows them, one at a time, the way the pipeline read them: the movements, the legs, and the events handed on. A jurisdiction rule is pinned by scenarios: histories typed by hand, a few events each, run by the same tests. Its page shows the history, what came out, and the paragraphs it rests on.
Both lists are the ones the tests run, so a page cannot say something the tests do not check. A rule with no fixture or no scenario is not done, and the tests say so.
- Solana rules
- 9
- Fixtures
- 20
- German rules
- 20
- Scenarios
- 38
The letter, applied and not yet
BMF-Schreiben vom 6. März 2025, IV C 1 - S 2256/00042/064/043: 22 of its 110 paragraphs are cited by a rule. The rest is the German roadmap: what the engine does not read yet, by heading. Part I explains terms and needs no rule of its own. A number opens the letter at that paragraph.
Where things live
- solana/rules.go
- the source rules, named, and the fixtures embedded from testdata
- solana/legs.go
- the rules themselves; every leg names the one that read it
- tax/tax.go
- the German rules with the paragraphs they cite, and the engine
- tax/scenarios.go
- the typed histories, one list for the tests and these pages
- tax/bmf-2025-03-06/
- the letter, paragraph by paragraph
- rules.go
- these pages