Code Monkey home page Code Monkey logo

finquick's Introduction

finquick -- family finance tools of a closet librarian

My ideal personal accounting system would

  • support double-entry accounting, with budgeting, reports, and charts
  • have an open architecture with
    • an SQL back-end
    • a flat-file serialization of the data suitable for use with version control
  • integrate with the Web, both
    • allowing access from any machine with a web browser
    • syncing with banking web sites
System Start Stop Double-Entry Open SQL Web UI Bank/Card Sync
Sheetsync 2023- NO Web API NO yes yes
LunchMoney 2021- NO Web API NO yes yes
GnuCash 2010-06 yes yes yes NO some
Mint 2011? 2012-02 NO NO* NO yes yes
Quicken 1990 2010-06 yes NO no no some
EXP BASIC09 1986-09 1987-03 yes yes no no no

Journal: blog items, commits

  • 2023-08: f72e789 * fix(amazonSync)!: use azad since Amazon ended history reports
  • 2023-03: b3bcc51 * feat(GnuCash DB): balanceSheet, incomeStatement queries
  • 2023-03: 2c4757f * feat(sync26): edit Sheetsync txs using a sheet of rules
  • 2023-02: 79787ca * feat(sync26): Load Trade Accounting from CSV attachments
  • 2023-02: 3c800f4 * feat: push GnuCash tx ids, pull Sheetsync categories
  • 2023-02: f8dc9ab * feat: Google Sheets API authentication
  • 2023-02: 659f181 * feat(GnuCash DB): accounts as Sheetsync categories: code, Category, Group, Type
  • 2023-02: f78f1ab * feat: lookup Amazon orders/items for Sheetsync
  • 2023-02: 150c389 * style: Agoric JS style (following AirBnB)
  • 2023-02: 106517f * trade accounting from staketax, osmosis, coinbase via google sheets
  • 2022-11: 4aaa5b4 * sync lunchmoney, GnuCash using vanilla localStorage UI, GET/PATCH back-end
  • 2022-11: 2c8e875 * write lunchmoney transactions in OFX format
  • 2022-10: 0238e9d * sync venmo email receipts, lunchmoney, gnucash via Google Sheets
  • 2022-10: bb3fd06 * move to line-delimited JSON for flat-file serialization
  • 2022-08: 321a09e * watch downloads; fix dates on statements etc.
  • 2022-01: 461c01c * ingest balance sheet report
  • 2021-09: sync with LunchMoney: 86cda00 thru 49e7a75
    • LunchMoney is delightful in a lot of ways, but it's not good enough to replace GnuCash yet. And while syncing between the two seems feasible in theory, I have yet to manage in practice.
  • 2021-10: 6c95342: feat: fetch anchor protocol history
  • 2021-09: 03f4c9d * feat: coinbase card to CSV for lunch money
  • 2021-04: 2f551fe * feat: fetch cosmos account history
  • 2021-03: f8e7a0b * feat(coinbase): fetch accounts and transactions
  • 2021-02: 3c70ba7 * feat(etherscan): download ERC20 transactions to DB
  • 2021-02: 80633bd * style(brcal): agoric js style
  • 2020-11: 120f493 * brcal - budget review calendar sync
  • 2021-01: fbf5194 * unifetch: fetch position, transaction data using uniswap graphql
  • 2020-11: a0642ca * brscript: sync budget review calendar using Google Apps Script
  • 2017-12: College Expense Tracking in BASIC09
  • 2016-2018: Capper Web UI for GnuCash DB
    • 2017-09 40cc1d2 * expose desktop presense, secret service as capper app
    • 2016-12 08f3c7a * simple: offline conversion from JSON to OFX
    • 2016-02: 5dc7ec4 * account balances react to database transactions
    • 2016-01-30 62bb854 * bootstrap style for budget UI
    • 2016-01-17 394abdc * login with username, challenge question, and password page (WebDriver / Nightmare)
    • 2016-01: 5fcde6f * use node.js require.main idiom (a la python's __main__)
    • 2016-01: 1196a44 * budget.js: flow type annotations
  • 2012-05: 2678623 * OFX to ElementTree works in 1 case
  • 2012-04: a1b1e41 * toward web app access to gnucash db: pyramid alchemy scaffold
    • GnuCash 2.4.10 supports SQL
  • 2009-05: Expense reporting with Android, GnuCash, and IRS.gov
  • 2006-03: Getting my Personal Finance data back with hCalendar and hCard
    • trxht -- format personal finance transactions as hCalendar

finquick's People

Contributors

dckc avatar dependabot[bot] avatar fitzgen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

finquick's Issues

README missing current work: sync uniswap, coinbase, cosmos, lunch money

I noticed someone starred this repo recently; from that perspective, the README is out of date. My current work is stuff like brcal/src/lmSync.js with Agoric / airbnb js style etc.

hm... retroactively update CHANGELOG? https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-cli

yarn conventional-changelog -r 0 -p angular -s -i CHANGELOG.md

promote brcal/ package to top? or move Capper app down?

transaction sync: Plaid webhook?

web hook works

doesn't actually send transactions. just a notification

hmm... fetch transaction info to browser localStorage? (which dev / project aimed to do that?)

GnuCash assumes exclusive access to DB

so a webhook couldn't do anything without a restart

mmex - maybe?

mmex: pro

  • kinda simple like Quicken; mature (snap installation, ...); held up to quite a bit of trial usage
  • sqlite3 DB
    • TODO: test whether the app allows updates by other clients
  • cryptocurrency support

mmex: cons

  • categorizing a bunch of transactions involves bringing up the Edit Transaction dialog for each one. Keyboard navigation is awkward at best; I think the mouse is required for OK
  • only 2 levels of categories
  • no classes? but I did see custom fields

mintable - so close!

https://github.com/kevinschaich/mintable
kevinschaich/mintable#36

not sure how to do double-entry accounting in a spreadsheet anyway

found via https://github.com/topics/personal-finance

LedgerSMB - overkill

The transaction page looks more like an invoice than a check register item

Moneygo - not there yet

I struggled with basic usage.

drill-down charts / reports

I'm looking at a gnucash income / expect chart and I wonder what's behind one of the bars.

chart.js ?
d3?

use calendar for transaction review?

put Imbalance txs on a calendar; let M accept invitation to signal "my budget" or reply with info about why not. Have a bot send the appointments and hence get the replies. Harvest the replies in bulk and sync with gnucash.

cosmos account history

migrate gnucash db from mysql to sqlite via CSV

Problem

GnuCash is forever saying "cannot save DB" for which the only recourse I can find is restarting the whole app.

managing mysql is a bit of a pain; it seems like overkill by now.

I'd like to take advantage of Litestream to replicate the DB using s3/minio.

When I exported my gnucash mysql DB to sqlite3 (using gnucash from guix), the result was missing some custom slots from lmSync.js.

Design

  • export gnucash column info in CSV
    • using a query on information_schema in dbeaver
  • import mysql TSV export files into sqlite3 by enhancing loadTables.js

TODO:

  • handle strange quoting in .tsv when importing tables for migration 79ca8fd
  • clean up quoting in split_detail
  • migrate split_detail from .tsv to .json 4952dea, bb3fd06
  • clean-up of date columns (slots.timespec_val, splits.reconcile_date)

convert tsv quicken reports to json lines with invisible XML

As noted in the 2006 item, I have years of data in this tab-separated format; for example:

3/28/08	D0962	            S	STAPLES 00108084 ANKENY IA	Canon Powershot SD	Stuff:Major:AV	R	-249.99

I played with invisible XML and its playground and turned that into...

<tx num="S">
   <date month="3" day="28" year="08"/>
   <account>D0962</account>
   <description>STAPLES 00108084 ANKENY IA</description>
   <split status="R">
      <memo>Canon Powershot SD</memo>
      <category>Stuff:Major:AV</category>
      <amount>-249.99</amount>
   </split>
</tx>

using...

tx: date, account, @num, description, split.

split: memo, category, @status, amount.

date: @month, -"/", @day, -"/", @year, tab.
month: ["0"-"9"]+.
day: ["0"-"9"]+.
year: ["0"-"9"]+.

account: field, tab.
num: -space?, field, tab.
description: field, tab.

memo: field, tab.
category: field, tab { TODO: split on : ? }.
status: field, tab.
amount: field { TODO: constrain to number syntax? }.

-field: ~[" "], (~[#9])*. { don't start with space to avoid ambiguity in num }
-tab: -#9.
-space: -[" "]+.

TODO:

  • handle >1 tx
  • handle >1 split
  • write JSON lines instead of XML
  • find a simple implementation, preferably by aggressively pre-compiling
    • perhaps just use this as a spec for a hand-rolled parser

coinbase: scrape transaction history

I downloaded a "complete" transaction report, but the transactions don't add up to the balance. It seems to be missing "transfers".

But I seem to be able to compute the balance using a DOM query:

acs = document.querySelectorAll('*[data-element="AmountContainer"]')
acs.length // 245
ns = [...acs].map(ac => Number(ac.textContent.split(' ')[0].replace('−', '-').replace('+', '').replace(',', '')))
sum = ns => ns.reduce((acc, x) => acc + x, 0)
sum(ns)

To get associated transaction info, I'm starting with...

tis = document.querySelectorAll('*[data-component="TransactionItem"]')

GnuCash + guile actors for personal finance automation?

Looking at the configuration of a report I just saved reminds me that it's in guile.

Usually I'm content to use Guile's SQL support to supplement GnuCash features, but I can't do it while GnuCash is running:

the dbi (SQL) backend which comes with GnuCash 2.4 is currently not designed for true multi-user access. -- GnuCash FAQ

I wonder if the guile interpreter in GnuCash would support some sort of API that I could use while it's running.

cc @cwebber

PWA: Search transactions etc.

How about caching split_detail.json in localStorage?

Compressed should work for search: streaming decompress, split into lines, match.

I thought about weekly html files or uploading quarterly csv files to Google drive, but I'd rather not share with Google.

I've been doing pandas lately, which made me wonder about JS dataframe apis... This ine looks cool...

https://github.com/data-forge/data-forge-ts/blob/master/docs/guide.md#browser-installation-and-setup

But ordinary map / filter should work for this.

copy and paste for finquick

for example, RHOC sale - from explorer. Teach browser to copy transaction(s) to clipboard; then paste and teach finquick to grok / sync.

maybe even account history, rather than scraping or even OFX.

and maybe drag-n-drop for files

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.