aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 3845713cf930704d3a9b88ae39a381789f6e531e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# CashFlo - Cash Flow Projection & Reconciliation App

A Qt-based cash flow projection application with SQLite backend for managing financial transactions and forecasting future cash flow.

## Features

### Core Functionality
- **Transaction Management**: Add, edit, and delete transactions with date, amount, account, and description
- **Transaction Types**: 
  - **Estimated**: Future projections based on recurring rules
  - **Actual**: Confirmed transactions after reconciliation
- **Recurring Rules**: Define repeating transactions with various schedules:
  - Daily
  - Weekly (specify day of week)
  - Bi-Weekly (every 2 weeks)
  - Monthly (specify day of month)
  - Yearly
- **Projection Generation**: Automatically create estimated future transactions from recurring rules
- **Reconciliation**: Convert estimated transactions to actuals with updated amounts
- **Date Range Filtering**: View transactions within specific date ranges
- **Running Balance**: See projected balance based on selected date range

## Building the Application

### Prerequisites
- Qt 6 (with Widgets and SQL modules)
- C++17 compiler
- SQLite (included with Qt)

### Build Instructions
```bash
cd /home/calvin/CashFlo
qmake6
make
./CashFlo
```

## Usage Guide

### 1. Setting Up Recurring Rules
1. Click the **"Recurring Rules"** tab
2. Click **"Add Recurring Rule"**
3. Enter details:
   - Name (e.g., "Rent", "Salary")
   - Frequency (Daily, Weekly, Monthly, etc.)
   - Start Date
   - Number of occurrences (-1 for indefinite)
   - Amount (negative for expenses, positive for income)
   - Account name
   - Description

**Examples:**
- **Monthly Rent**: Frequency: Monthly, Day: 1, Amount: -2350.00, Occurrences: 12
- **Bi-weekly Salary**: Frequency: Bi-Weekly, Day: Friday (5), Amount: 3500.00
- **Weekly Grocery**: Frequency: Weekly, Day: Saturday (6), Amount: -250.00

### 2. Generating Projections
1. Set your desired date range (From/To dates)
2. Click **"Generate Projection"**
3. The system will create estimated transactions based on your recurring rules
4. View all projected transactions in the Transactions tab
   - Yellow rows = Estimated transactions
   - Green rows = Actual transactions

### 3. Adding Manual Transactions
1. Go to the **"Transactions"** tab
2. Click **"Add Transaction"**
3. Enter date, amount, account, description, and type (Estimated/Actual)

### 4. Reconciliation (Closing the Books)
When an estimated transaction occurs and you want to record the actual amount:
1. Select the estimated transaction in the table
2. Click **"Reconcile (Est → Actual)"**
3. Enter the actual amount (can be different from estimate)
4. The transaction is now marked as "Actual" and the amount is updated

### 5. Viewing Cash Flow
- The **"Projected Balance"** shows the cumulative balance for the selected date range
- Sort transactions by clicking column headers
- Adjust date range to see different projection periods

## Database Schema

### Transactions Table
```sql
id INTEGER PRIMARY KEY
date TEXT (ISO format)
amount REAL (negative=expense, positive=income)
account TEXT
description TEXT
type TEXT ('estimated' or 'actual')
recurring_id INTEGER (links to recurring rule, -1 if manual)
```

### Recurring Rules Table
```sql
id INTEGER PRIMARY KEY
name TEXT
frequency TEXT ('daily', 'weekly', 'biweekly', 'monthly', 'yearly')
start_date TEXT
end_date TEXT (optional)
amount REAL
account TEXT
description TEXT
day_of_week INTEGER (1=Mon, 7=Sun, -1 if not applicable)
day_of_month INTEGER (1-31, -1 if not applicable)
occurrences INTEGER (-1 for indefinite)
```

## Database Location
The SQLite database is stored at:
- Linux: `~/.local/share/CashFlo/cashflow.db`
- Created automatically on first run

## Use Cases

### Example: 3-Month Budget Planning
1. Add recurring rules for:
   - Rent (-$2,350/month on 1st)
   - Salary (+$7,000/month, bi-weekly)
   - Utilities (-$150/month on 15th)
   - Groceries (-$250/week on Saturdays)
2. Set date range: Jan 1 - Mar 31
3. Generate projection
4. View projected balance to see cash flow over 3 months

### Example: Reconciling Actual Expenses
1. At end of month, review estimated transactions
2. Select each estimate (e.g., "Grocery estimated $250")
3. Reconcile with actual amount (e.g., actual was $267.43)
4. Transaction converts to "Actual" with correct amount
5. Projected balance updates to reflect reality

## Tips
- Use negative amounts for expenses (outflows)
- Use positive amounts for income (inflows)
- Generate projections after adding/updating recurring rules
- Reconcile regularly to keep projections accurate
- Use descriptive account names (e.g., "Checking", "Savings", "Credit Card")

## Future Enhancements (Potential)
- Multiple accounts with transfers
- Categories and reporting
- CSV import/export
- Charts and visualizations
- Budget vs actual comparison
- Search and filtering