Skip to contents

๐Ÿ“Š Income Allocation Strategies

This vignette demonstrates how finman lets you build customized budgeting trees using real-world strategies โ€” from 50/30/20, to handling high debt or low income. The system supports:

  • Tiered budgeting (e.g., Needs โ†’ Rent, Food).
  • Flexible allocation percentages.
  • Passive vs.ย greedy allocation flows.

๐Ÿ“ Strategy 1: Standard 50/30/20 Budget

This strategy breaks income into:

  • 50% Needs โ€“ Rent, Food, Utilities.
  • 30% Savings/Wants โ€“ Emergency Fund, Hobbies.
  • 20% Debt โ€“ Loan payments, Credit cards.
main <- MainAccount$new("Main")

needs <- ChildAccount$new("Needs", allocation = 0.5)
savings <- ChildAccount$new("Savings", allocation = 0.3)
debt <- ChildAccount$new("Debt", allocation = 0.2)

main$add_child_account(needs)
main$add_child_account(savings)
main$add_child_account(debt)

# Tier 3 accounts under Needs
needs$add_child_account(GrandchildAccount$new("Rent", fixed_amount = 8000, freq = 30, due_date = Sys.Date() + 7))
needs$add_child_account(GrandchildAccount$new("Food", fixed_amount = 3000, freq = 30, due_date = Sys.Date() + 7))

# Under Savings
savings$add_child_account(GrandchildAccount$new("Emergency Fund", fixed_amount = 5000, freq = 30, due_date = Sys.Date() + 7))

# Under Debt
debt$add_child_account(GrandchildAccount$new("Student Loan", fixed_amount = 6000, freq = 30, due_date = Sys.Date() + 7))

# Fund the budget
main$deposit(30000, channel = "ABSA")
#> Withdrew: 15000 via Allocation to Needs - Transaction ID: sys2
#> No active child accounts available.
#> Deposited: 15000 via Allocation from Main - Transaction ID: sys1 
#> Withdrew: 9000 via Allocation to Savings - Transaction ID: sys3
#> No active child accounts available.
#> Deposited: 9000 via Allocation from Main - Transaction ID: sys1 
#> Withdrew: 6000 via Allocation to Debt - Transaction ID: sys4
#> No active child accounts available.
#> Deposited: 6000 via Allocation from Main - Transaction ID: sys1 
#> Deposited: 30000 via ABSA - Transaction ID: sys1

โš ๏ธ Strategy 2: Debt-Heavy Budget

Users with overwhelming debt might prioritize repayment:

  • Allocate 40โ€“60% to Debt.
  • Reduce Wants or Savings.
  • Pay off defaulted or overdue loans first.
main <- MainAccount$new("Main")

debt_recovery <- ChildAccount$new("Debt Recovery", allocation = 0.5)
needs <- ChildAccount$new("Needs", allocation = 0.4)
savings <- ChildAccount$new("Savings", allocation = 0.1)

main$add_child_account(debt_recovery)
main$add_child_account(needs)
main$add_child_account(savings)

debt_recovery$add_child_account(GrandchildAccount$new("Defaulted Loan", fixed_amount = 15000, freq = 30, due_date = Sys.Date()))
debt_recovery$add_child_account(GrandchildAccount$new("Overdue Credit", fixed_amount = 12000, freq = 30, due_date = Sys.Date()))

๐Ÿ’ผ Strategy 3: High-Income, Low-Need

With more disposable income:

  • Reduce Needs to 30%.
  • Boost long-term savings or projects.
  • Automatically fund goals like Retirement or Land.
main <- MainAccount$new("Main")

main$add_child_account(ChildAccount$new("Needs", allocation = 0.3))
main$add_child_account(ChildAccount$new("Savings", allocation = 0.5))
main$add_child_account(ChildAccount$new("Wants", allocation = 0.2))

# Add savings targets
main$child_accounts$Savings$add_child_account(GrandchildAccount$new("Retirement", fixed_amount = 8000, freq = 30, due_date = Sys.Date() + 30))
main$child_accounts$Savings$add_child_account(GrandchildAccount$new("Land Purchase", fixed_amount = 10000, freq = 60, due_date = Sys.Date() + 60))

๐Ÿ“‰ Strategy 4: Low Income, High Obligation

  • Focus all allocation on critical expenses.
  • Postpone savings and wants.
  • Let optional accounts deactivate automatically.
main <- MainAccount$new("Main")

needs <- ChildAccount$new("Needs", allocation = 0.9)
savings <- ChildAccount$new("Savings", allocation = 0.1)
wants <- ChildAccount$new("Wants", allocation = 0.0)

main$add_child_account(needs)
main$add_child_account(savings)
main$add_child_account(wants)

needs$add_child_account(GrandchildAccount$new("Rent", fixed_amount = 7000, freq = 30, due_date = Sys.Date() + 5))
needs$add_child_account(GrandchildAccount$new("Food", fixed_amount = 3000, freq = 30, due_date = Sys.Date() + 5))

๐Ÿง  Summary

Strategy Description
50/30/20 Balanced budgeting: Needs, Savings, Debt
Debt-First Prioritize loan repayments and overdue liabilities
High-Income Maximize structured savings and passive investments
Low-Income Focus on essentials; disable non-critical spending

๐Ÿงน You can freely design any hierarchy with flexible allocation totals. Add/remove groups or goals as your finances evolve.


๐Ÿ’– Sponsors

Support my work through GitHub Sponsors!

GitHub Sponsors