Hi Fabian, I was interested in tracking trip expenses on a high level as well and recently solved this for myself, at least to the point I'm satisfied with. The starting point was the awesome https://github.com/andreasgerstmayr/fava-dashboards plugin for Fava that already had "Travel" tab in examples but it wasn't clear to me how to use it without much friction. I ended up slightly altering it and finding some practices that make it straightforward. It's all included in https://github.com/Evernight/lazy-beancount and I've also described various tips at the guide's section here: https://lazy-beancount.xyz/docs/stage4_improvements/overview/#tracking-trips-and-travel-expenses (of course, you don't have to use the whole package and can just reproduce the bits separately). Well, this point is currently just a single sentence but hopefully other tips and context make it more understandable. In any case, happy to expand on technical details.
1. Adding #trip-trip-id-maybe-also-date-05-24 and #travel tags make all transactions appear in the dashboard. This allows to view them in Fava views and indeed write BQL queries, etc. The Expenses breakdown dashboard tab then also becomes useful but I had to patch Fava (pull request pending) to make it work. 2. Usually trips happen over continuous period of time and most of transactions happening within this period can be automatically categorized into this trip. I use / wrote filter_map plugin to avoid manual tagging. 3. You also may be interested in https://github.com/Akuukis/beancount_interpolate plugin to use, for example, with transactions related to booking accommodation. For dashboards and other analytics you can virtually move transaction to a different date than a date of payment and spread the cost across number of days. 4. Indeed, metadata is a good mechanism for further customization. I guess the only point to add here is that you can easily plug queries into your customized dashboards for more visual representation. Best regards, Vasily On Friday, March 21, 2025 at 5:24:44 PM UTC+1 Patrick Ruckstuhl wrote: > Hi Fab, > > > welcome to your journey with beancount :) > > > First for your journey questions. I think if you need/want the days, > having it as a special currency instead of just metadata might be useful. > > This allows you to do calculations/aggregations on them, which I think you > can't do with the metadata. I use here a separate expense account for the > "NIGHTS", because I don't like to mix "Currencies", but you could keep it > in the same one as you keep the monetary expenses. > > I'm modeling the other side of the nights as Equity, personally that feels > cleaner than putting in Assets/Liabilities. > > I'm guessing this is just for your own interest, not for reimbursing, > otherwise I would model it differently. > > > ``` > option "operating_currency" "EUR" > > 2025-01-01 open Expenses:Travel:Accommodation:Hotel EUR > 2025-01-01 open Assets:Bank:Checking EUR > 2025-01-01 open Expenses:Travel:Nights NIGHTS > 2025-01-01 open Equity:Nights NIGHTS > > > > 2025-03-11 * "Hotel in Berlin (3 nights)" > date: "2025-03-08" ; Booking date > > purpose: "Conference" > Expenses:Travel:Accommodation:Hotel 300.00 EUR > > Expenses:Travel:Nights 3 NIGHTS > > > Assets:Bank:Checking -300.00 EUR > > Equity:Nights -3 NIGHTS > > > > 2025-03-08 * "Hotel in Berlin (3 nights)" > firstNightDate: "2025-03-11" ; date of 1st night > > purpose: "Conference" > Expenses:Travel:Accommodation:Hotel 300.00 EUR > > Expenses:Travel:Nights 3 NIGHTS > > > Assets:Bank:Checking -300.00 EUR > > Equity:Nights -3 NIGHTS > ``` > > Without even doing any special queries, you'll already get a lot of > information (e.g. in Fava) > > > and you can query that information like > > > ``` > SELECT sum(filter_currency(position, 'EUR')) as Cost, > sum(filter_currency(position, 'NIGHTS')) as Nights, entry_meta('purpose') > as Purpose > WHERE account ~ '^Expenses:Travel' GROUP BY entry_meta('purpose') > ``` > > > As for dealing with investments from IBKR, I'm doing this as well. > > My use case is pretty simple and boring, mostly buy and hold. For this I > have built two things which are useful for me > > An importer which pulls, buys and dividends directly from IBKR > > > https://tariochbctools.readthedocs.io/en/latest/importers.html#interactivebrokers > > A price import which pulls the price information for securities from IBKR > > https://tariochbctools.readthedocs.io/en/latest/price_fetchers.html > > > For general documentation about investments, this part of the official > beancount doc is a very good starting point > > https://beancount.github.io/docs/trading_with_beancount.html > > > Regards, > > Patrick > > > On 20.03.2025 19:33, Fabian Braennstroem wrote: > > Hi all, > > I am quite new to beancount (and in accounting in general) and are testing > a few > minor things at the moment with version 3. > > At the moment I am planing to use it for two topics. One is for travelling > and > another one is for calculating tax relevant gains from > investing (with interarctive brokers), which needs to be converted to EUR > currency gain. For my understanding that is possible with beancount, but I > missed up > to now a good example case for it. Maybe someone can point me to one? This > would > be great! > > As mentioned, in addition to these investing tasks, I would like to track > my business trips and also count days abroad or days in a hotel. > > For my understanding I am having different options to track this. > I saws this: https://groups.google.com/g/beancount/c/NGt2BRHR6LE > and understand, that I can use tags, meta or links for additional > information. > It seems that meta is a good option. > Maybe I could even use a special NIGHT-currency also for tracking it. > > But I am not sure yet, what the best way is to get e.g. the number of > nights > which I stayed in a hotel in a certain time frame and what I paid for this. > > E.g. I could state a stay of 3 night in these two ways: > ``` > 2025-03-11 * "Hotel in Berlin (3 nights)" > date: "2025-03-08" ; Booking date > nights: 3 ; Number of nights > purpose: "Conference" > Expenses:Travel:Accommodation:Hotel 300.00 EUR > Assets:Bank:Checking -300.00 EUR > > 2025-03-08 * "Hotel in Berlin (3 nights)" > firstNightDate: "2025-03-11" ; date of 1st night > nights: 3 ; Number of nights > purpose: "Conference" > Expenses:Travel:Accommodation:Hotel 300.00 EUR > Assets:Bank:Checking -300.00 EUR > ``` > > With this query: > > ``` > bean-query uow_test3.beancount " > SELECT SUM(position), entry.meta['nights'] as nights > WHERE account ~ '^Expenses:Travel' > GROUP BY nights > " > ``` > > > I get something like this: > > ``` > SUM(positi n > ---------- - > 600.00 EUR 3 > ``` > > I.e. I am summing the cost for all stays with 3 nights, but the number of > nights. > > Do you have an advice how I can adjust my query for this? > Thank you in advance! > Best Regards > Fab > > -- > 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 visit > https://groups.google.com/d/msgid/beancount/fb28e70a-7ee3-4d56-9dcc-081de1ecc923n%40googlegroups.com > > <https://groups.google.com/d/msgid/beancount/fb28e70a-7ee3-4d56-9dcc-081de1ecc923n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > -- 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+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/beancount/300f5614-6f0c-4218-b738-02624d115a19n%40googlegroups.com.