Analyze bank/credit card CSV exports, categorize transactions, compare against budgets, and generate clean markdown reports for Obsidian.
parse_csv.py to normalize raw CSVs into a unified JSON formatcategorize.py to get LLM-ready JSON with suggested categories; review/adjustreport.py to generate a markdown spending reportAll scripts live in scripts/. Budget config and sample data in assets/. See references/csv-formats.md for supported formats and references/categories.md for category customization.
python3 scripts/parse_csv.py <input.csv> [--format chase|boa|generic] [--output transactions.json]
--format is omitted (checks header columns){ "date": "YYYY-MM-DD", "description": str, "amount": float, "type": "debit"|"credit", "original_category": str|null }MM/DD/YYYY, YYYY-MM-DD, MM/DD/YYIf the user's bank isn't auto-detected, check references/csv-formats.md for column mappings and use --format generic with the appropriate flag, or add a new format.
python3 scripts/categorize.py transactions.json [--budget assets/sample-budget.json] [--output categorized.json]
category based on description keyword matchingreferences/categories.md for the keyword-matching logic and how to customizeLLM review step: After running categorize.py, scan the output for anything in "Other" or with low-confidence keywords. Ask the user to confirm or correct those entries before proceeding.
python3 scripts/report.py categorized.json [--budget assets/sample-budget.json] [--output report.md]
--budget is omitted, report shows actuals only (no budget comparison)Budget is defined in a JSON file. See assets/sample-budget.json for a realistic example.
{
"monthly_budgets": {
"Housing": 1800,
"Food & Dining": 600
}
}
"Analyze my Chase export"
→ parse_csv.py chase_export.csv --format chase --output tx.json
→ categorize.py tx.json --output cat.json
→ Review categories, then report.py cat.json --budget assets/sample-budget.json
"Show me my spending for March"
→ Parse and categorize the CSV, then filter by month in report.py (it auto-groups by month)
"I went over budget on dining"
→ Run the full pipeline; report.py flags overage categories with ⚠️
"Add a new bank format"
→ See references/csv-formats.md for the column mapping spec
"Customize categories"
→ See references/categories.md to edit keyword lists or add new categories
Store CSVs and JSON outputs wherever the user prefers. Default working directory is wherever the command is run. Suggest keeping exports in a dedicated folder like ~/finances/exports/.
Reports can be saved directly to the Obsidian vault:
python3 scripts/report.py categorized.json --output ~/path/to/vault/finance/2024-03-budget.md
共 1 个版本