Hey Daniël,

Thanks a lot but yep, I've already got Fava installed and I've started
playing with it. I can see it's going to be really useful for ad-hoc stuff
and for getting to grips with the fundamentals. I'm looking forward to it.
As, I imagine, my tax accountant would be if he knew I was motivated for
once...

On Tue, 13 Jun 2017 at 14:38 Daniël Bos <[email protected]> wrote:

> Hi Dave,
>
> If you haven't come across it yet, you might be interested in Fava [1] as
> well. It's a web-wrapper (using on Flask) around Beancount, providing you a
> convenient way to record transactions and generate various reports. It's
> intended to make the barrier of entry to using plaintext accounting as low
> as possible, without preventing you from using the more powerful features
> such as scripting and plugins.
>
> [1] https://beancount.github.io/fava/
>
> On Tue, Jun 13, 2017 at 12:03 PM, Dave The Happy Singer <
> [email protected]> wrote:
>
>> Hi Martin,
>>
>> Thanks so much for the very thorough responses. I'm glad (?) I could help
>> you find some issues to fix. I'll sit down and digest your solutions in
>> more depth this evening and follow the tickets in case I need them. I'm
>> sure I'll be able to get things moving with the information you've provided.
>>
>> (I was vaguely aware of plaintext accounting but I only properly
>> discovered it this weekend and I'm excited by the possibilities. I'm a
>> Python dev so hopefully once I've got my head around the conceptual stuff I
>> hope I'll be able to contribute back in some way).
>>
>> Thanks again for you time!
>>
>> Dave
>>
>> On Tue, 13 Jun 2017 at 13:26 Martin Blais <[email protected]> wrote:
>>
>>> One more thing: If you disambiguate the cost currency in your reducing
>>> transaction, the FIFO method is working fine:
>>>
>>>
>>> 2013-11-27 open Assets:AU:Coinjar:BTC  BTC "FIFO"
>>> ...
>>> 2014-01-05 * "Deposit Cold storage"
>>>   Assets:AU:ColdStorage:BTC                     1.0 BTC {}
>>>   Assets:AU:Coinjar:BTC                        -1.0 BTC {AUD}
>>>
>>>
>>> Or if you don't care about the cost basis in ColdStorage (you lose it):
>>>
>>> 2013-11-27 open Assets:AU:Coinjar:BTC  BTC "FIFO"
>>> ...
>>> 2014-01-05 * "Deposit Cold storage"
>>>   Assets:AU:ColdStorage:BTC                     1.0 BTC @
>>>   Assets:AU:Coinjar:BTC                        -1.0 BTC {AUD}
>>>
>>> This also works:
>>>
>>> 2014-01-05 * "Deposit Cold storage"
>>>   Assets:AU:ColdStorage:BTC                     1.0 BTC @ AUD
>>>   Assets:AU:Coinjar:BTC                        -1.0 BTC {}
>>>
>>>
>>> Both of these do what you'd expect them to, that is, it gets translated
>>> to this transaction:
>>>
>>> Hash:c33deeb52a4546640770ddbe49eeb805
>>> Location: /home/blais/r/q/beancount-data/user/smile/smile1.beancount:25
>>>
>>> ------------ Balances before transaction
>>>
>>>   Assets:AU:ColdStorage:BTC
>>>
>>>   Assets:AU:Coinjar:BTC      0.14161 BTC {1059.247228303085940258456324
>>> AUD, 2013-11-27}
>>>   Assets:AU:Coinjar:BTC      0.118776 BTC {1262.881390179834309961608406
>>> AUD, 2013-11-29}
>>>   Assets:AU:Coinjar:BTC      0.149156 BTC {1005.658505189197886776261096
>>> AUD, 2013-12-10}
>>>   Assets:AU:Coinjar:BTC      0.673358 BTC {742.5470552068884605217432629
>>> AUD, 2013-12-17}
>>>   Assets:AU:Coinjar:BTC      0.230398 BTC {651.0473181190808947994340229
>>> AUD, 2013-12-19}
>>>
>>>
>>> ------------ Transaction
>>>
>>> 2014-01-05 * "Deposit Cold storage"
>>>   Assets:AU:ColdStorage:BTC   1.000000 BTC @
>>> 888.4428491233489466227474835 AUD  ;  888.4428491233489466227474835 AUD
>>>   Assets:AU:Coinjar:BTC      -0.141610 BTC {1059.25 AUD, 2013-11-27}
>>>        ; -150.0000000000000000000000000 AUD
>>>   Assets:AU:Coinjar:BTC      -0.118776 BTC {1262.88 AUD, 2013-11-29}
>>>        ; -150.0000000000000000000000000 AUD
>>>   Assets:AU:Coinjar:BTC      -0.149156 BTC {1005.66 AUD, 2013-12-10}
>>>        ; -150.0000000000000000000000000 AUD
>>>   Assets:AU:Coinjar:BTC      -0.590458 BTC {742.55 AUD, 2013-12-17}
>>>         ; -438.4428491233489466227474835 AUD
>>>
>>>
>>> Tolerances: BTC=0.000005
>>> Basis: (-888.4428491233489466227474835 AUD)
>>>
>>> ------------ Balances after transaction
>>>
>>> * Assets:AU:ColdStorage:BTC
>>>  1.0 BTC
>>>
>>> * Assets:AU:Coinjar:BTC      0.082900 BTC {742.5470552068884605217432629
>>> AUD, 2013-12-17}
>>>   Assets:AU:Coinjar:BTC      0.230398 BTC {651.0473181190808947994340229
>>> AUD, 2013-12-19}
>>>
>>>
>>>
>>> And the following one succeeds just fine.
>>>
>>> I think this is the best solution of all ofthose, just
>>> - make sure you use cost basis consistently
>>> - clearly indicate the cost currency when you're using automatic
>>> matching / inference
>>>
>>> I'll fix the tickets anyhow, but if you do this, nothing should change.
>>>
>>>
>>>
>>>
>>>
>>> On Mon, Jun 12, 2017 at 11:17 PM, Martin Blais <[email protected]> wrote:
>>>
>>>> (Apologies for the long response, you've triggered an interesting
>>>> corner case which may require a fix.)
>>>>
>>>> The error you made here (deducting 1.0 BTC from the account with
>>>> existing positions without specifying the cost basis) brings up an
>>>> interesting corner case.
>>>>
>>>>
>>>> The following is sufficient to trigger the error:
>>>>
>>>>
>>>> 2013-11-27 open Assets:AU:Coinjar:BTC  BTC
>>>> 2013-11-27 open Assets:AU:Coinjar:Cash AUD
>>>> 2013-11-27 open Assets:AU:ColdStorage:BTC BTC
>>>>
>>>> 2014-01-05 * "Deposit Cold storage"
>>>>   Assets:AU:ColdStorage:BTC                     1.0 BTC
>>>>   Assets:AU:Coinjar:BTC                        -1.0 BTC
>>>>
>>>> 2014-01-28 * "Buy BTC"
>>>>   Assets:AU:Coinjar:BTC                         0.162288 BTC
>>>> {924.2827565808932268559597752 AUD}
>>>>   Assets:AU:Coinjar:Cash                     -150.00 AUD
>>>>
>>>>
>>>> What's happening is that after the first transaction the Coinjar:BTC
>>>> account contains a negative number of units of BTC:
>>>>
>>>> bean-doctor context smile1.beancount 6
>>>> Hash:f7a2fba6639dd0ec5d52abce3788f32d
>>>> Location: /home/blais/r/q/beancount-data/user/smile/smile1.beancount:5
>>>>
>>>> ------------ Balances before transaction
>>>>
>>>>   Assets:AU:ColdStorage:BTC
>>>>
>>>>   Assets:AU:Coinjar:BTC
>>>>
>>>>
>>>> ------------ Transaction
>>>>
>>>> 2014-01-05 * "Deposit Cold storage"
>>>>   Assets:AU:ColdStorage:BTC   1.0 BTC
>>>>   Assets:AU:Coinjar:BTC      -1.0 BTC
>>>>
>>>>
>>>> Tolerances: BTC=0.05
>>>>
>>>> ------------ Balances after transaction
>>>>
>>>> * Assets:AU:ColdStorage:BTC
>>>>  1.0 BTC
>>>>
>>>> * Assets:AU:Coinjar:BTC
>>>> -1.0 BTC
>>>>
>>>>
>>>> "Adding" BTC to this negative inventory essentially means a "reduction"
>>>> of the negative number of BTC (you're reducing the short position).
>>>> Since the second transaction is providing a cost basis and it has only
>>>> a single lot with no cost basis, it cannot find a lot that matches, so you
>>>> get an error.
>>>> This is WAI.
>>>> (But it does beg the question regarding whether lots without a cost
>>>> basis should be treated distinctly; so far I'm not convinced that they
>>>> should, I don't have a great use case for that, so they're not.)
>>>>
>>>>
>>>>
>>>> If I leave all the previous transactions, one gets into a slightly
>>>> different case:
>>>>
>>>> bean-doctor context smile1.beancount 27
>>>> Hash:f7a2fba6639dd0ec5d52abce3788f32d
>>>> Location: /home/blais/r/q/beancount-data/user/smile/smile1.beancount:26
>>>>
>>>> ------------ Balances before transaction
>>>>
>>>>   Assets:AU:ColdStorage:BTC
>>>>
>>>>   Assets:AU:Coinjar:BTC      0.14161 BTC {1059.247228303085940258456324
>>>> AUD, 2013-11-27}
>>>>   Assets:AU:Coinjar:BTC      0.118776 BTC
>>>> {1262.881390179834309961608406 AUD, 2013-11-29}
>>>>   Assets:AU:Coinjar:BTC      0.149156 BTC
>>>> {1005.658505189197886776261096 AUD, 2013-12-10}
>>>>   Assets:AU:Coinjar:BTC      0.673358 BTC
>>>> {742.5470552068884605217432629 AUD, 2013-12-17}
>>>>   Assets:AU:Coinjar:BTC      0.230398 BTC
>>>> {651.0473181190808947994340229 AUD, 2013-12-19}
>>>>
>>>>
>>>> ------------ Transaction
>>>>
>>>> 2014-01-05 * "Deposit Cold storage"
>>>>   Assets:AU:ColdStorage:BTC   1.000000 BTC
>>>>   Assets:AU:Coinjar:BTC      -1.000000 BTC
>>>>
>>>>
>>>> Tolerances: BTC=0.05
>>>>
>>>> ------------ Balances after transaction
>>>>
>>>> * Assets:AU:ColdStorage:BTC
>>>>  1.0 BTC
>>>>
>>>>   Assets:AU:Coinjar:BTC      0.14161 BTC {1059.247228303085940258456324
>>>> AUD, 2013-11-27}
>>>>   Assets:AU:Coinjar:BTC      0.118776 BTC
>>>> {1262.881390179834309961608406 AUD, 2013-11-29}
>>>>   Assets:AU:Coinjar:BTC      0.149156 BTC
>>>> {1005.658505189197886776261096 AUD, 2013-12-10}
>>>>   Assets:AU:Coinjar:BTC      0.673358 BTC
>>>> {742.5470552068884605217432629 AUD, 2013-12-17}
>>>>   Assets:AU:Coinjar:BTC      0.230398 BTC
>>>> {651.0473181190808947994340229 AUD, 2013-12-19}
>>>> * Assets:AU:Coinjar:BTC
>>>> -1.0 BTC
>>>>
>>>>
>>>> Here, in theory (excluding the last transaction), there are enough BTC
>>>> to cover the -1.0 reduction and keep the balance positive:
>>>>
>>>> bean-query smile1.beancount "select account, sum(units(position)) group
>>>> by 1"
>>>>          account          sum_units_positi
>>>> ------------------------- ----------------
>>>> Assets:AU:Coinjar:BTC         0.313298 BTC
>>>> Assets:AU:Coinjar:Cash    -1100.00     AUD
>>>> Assets:AU:ColdStorage:BTC     1.0      BTC
>>>>
>>>>
>>>> The real problem is that the transaction removing -1.0 BTC from the
>>>> Coinjar:BTC should have failed and raised an error message. It's a bug that
>>>> it did not (I'll have to address that; I'm quite surprised this wasn't
>>>> covered by my unit tests - thanks for bringing up that question).
>>>>
>>>> Ticket:
>>>>
>>>> https://bitbucket.org/blais/beancount/issues/167/reductions-without-a-cost-basis-should
>>>>
>>>> Now, with the default booking method (STRICT) If you reduce an existing
>>>> position, you should have to provide the cost basis you want to book
>>>> against. Given the frequency with which those transactions appear to occur,
>>>> explicitly selecting each of the lots to reduce in order to move your 1.0
>>>> BTC to cold storage would be a pain in the butt. I think you'll want
>>>> something easier.
>>>>
>>>> Normally, you can set that account's booking algorithm to something
>>>> else, e.g. "FIFO", which would select the lots for you:
>>>>
>>>> 2013-11-27 open Assets:AU:Coinjar:BTC  BTC  "FIFO"
>>>> ...
>>>> 2014-01-05 * "Deposit Cold storage"
>>>>   Assets:AU:ColdStorage:BTC                     1.0 BTC
>>>>   Assets:AU:Coinjar:BTC                        -1.0 BTC {}
>>>>
>>>>
>>>> But this appears to trigger another bug!
>>>> Congratulations, you've found two at once (finding one is reasonably
>>>> rare these days).
>>>>
>>>> Tickets:
>>>>
>>>> https://bitbucket.org/blais/beancount/issues/168/fifo-without-a-cost-currency-appears-to
>>>>
>>>>
>>>> I'm going to fix those, but in any case, you shouldn't be able to
>>>> reduce an inventory with lots with -1.0 BTC.
>>>> Either you'll have to select the lots explicltly, or let one of the
>>>> automatic booking methods do it for you.
>>>> In any case, you should probably never mix operations at cost (with
>>>> {...}) with those not at cost (without {...}) on a single account.
>>>>
>>>> In the meantime, you can disable the booking algorithm by setting the
>>>> method to "NONE":
>>>>
>>>> 2013-11-27 open Assets:AU:Coinjar:BTC  BTC  "NONE"
>>>> ...
>>>> 2014-01-05 * "Deposit Cold storage"
>>>>   Assets:AU:ColdStorage:BTC                     1.0 BTC
>>>>   Assets:AU:Coinjar:BTC                        -1.0 BTC
>>>>
>>>> This effectively replicates the Ledger model. The resulting inventory
>>>> will have all the transactions in it, and you can sum up the resulting
>>>> number of UNITS() or COST() and these numbers will be correct. However, the
>>>> detailed contents of the inventory will appear messy. But it works.
>>>>
>>>> I think the way forward is for me to fix the two bugs and for you to
>>>> use the FIFO method thereafter.
>>>>
>>>> Or... it's also possible that you're not attempting to track cost basis.
>>>> If that's the case you can just use price conversions (with @ ...).
>>>> If you used price conversions, there are no lots (well, just a single
>>>> lot with no cost basis).
>>>>
>>>> I hope this helps,
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Mon, Jun 12, 2017 at 12:48 AM, <[email protected]> wrote:
>>>>
>>>>> Hi there,
>>>>>
>>>>> I'm new to beancount and I'm trying to use it to bring sanity to some
>>>>> old Bitcoin transactions.
>>>>>
>>>>> I start off making the odd purchase of BTC in Australian dollars using
>>>>> the Coinjar service with one beancount account for BTC and one for AUD.
>>>>>
>>>>> However, once I move 1.0 BTC out of my Coinjar BTC account into a
>>>>> paper wallet, subsequent purchases throw an error in bean-check:
>>>>>
>>>>> No position matches "Posting(account='Assets:AU:Coinjar:BTC',
>>>>> units=0.162288 BTC,
>>>>> cost=CostSpec(number_per=Decimal('924.2827565808932268559597752'),
>>>>> number_total=None, currency='AUD', date=None, label=None, merge=False),
>>>>> price=None, flag=None, meta={'lineno': 24, 'filename':
>>>>> '/home/dave/fin/accounts/bitcoin-test.beancount'})" against balance (-1.0
>>>>> BTC, 0.230398 BTC {651.0473181190808947994340229 AUD, 2013-12-19}, 
>>>>> 0.673358
>>>>> BTC {742.5470552068884605217432629 AUD, 2013-12-17}, 0.149156 BTC
>>>>> {1005.658505189197886776261096 AUD, 2013-12-10}, 0.14161 BTC
>>>>> {1059.247228303085940258456324 AUD, 2013-11-27}, 0.118776 BTC
>>>>> {1262.881390179834309961608406 AUD, 2013-11-29})
>>>>>
>>>>> But of course no existing position matches; this is a new lot I'm
>>>>> purchasing. Here's a simple sample file to reproduce. Could someone 
>>>>> perhaps
>>>>> clarify where I've gone wrong? Thanks for your time; I've read the
>>>>> documentation on booking trades several times but I'm afraid I can't make
>>>>> sense of this error.
>>>>>
>>>>>
>>>>> 2013-11-27 open Assets:AU:Coinjar:BTC  BTC
>>>>> 2013-11-27 open Assets:AU:Coinjar:Cash AUD
>>>>> 2013-11-27 open Assets:AU:ColdStorage:BTC BTC
>>>>>
>>>>>
>>>>> 2013-11-27 * "Buy BTC"
>>>>>   Assets:AU:Coinjar:BTC                         0.14161 BTC
>>>>> {1059.247228303085940258456324 AUD}
>>>>>   Assets:AU:Coinjar:Cash                     -150.00 AUD
>>>>> 2013-11-29 * "Buy BTC"
>>>>>   Assets:AU:Coinjar:BTC                         0.118776 BTC
>>>>> {1262.881390179834309961608406 AUD}
>>>>>   Assets:AU:Coinjar:Cash                     -150.00 AUD
>>>>> 2013-12-10 * "Buy BTC"
>>>>>   Assets:AU:Coinjar:BTC                         0.149156 BTC
>>>>> {1005.658505189197886776261096 AUD}
>>>>>   Assets:AU:Coinjar:Cash                     -150.00 AUD
>>>>> 2013-12-17 * "Buy BTC"
>>>>>   Assets:AU:Coinjar:BTC                         0.673358 BTC
>>>>> {742.5470552068884605217432629 AUD}
>>>>>   Assets:AU:Coinjar:Cash                     -500.00 AUD
>>>>> 2013-12-19 * "Buy BTC"
>>>>>   Assets:AU:Coinjar:BTC                         0.230398 BTC
>>>>> {651.0473181190808947994340229 AUD}
>>>>>   Assets:AU:Coinjar:Cash                     -150.00 AUD
>>>>> 2014-01-05 * "Deposit Cold storage"
>>>>>   Assets:AU:ColdStorage:BTC                     1.0 BTC
>>>>>   Assets:AU:Coinjar:BTC                        -1.0 BTC
>>>>> ; The following tx now throws an error though it is syntactically
>>>>> identical to the
>>>>> ; purchases above. Why?
>>>>> 2014-01-28 * "Buy BTC"
>>>>>   Assets:AU:Coinjar:BTC                         0.162288 BTC
>>>>> {924.2827565808932268559597752 AUD}
>>>>>   Assets:AU:Coinjar:Cash                     -150.00 AUD
>>>>>
>>>>> --
>>>>> 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 [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/beancount/2beb84b0-8f10-4c40-b6d5-abfa2b77cda5%40googlegroups.com
>>>>> <https://groups.google.com/d/msgid/beancount/2beb84b0-8f10-4c40-b6d5-abfa2b77cda5%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>>
>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "Beancount" group.
>>> To unsubscribe from this topic, visit
>>> https://groups.google.com/d/topic/beancount/Qvbcq-Sk5NY/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to
>>> [email protected].
>>> To post to this group, send email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/beancount/CAK21%2BhOkq9PG746Ru2X-VQaZ9BRRTDgm%2B5Z0h2Z2UvLH_nbGbQ%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/beancount/CAK21%2BhOkq9PG746Ru2X-VQaZ9BRRTDgm%2B5Z0h2Z2UvLH_nbGbQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>> --
>> 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 [email protected].
>> To post to this group, send email to [email protected].
>>
> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/beancount/CAHkYY6X5h%2Bo-sVad2QirragiTG_wJEMnbyYDYZ_TbvhPg6n1ug%40mail.gmail.com
>> <https://groups.google.com/d/msgid/beancount/CAHkYY6X5h%2Bo-sVad2QirragiTG_wJEMnbyYDYZ_TbvhPg6n1ug%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>
>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> --
> Best regards,
> Daniël Bos
>
>
> Your government is reading your email. Slow them down with encryption.
>
> My public key: http://goo.gl/gms497 (4096 bit RSA, id EF2D5D91)
> Fingerprint  : D8D0 9FBE F075 F709 7B52  2F73 326C 2123 EF2D 5D91
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "Beancount" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/beancount/Qvbcq-Sk5NY/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/beancount/CADPdpKbmhTYm_GWriJwZxaGYGYHP2AZT%2BrPH96fQnES37sk1hg%40mail.gmail.com
> <https://groups.google.com/d/msgid/beancount/CADPdpKbmhTYm_GWriJwZxaGYGYHP2AZT%2BrPH96fQnES37sk1hg%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/CAHkYY6WCOxLm-KqNLvusOBidzry%2B70z4YE-wbbg7d%3Du72JqejA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to