I'm looking into Beancount for the specific purpose of rigorous capital gains tracking for crypto transactions. I just read the docs, and now have a few questions, hoping someone can help. Thanks in advance! :)
I'd like to run my own rules for booking (mostly HIFO, except able to select a slightly lower basis lot if it qualifies for long term instead of short term cap gains .. maybe some other special cases). I'm guessing I will need to implement these rules in my importer somehow, and have the importer label each lot and sale? Or should I implement the rules in Beancount directly?
I'll have a few (maybe 3-6) CSVs of all-time transactions from wallet software or downloaded from exchanges. Should I write Beancount importers, or just scripts that generate Beancount text files? Does my need for custom lot-selection rules affect this decision?
What's a good workflow for taking the booking decisions Beancount makes for a given tax year and "locking" them in so they can't be changed when I run again in the next tax year -- e.g., if I tweak my booking algorithm?
I saw in the docs somewhere that transaction merging isn't well supported. Is that still the case? This is something I'll encounter since transfers between an exchange and a cold wallet will result in one leg being imported from the exchange and the other from the cold wallet.
I was a little surprised that Beancount doesn't deal with times or timezones :) Are there cases where ordering of intraday transactions can mess things up?
This page discussed Beancount's incomplete handling of acquisition costs/commissions:Is that still an outstanding issue?
In cases where a transaction has legs in non-USD (e.g., a USDT (Tether stablecoin) / BTC swap), but it needs to be tracked for taxes in USD terms, is it a good practice to split the transaction with a synthetic temporary position in USD (i.e., one USDT-USD tx and one USD-BTC tx?)
This doesn't matter yet for crypto, but are there ways to catch/prevent wash sales using Beancount?
--Thanks again!
Eric
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/CAFXPr0v18V479ZF4h8Rvz%2B_6fmAjttrkZamDpQXhE%2BHx%3DKg7sg%40mail.gmail.com.
On Sat, Jul 15, 2023 at 11:19 AM Eric Altendorf <erical...@gmail.com> wrote:
...
I'd like to run my own rules for booking (mostly HIFO, except able to select a slightly lower basis lot if it qualifies for long term instead of short term cap gains .. maybe some other special cases). I'm guessing I will need to implement these rules in my importer somehow, and have the importer label each lot and sale? Or should I implement the rules in Beancount directly?Those are not pluggable (but it would be a good idea to restructure some of my code to make it so).You'd have to make the change to the "master" branch, if you mirror the other methods I'd welcome a PR (it should be easy I think).
...
You don't reimport the same material. Updating your Beancount input file should be an incremental process. Don't overwrite that you already imported. Similar to my previous comment -- if you're going to automate importing everything from scratch every time you might as well build something distinct; I did that myself with github.com/blais/johnny.
I saw in the docs somewhere that transaction merging isn't well supported. Is that still the case? This is something I'll encounter since transfers between an exchange and a cold wallet will result in one leg being imported from the exchange and the other from the cold wallet.That's still the case. For context: by "merging" what is meant here is that the two halves of a two posting transaction are inserted in the input as two distinct transactions and automatically merged into one. (It just requires a feature that matches the transactions and inserts postings to transfer accounts, a bunch of design questions would come up.)
I was a little surprised that Beancount doesn't deal with times or timezones :) Are there cases where ordering of intraday transactions can mess things up?That was an explicit design decision to (a) keep things simple (it can get pretty hairy), (b) because the various institutions don't usually include time and we're just trying to represent the data from the institutions. At this stage my sense is that all we need is a way to resolve ordering. Given that balance checks are done sparsely on the flow of transactions changes in ordering don't cause dramatic problems, but like the ability to resolve the mismatch in dates from two sides of a transaction, it would be nice to eventually solve this properly.
...
On Sat, Jul 15, 2023 at 11:19 AM Eric Altendorf <erical...@gmail.com> wrote:This page discussed Beancount's incomplete handling of acquisition costs/commissions:Is that still an outstanding issue?Yes. Historically the few times I needed this I wrote a script to do this at reporting time. Johnny also deals with this properly.