upgrade to beancount v3

This commit is contained in:
Roger Oriol
2025-12-29 17:49:19 +01:00
parent b83e80466c
commit 4c149cebb5
5 changed files with 967 additions and 589 deletions

View File

@@ -1,12 +1,11 @@
#!/usr/bin/env python3
from beancount import loader
from beancount.query import query
from beanquery import query
from beancount.parser import printer
import argparse
from tabulate import tabulate
from decimal import Decimal
from beancount.core.amount import Amount, add, sub, mul
from math import floor
from beancount.core.amount import Amount, add, sub
from datetime import datetime, timedelta
@@ -72,7 +71,7 @@ def get_debt_to_assets_ratio(balances, max):
def get_emergency_fund_ratio(balances, expenses, low, mid):
liquid = 0
living_expenses = expenses[0].position.get_only_position(
living_expenses = expenses[0][0].get_only_position(
).units.number / 12
for account, balance in balances.items():
if account.startswith("Assets:Liquid"):
@@ -129,7 +128,7 @@ def get_solvency_ratio(balances, min):
def get_interest_coverage_ratio(net_monthly_income, expenses, debt_payments, mortgage_payments, min):
living_expenses = expenses[0].position.get_only_position().units.number
living_expenses = expenses[0][0].get_only_position().units.number
interest = debt_payments.number + mortgage_payments.number
interest = interest if interest > 0 else 1
result = round((net_monthly_income - living_expenses) / interest, 2)
@@ -265,7 +264,7 @@ def get_balances(entries, options, date):
entries, options, balance_query)
balances = {}
for row in rrows:
balances[row.account] = row.position
balances[row[0]] = row[1]
return balances
@@ -284,7 +283,7 @@ def get_income(entries, options, date):
end_date} WHERE account ~ '^(Income:Work|Income:Savings|Income:Invest)' AND date >= {start_date}"
rtypes, rrows = query.run_query(
entries, options, income_query)
net_monthly_income = rrows[0].position.get_only_position(
net_monthly_income = rrows[0][0].get_only_position(
).units.number * -1
start_date, end_date = get_last_year_timestamps(date)
@@ -292,7 +291,7 @@ def get_income(entries, options, date):
end_date} WHERE account ~ '^(Income:Work|Income:Savings|Income:Invest)' AND date >= {start_date}"
rtypes, rrows = query.run_query(
entries, options, income_query)
net_yearly_income = rrows[0].position.get_only_position(
net_yearly_income = rrows[0][0].get_only_position(
).units.number * -1
return net_monthly_income, net_yearly_income
@@ -308,7 +307,7 @@ def get_debt_payments(entries, options, date):
entries, options, debt_payments_query)
rtypes, rrows_mortgage = query.run_query(
entries, options, mortgage_payments_query)
debt_payments = rrows_debt[0].position.get_only_position().units if len(
debt_payments = rrows_debt[0][0].get_only_position().units if len(
rrows_debt) > 0 else Amount(Decimal(0), "EUR")
mortgage_payments = rrows_mortgage[0].position.get_only_position(
).units if len(rrows_mortgage) > 0 else Amount(Decimal(0), "EUR")
@@ -321,13 +320,13 @@ def get_savings(entries, options, date):
end_date} WHERE account ~ '^Assets:Invest:' AND date >= {start_date}"
rtypes, rrows = query.run_query(
entries, options, investments_query)
result = rrows[0].position.get_only_position().units if len(
result = rrows[0][0].get_only_position().units if len(
rrows) > 0 else Amount(Decimal(0), "EUR")
liabilities_query = f"SELECT convert(sum(position), \"EUR\") as position FROM date <= {
end_date} WHERE account ~ '^Liabilities:Credit:Renta4:' AND date >= {start_date}"
rtypes, rrows = query.run_query(
entries, options, liabilities_query)
liabilities = rrows[0].position.get_only_position().units if len(
liabilities = rrows[0][0].get_only_position().units if len(
rrows) > 0 else Amount(Decimal(0), "EUR")
result = add(result, liabilities)
return result
@@ -345,7 +344,7 @@ def get_assets_pignorats(entries, options, date):
date}) as price"
rtypes, rrows = query.run_query(
entries, options, pignorat_query)
result = result + rrows[0].price * assets_pignorats[curr]
result = result + rrows[0][0] * assets_pignorats[curr]
return result