budget for 2026

This commit is contained in:
Roger Oriol
2025-12-28 18:29:38 +01:00
parent a45cdbd013
commit b83e80466c
2 changed files with 71 additions and 31 deletions

View File

@@ -26,19 +26,26 @@ class bcolors:
def get_budget_entries(entries, period, start_date): def get_budget_entries(entries, period, start_date):
budgets = [] budgets = []
seen_accounts = set() seen_accounts = {}
for entry in entries: for entry in entries:
if isinstance(entry, Custom) and entry.values[1].value == period \ if isinstance(entry, Custom) and entry.values[1].value == period \
and entry.date <= date.fromisoformat(start_date): and entry.date <= date.fromisoformat(start_date):
account = entry.values[0].value account = entry.values[0].value
if account not in seen_accounts: if account not in seen_accounts:
seen_accounts.add(account) seen_accounts[account] = len(budgets)
budgets.append({ budgets.append({
"date": entry.date, "date": entry.date,
"account": account, "account": account,
"period": entry.values[1].value, "period": entry.values[1].value,
"budget": entry.values[2].value "budget": entry.values[2].value
}) })
else:
budgets[seen_accounts[account]] = {
"date": entry.date,
"account": account,
"period": entry.values[1].value,
"budget": entry.values[2].value
}
return budgets return budgets
@@ -82,17 +89,18 @@ def build_budget(budget_entries, expenses, equity_amounts, total_positive_expens
total_perc = 0 total_perc = 0
remaining = entry["budget"] remaining = entry["budget"]
if entry["account"] in expenses: if entry["account"] in expenses:
if expenses[entry["account"]].get_only_position() is not None:
expense = expenses[entry["account"]].get_only_position().units expense = expenses[entry["account"]].get_only_position().units
# Apply equity deductions for specific accounts # Apply equity deductions for specific accounts
if entry["account"] == "Expenses:Lloguer" and "Equity:LloguerMiquel" in equity_amounts: # if entry["account"] == "Expenses:Lloguer" and "Equity:LloguerMiquel" in equity_amounts:
equity_amount = equity_amounts["Equity:LloguerMiquel"].get_only_position( # equity_amount = equity_amounts["Equity:LloguerMiquel"].get_only_position(
) # )
expense = sub(expense, equity_amount.units) # expense = sub(expense, equity_amount.units)
elif entry["account"] == "Expenses:FacturesUtilitats" and "Equity:FacturesUtilitatsMiquel" in equity_amounts: # elif entry["account"] == "Expenses:FacturesUtilitats" and "Equity:FacturesUtilitatsMiquel" in equity_amounts:
equity_amount = equity_amounts["Equity:FacturesUtilitatsMiquel"].get_only_position( # equity_amount = equity_amounts["Equity:FacturesUtilitatsMiquel"].get_only_position(
) # )
expense = sub(expense, equity_amount.units) # expense = sub(expense, equity_amount.units)
expense_perc = (expense.number / expense_perc = (expense.number /
entry["budget"].number) * 100 entry["budget"].number) * 100
@@ -161,6 +169,7 @@ def main():
Decimal(0), budget_entries[0]["budget"].currency) Decimal(0), budget_entries[0]["budget"].currency)
for entry in budget_entries: for entry in budget_entries:
if entry["account"] in expenses: if entry["account"] in expenses:
if expenses[entry["account"]].get_only_position() is not None:
expense = expenses[entry["account"]].get_only_position().units expense = expenses[entry["account"]].get_only_position().units
# Apply equity deductions for specific accounts (same logic as in build_budget) # Apply equity deductions for specific accounts (same logic as in build_budget)

View File

@@ -1,3 +1,34 @@
;; BUDGET 2026
;; Monthly: 3097.00 EUR
;; Yearly: 7699.65 EUR
;; Total Yearly Run: 44863.65 EUR
;; Total Yearly Net Income: 44868 EUR
2026-01-01 custom "budget" Expenses:Lloguer "monthly" 625.00 EUR
2026-01-01 custom "budget" Expenses:FacturesUtilitats "monthly" 90.00 EUR
2026-01-01 custom "budget" Expenses:Internet "monthly" 50.00 EUR
2026-01-01 custom "budget" Expenses:Gasolina "monthly" 50.00 EUR
2026-01-01 custom "budget" Expenses:Perruqueria "monthly" 17.00 EUR
2026-01-01 custom "budget" Expenses:Supermercat "monthly" 185.00 EUR
2026-01-01 custom "budget" Expenses:Parking "monthly" 100.00 EUR
2026-01-01 custom "budget" Expenses:Mobilitat "monthly" 170.00 EUR
2026-01-01 custom "budget" Expenses:Entreteniment "monthly" 60.00 EUR
2026-01-01 custom "budget" Expenses:MenjarFora "monthly" 300.00 EUR
2026-01-01 custom "budget" Expenses:Altres "monthly" 200.00 EUR
2026-01-01 custom "budget" Liabilities:Credit:Renta4:PolissaCredit "monthly" 1300 EUR
2026-01-01 custom "budget" Expenses:Roba "yearly" 1000 EUR
2026-01-01 custom "budget" Expenses:MantenimentCotxe "yearly" 1200.00 EUR
2026-01-01 custom "budget" Expenses:Educació "yearly" 180.00 EUR
2026-01-01 custom "budget" Expenses:Medic "yearly" 540.00 EUR
2026-01-01 custom "budget" Expenses:Vacances "yearly" 3000.00 EUR
2026-01-01 custom "budget" Expenses:Taxes:ImpostCirculacio "yearly" 66.00 EUR
2026-01-01 custom "budget" Expenses:NintendoOnline "yearly" 35.00 EUR
2026-01-01 custom "budget" Expenses:AmazonPrime "yearly" 50.00 EUR
2026-01-01 custom "budget" Expenses:Insurance:Cotxe "yearly" 660.00 EUR
2026-01-01 custom "budget" Expenses:CarnetJove "yearly" 8.65 EUR
2026-01-01 custom "budget" Expenses:Gimnàs "yearly" 720.00 EUR
2026-01-01 custom "budget" Expenses:MarcaPersonal "yearly" 240.00 EUR
;; BUDGET 2025 ;; BUDGET 2025
;; TOTAL: ;; TOTAL:
;; Monthly: 3027.00 EUR ;; Monthly: 3027.00 EUR