Skip to contents

R-CMD-checkcodecov Lifecycle: experimental License: Proprietary Last CommitGitHub Sponsors

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:


👤 Author

Festus Nzuma
📬 GitHub Profile
📧


🤝 Contributing

This package is not currently accepting public contributions. For private collaboration inquiries, contact the author.


📁 Repository Structure

personal-finance-manager/
├── finman/           # R package logic
├── api/              # REST API endpoints (plumber)
├── tests/            # Unit tests
├── shinyapp/         # (future) Shiny frontend
├── reactapp/         # (future) React mobile frontend
├── .github/          # CI workflows
├── README.md
└── LICENSE

🏁 Roadmap


💖 Sponsors

Support my work through GitHub Sponsors!

GitHub Sponsors