Accurate LIFO Lot Tracking for Crypto-to-Crypto Trades
complete
B
Blue Duck
Koinly should improve LIFO cost basis tracking for crypto-to-crypto trades.
When 'Realize gains on crypto-to-crypto trades' is off and LIFO calculation is ON (as required by Italian tax law), the cost basis of the original asset is transferred to the new asset, but the specific LIFO lot details are lost.
For example, if I buy BTC in several lots and swap the most recent lot for ETH, Koinly doesn't preserve which BTC lot was swapped. When I later sell ETH for fiat, the cost basis appears averaged instead of using the correct LIFO lot, making it hard to comply with Italian rules that require LIFO and only tax crypto-to-fiat or only specif types of crypto to crypto disposals (that I can handle manually).
Please add a way to accurately track and carry over LIFO lots through non-taxable swaps so cost basis remains correct for future disposals
Jack
marked this post as
complete
For Italy, you
shouldn't
have "Realize gains on crypto-to-crypto trades" OFF, because some trades (with MiCa-compliant stablecoins) are taxable.So you should have "Realize gains on crypto-to-crypto trades" ON and then tag all crypto-to-crypto trades that should be non-taxable as
Swap
Swap
tag retains the date of acquisition of the original asset, which is what you're asking aboutFor more tips on what manual adjustments might be needed when reporting crypto in Italy, see:
https://feedback.koinly.io/feature-requests/p/support-tax-reporting-for-italy
B
Blue Duck
Jack thanks, but I was using another method: when the exchange was with MICA stablecoins, I was adding a manual intermediate exchange with FIAT. I could try the method you suggest for checking if LIFO lots are preserved as I intended, but I don't want to change the past transactions whose taxes were already payed.
Is it possible to set a lock date (like migration) for changing the "Realize gains on crypto-to-crypto trades" setting without affecting transactions before a specific date?
Jack
Blue Duck: You can continue doing what you're doing then, but you still need to tag all crypto-to-crypto trades as "Swap" to preserve the acquisition date
It's just more work compared to the other method (as you have to tag trades as swap and add in-between to fiat trades), but the outcome will be the same
I would also mention that it's worth confirming with your accountant if lots have to retain acquisition date on crypto-to-crypto trades, possibly it's grey area
B
Blue Duck
Jack Thanks, I see it worked with this as I expected. Now I am interested on changing my method to ""Realize gains on crypto-to-crypto trades" ON and then tag all crypto-to-crypto trades that should be non-taxable as Swap" as you proposed but for that I need to freeze the calcuation for past years. Is it possible?
Jack
Blue Duck: There's no automated way to change this toggle without affecting prior years, I'm afraid.
If you:
- Set "Realize gains on crypto-to-crypto trades" to ON
- Go back and tag all eligible crypto-to-crypto trades as "Swap"
Then this will retain the date of acquisition on historical trades, hence changing your LIFO calculations for those years.
B
Blue Duck
Example of how gain calculation should work for the proposed handling of LIFO lots asked in this ticket:
- 1 BTC acquired for 10$
- later the 1 BTC is exchanged for 3 ETH
- At this point, cost basis for future gain calculation should track 3 objects and not only one with averaged cost basis:
1 ETH with 3.33$ cost basis and xx age
1 ETH with 3.33$ cost basis and xx age
1 ETH with 3.33$ cost basis and xx age
- Later, if 1 ETH is sold for 5$, the younger ETH lifo lot should be considered and consumed, and the gain should be calculated as (5 - 3.33)=1.67$.
- As this point, 2 objects should remain in LIFO bucket:
1 ETH with 3.33$ cost basis and xx age
1 ETH with 3.33$ cost basis and xx age
- Later, if some ETH is exchanged to anoter crypto, process repeats until the specific LIFO lot is exchanged with fiat or during any other fiscal relevant transaction.