Red's answer is straight forward and clear so I certainly won't cover any 
duplicate ground.

For tracking recurring and reconciliation I use a (modified) 
beancount_periodic plugin that posts computed transactions for mortgages 
with the flag as '"#" not "*" then to reconcile, in fava I open the 
transaction and change the flag, then I  roll the base month of the 
original computing posting forwards one month. This is simple and low 
effort. The trick is that my plugin computes the postings from metadata and 
balances so there isn't an issue with the recurring transaction 
'hardcoding' anything that is in error.

NOTE I am the lender in this example ...

; set a value for zyx_loan_rate
2025-01-01 event xyz_loan_rate "0.095"
; Compute interested automatically
2025-01-01 # "Interest Charges [MONTHLY]"
bal_acc_loan: "Assets:Loans:Secured:XYZ-CA"
event_int_rate: "xyz_loan_rate"
expr_i: "R(div(mul(gcu(loan,'CAD'),int_rate),12),2)"
;
Income:Loans:Secured:XYZ-CA 0 CAD
expr: "-i"
Assets:Loans:Secured:XYZ-CA 0 CAD expr: "i"

There's another recurring transaction that records the payment by the 
beneficiary and everything tracks itself quite nicely - statements are a 
simple query, etc.

The plugin is a little rough (the computation is done by creating a dict 
context with the noted events and balances referenced in the metadata that 
is passed to an eval) but it works for me.

Alan
On Monday, 27 October 2025 at 17:05:09 UTC+8 [email protected] wrote:

> Hi,
> I don’t use forecasting myself, and there are probably plugins and scripts 
> other uses, but here are some quick answers outside that.
>
> In GNUCash, I could set up recurring transactions using a mortgage
> formula that automatically calculated principal + interest. When you
>
> Here’s the trivial script 
> <https://gist.github.com/redstreet/3bf5b9da37329835297b851e933a1b05> I 
> use. When importing from your bank, manually replace your mortgage 
> transaction with the output of this script. Or automate it if you have 
> fancy importers setup.
>
>
>    - Buy milk from farmer. 
>
> Simplified:
> 2025-03-03 txn "Pay Milk January/February" Assets:Csah -50 EUR 
> Expenses:Groceries:Milk 
>
> Or if expense spreading matters, I use my plugin 
> <https://github.com/redstreet/beancount_reds_plugins/tree/main/beancount_reds_plugins/effective_date#readme>
> :
> 2025-03-03 txn "Pay Milk January/February" Assets:Csah -50 EUR 
> Expenses:Groceries:Milk 25 EUR effective_date: 2025-01-01 
> Expenses:Groceries:Milk 25 EUR effective_date: 2025-02-01 
>
> I have a car that can use LPG or Gasoline (95 or 98). Rigth now I do:
>
> Use metadata:
> 2024-06-01 * "Gasoline" odometer: 66,324 gallons: 11.567 
> Liabilities:Credit-Cards:Credit-Card -50 USD Expenses:Car:Koeninsegg:Fuel 
>
> You can then write a simple plugin to compute fuel efficiency and such. I 
> use it for oil changes as well.
>
>
>    - Net Profit Liabilities and Expenses I have a mortgage on my main 
>    house (it’s my only
>    one and not an investment). 
>
> As far as I can tell, net profit is calculated without accounting for 
> principal
> payments on the mortgage because those are treated as Liabilities, not 
> Expenses. This
> doesn’t make much sense for personal finance tracking. How can I adjust 
> this? Or,
> alternatively, how can I calculate what money I really have available 
> (Income -
> Expenses - Payments on Liabilities)?
>
> Payments are typically booked as such:
> 2025-10-12 * "Mortgage Payment" Assets:Banks: -1000 USD 
> Expenses:House:Mortgage:Interest 800 USD Liabilities:Mortgage 200 USD 
>
> So money flows from Assets:Bank to Liabilities:Mortgage and 
> Expenses:Interest. There’s nothing you should have to do: your net profit 
> and net worth should all compute correctly as expected.
> ​
>
>

-- 
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 view this discussion visit 
https://groups.google.com/d/msgid/beancount/59517c6b-8041-4e4e-8e1c-7a7177c3e80cn%40googlegroups.com.

Reply via email to