Handle Spin-off events as buys (#35)
Badges / coveralls (push) Successful in 1m1s

Reviewed-on: #35
Co-authored-by: Natercio Moniz <[email protected]>
This commit was merged in pull request #35.
This commit is contained in:
natercio authored and Natercio Moniz committed 2026-10-27 22:08:18 +00:00
1 parent 41b287c804
commit 16ae9975ee
3 files changed
+288 -73

No files matched your search

+50
View File
@@ -0,0 +1,50 @@
# 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.