The Finman package provides a robust, extensible framework for modeling personal and group financial systems using hierarchical accounts. Built with R6, it supports object-oriented definitions for accounts at multiple levels — from general-purpose wallets to specialized savings and debt accounts — with flexible rules for allocation, due tracking, and status management.
📦 Overview
Finman provides a robust object-oriented structure (via R6) for managing a hierarchy of financial accounts
🔧 What It Does
📁 Hierarchical Account Structure:
MainAccount:
Root account that holds and distributes funds.
ChildAccount:
Intermediate accounts with customizable allocation and prioritization.
GrandchildAccount:
Specialized accounts for fixed dues (e.g., rent, internet) with due dates and periods.
🔄 Automatic Allocation & Balancing:
Deposits flow down through the account hierarchy based on allocation percentages and account status.
Fully funded accounts become inactive, allowing surplus to remain or be redirected.
🔒 Concurrency-Safe Modifications:
Built-in file locking to avoid race conditions when working in shared or API environments.
📈 Stateful Tracking:
Balances, dues, fixed amounts, priorities, and transaction history are persistently stored per user.
🧱 Composable Architecture:
The package is designed to power the backend of a broader financial management system including REST APIs (via Plumber) and dashboards (Shiny/React).
🛠️ Installation
# Install devtools if not already installed
install.packages("devtools")
# Install the package from GitHub
devtools::install_github("statisticsguru1/personal-finance-manager/finman")
🚀 Getting Started
library(finman)
main <- MainAccount$new(name = "Wallet")
child <- ChildAccount$new(name = "Goals", allocation = 0.5)
main$add_child(child)
main$deposit(1000)
main$get_balance() # 1000
child$get_balance() # 500 (50% allocation)
📚 Documentation
Visit the full documentation site at:
➡️ https://statisticsguru1.github.io/personal-finance-manager/
Developer Notes
Modular R6 class definitions allow you to extend or override behavior.
All logic is pure R and does not depend on external DBs or systems.
🔒 License
This software is licensed on a MIT basis.
You may not: - Copy, redistribute, or modify the code - Use it in public or commercial settings
You may: - View and study the code for learning or inspection
📧 To request licensing or use permissions, contact:
mutindafestus27@gmail.com
🤝 Contributing
This package is not currently accepting public contributions. For private collaboration inquiries, contact the author.