{"id":19367165,"url":"https://github.com/abailly/budget","last_synced_at":"2026-01-31T08:32:28.143Z","repository":{"id":66589802,"uuid":"258225752","full_name":"abailly/budget","owner":"abailly","description":"USAA download based interfaces for spreadsheet ","archived":false,"fork":false,"pushed_at":"2020-04-23T14:08:20.000Z","size":12866,"stargazers_count":0,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-27T00:13:57.748Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"andreachiou/budget","license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/abailly.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-23T14:06:23.000Z","updated_at":"2020-04-23T14:06:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"f5ba5e83-c6a6-4cb8-bbe5-2638cc924a9f","html_url":"https://github.com/abailly/budget","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/abailly/budget","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abailly%2Fbudget","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abailly%2Fbudget/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abailly%2Fbudget/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abailly%2Fbudget/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abailly","download_url":"https://codeload.github.com/abailly/budget/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abailly%2Fbudget/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28935403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T07:49:44.436Z","status":"ssl_error","status_checked_at":"2026-01-31T07:49:34.274Z","response_time":128,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T07:48:24.032Z","updated_at":"2026-01-31T08:32:28.117Z","avatar_url":"https://github.com/abailly.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# budget\n\n## to do\n\n- [X] total all categories at the bottom of the report \"TOTAL         : 4807.00\"\n- [X] filter on one or several categories: `budget \u003cCSVFILE\u003e \u003cCATEGORIES-FILE\u003e` and total these categories\n- [X] display the name of the csv file the report is made on, and the name of the categories selection file\n- [X] include a header : REPORT from YYYY/MM/DD to YYYY/MM/DD and footer : TOTAL from YYYY/MM/DD to YYYY/MM/DD\n- [X] display each categories average amount, which is total (per category) / number of months of the period\n- [X] rename budget-exe to budget\n- [X] change `budget \u003cCSVFILE\u003e [CATEGORIES-SELECTION-FILE]` into  budget summary `\u003cCSVFILE\u003e [CATEGORIES-SELECTION-FILE]`\n- [X] add a help command\n- [X] have the budget app find its main CSV file in `~/.budget/budget_conf` containing `TRANSACTIONS:file/path/to/transactions.CSV` \n- [X] add a qualifier for specific parameters in the command  like `-t` for transaction file `-c` for category selection file `-p` for period, e.g. `budget summary -c MyCategories.csv -t MySpecificTransaction.csv`\n- [X] add a command `budget import \u003cDOWNLOADED-CSVFILE-FOLDER\u003e` that adds all the new transactions files from that folder to the transaction csv file, checking for format and duplicates\n- [X] add a command `budget details [-p MM/DD/YYYY MM/DD/YYYY] [-m YYYY MM] [-c CATEGORY]` that shows all the transactions for a given months or a given category (or for all months or for all categories)\n- [X] strip the spaces from the labels name and notes from import files\n- [X] sorting options!\n- [X] update Help\n- [X] show the file path of the transaction file that was just displayed by detail \n- [X] import all the csv files in a directory, to account names defined by the alphabetical part of the file name\n- [X] add sorting criteria for summary\n- [X] add period selection for summary\n- [X] bug if an imported file's contains a field in quotes followed by a space bad things happen\n- [X] bug if a file contains a date with space and year on 2 digits, bad things happen\n- [X] bug if a file contains more than 7 fields bad things happen\n- [X] bug if an import file contains already an Account in first field (hence not equal to \"posted\") import this file nonetheless, but keep the existing account name \n- [X] select summary and detail expense for a year\n- [X] with detail, if the category has a CSV suffix, then filter on the categories in the file given as arg \n- [ ] after importing a file, tell how many transactions were imported, and list the transactions that were rejected because they are duplicates (on the Date, Amount, Name criteria)\n- [ ] do not reject the whole file when a file to be imported contains transactions already imported and some that are not yet imported\n- [ ] clarify the examples in the tests (e.g import)\n\n## how to run the tests\n\nfrom the budget repository directory\n\n    cd haskell/budget ⏎\n    stack test ⏎\n\n## how to install the executable\n\nfrom the budget repository directory\n\n    cd haskell ⏎\n    stack build ⏎\n    stack install ⏎\n    \n    Copied executables to /Users/\u003cyou\u003e/.local/bin:\n    - budget-exe\n\n(make sure that your path contains `$HOME/.local/bin` or `/Users/\u003cyou\u003e/.local/bin`)\n\n## how to make the main transactions file permanent\n\nlet's say the main transaction csv file, called `Transactions.csv` resides in a folder `Documents/MyData/Budget` on your personnal folder.\n\nedit the file `~/.budget_conf` (on your home directory) to contain (here `you` is your user name; to know your user name, type `whoami`):\n\n    transactions:/Users/you/Documents/MyData/Budget/Transactions.csv\n\nthen the command `budget summary` will display a summary report of these transactions.\n\n## usage\n\n### Summary\n\n    budget summary \n\nor \n    budget sum\n\nor \n    budget s\n\nwill print the total by category for all the transactions in the main transactions csv file.\n\n    budget summary -t OtherTransactions.csv\n\nwill print the total by category for all the transactions in the alternative file `OtherTransactions.csv`.\n\n\n    budget summary -c Categories.csv\n\nwill print the total by category for categories given in the selection file `Categories.csv` only.\n\n### Detail\n\n    budget detail\n\nor\n    budget d\n\nwill print the transactions in the main transactions file.\n\n    budget d -t OtherTransactions.csv\n\nwill print the transactions in the alternative file `OtherTransactions.csv`.\n\n    budget d -c \"Business Expenses\"\n\nwill print the transactions having the category *Business Expenses*.\n\n    budget d -p 01/01/2020 03/31/2020\n\nwill print the transactions having their date between the January 1st 2020 and the March 31st 2020.\n\n    budget d -m 2020 4\n\nwill print the transactions having their date in April 2020. \n\n    budget d -y 2020 \n\nwill print the transactions having their date in 2020. \n\n    budget d -s AD\n\nwill print the transactions sorted by Account, then Date\n\n    budget d -s Cm\n\nwill print the transactions sorted by Category (ascending) then Amount (descending) \n\nSort criteria (they can all be mixed) :\n\n- A : Account (asc)\n- a : Account (desc)\n- C : Category (asc)\n- c : Category (desc)\n- D : Date (asc)\n- d : Date (desc)\n- M : Amount (asc)\n- m : Amount (desc)\n- N : Name (asc)\n- n : Name (desc)\n- O : Note (asc)\n- o : Note (desc)\n\n### Import\n\n    budget import MyTransactions.csv Checking\n\nwill import the transactions from the file `MyTransactions.csv` into the main transactions file, assigning *Checking* as the Account for these transactions. If the transactions have already been imported (based on the same Name, Date, and Amount) the import will be cancelled. Any transaction with a status different from \"posted\" will not be imported.\n\n\n## File Format\n\n### Transactions\n\nComma separated values file, without header.\n\n| column | information | used | format | comment |\n| :--    | :--         | :--  | :--    | :--     |\n| 0  |  Status/Account |  | string | should always be \"posted\" in bank files, replaced with account when importing transactions, do not import transactions that are \"pending\" |\n| 1 |  ??? |     | | |\n| 2 |  Date | yes |     | MM/DD/YYYY |\n| 3 |  Notes |   |S42 | |\n| 4 |  Name |    | | |\n| 5 |  Category | yes       | string | |\n| 6 |  Amount | yes        | --999999.99 | (yes, possibly double negative) |\n\n### Category\n\nComma separated values file, without header.\n\nShould contain one category per line, no quotes:\n\n    Groceries\n    Small Expenses\n    Transfers\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabailly%2Fbudget","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabailly%2Fbudget","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabailly%2Fbudget/lists"}