Generate check / check-changes (pull_request) Successful in 25s
Generate check / verify-generate (pull_request) Skipped
Quality / check-changes (pull_request) Successful in 2s
Quality / static-checks (pull_request) Successful in 54s
Quality / run-tests (pull_request) Successful in 54s
51 lines
2.4 KiB
Markdown
51 lines
2.4 KiB
Markdown
# Trading212
|
||
|
||
Turns Trading212 account statements (CSV) into the internal record model used
|
||
to build Anexo J reports. This file records how statement events are
|
||
interpreted, and why.
|
||
|
||
## Spin-off events
|
||
|
||
A spin-off distributes shares of one company to the shareholders of another.
|
||
Trading212 reports it as an `Action` of `Spin off`:
|
||
|
||
```
|
||
Spin off,2026-02-11 13:41:43+00:00,US9418481035,WAT,"Waters",EOF46451921527,0.0406450000,0E-10,USD,,,,0.00,"EUR",,,,,,
|
||
```
|
||
|
||
These rows are booked as **buys with a cost of zero**: quantity and timestamp
|
||
are kept, and every cost column (price, result, total, stamp duty reserve tax,
|
||
currency conversion fee, French transaction tax) is required to be zero —
|
||
anything non-zero, or a non-positive quantity, is logged and returned as an
|
||
error, stopping the run. A row that surprises the reader must be looked at by
|
||
a human, not silently booked.
|
||
|
||
### Why cost zero is fair
|
||
|
||
No money was paid for the new shares, and their value came out of the value
|
||
of the parent shares — on the distribution date the parent's price drops by
|
||
roughly the distributed value. The position's total basis is unchanged; it is
|
||
just partitioned over two lots: the spin-off lot at `0` and the parent lot at
|
||
its original, unreduced basis. Selling the spin-off lot books full proceeds as
|
||
gain; selling the parent lot shows the offsetting smaller gain or bigger loss.
|
||
Netted together, the result equals the true economic gain.
|
||
|
||
Example — buy 100 parent shares for 10,000; a spin-off delivers new shares
|
||
worth 2,000; later sell the new shares for 2,200 and the parent for 8,100:
|
||
|
||
| Lot | Basis (cost 0) | Sold for | Gain (cost 0) | Gain (pro-rata) |
|
||
| ------ | -------------: | -------: | ------------: | --------------: |
|
||
| New | 0 | 2,200 | 2,200 | 200 |
|
||
| Parent | 10,000 | 8,100 | -1,900 | 100 |
|
||
| Total | | | **300** | **300** |
|
||
|
||
Either partition of the same 10,000 basis yields the same net gain of 300
|
||
(true gain: 10,300 received − 10,000 paid) — as long as gains and losses are
|
||
assessed together, as they are in Anexo J within the same year. If the two
|
||
lots are sold in different years the per-year attribution differs (the total
|
||
does not). Trading212 statements don't report a pro-rata basis allocation, so
|
||
cost 0 also keeps the report reproducible from the statement alone.
|
||
|
||
> [!WARNING]
|
||
> Verify any outputs of this tool on your own or with a certified accountant.
|