Do you think we could compile the scala code to a typescript library as well ?
I'm working with a friend on an react app that will allow us to assign transactions exported from the bank to a list of accounts
That sounds really cool. Especially if you have feedback how handy or not git storage backend is for your use case, that would be interesting to hear.
Hi, Thanks, nice to hear that! I don't have any real customer or usage stories to be shared, but based on OSSRH stats, it is used to some extend. I have private systems which are based on Tackler, but I can not share details about those.
In general, there are several features which makes Tackler really well suited to client-server systems (kind of CQRS setups), imho:
For example the client can update "account" state by sending transactions as single message (txn-file) to server. This transaction will internally be coherent (guaranteed by accounting equation e.g. sum is zero), and it can be delivered to server either as a file/message or as part of git commit. If it's delivered as file/message, then it can be verified by server
string2Txns (https://gitlab.com/e257/accounting/tackler/-/blob/main/core/src/main/scala/fi/e257/tackler/parser/TacklerTxns.scala#L326) before it will be inserted into storage (be it on filesystem or git).
There is possible to generate proof of used (by server) accounting data to the client, and client (system) can run reports by themselves and verify that server has used correct transactions for the report https://tackler.e257.fi/docs/auditing/ and https://gitlab.com/e257/accounting/tackler/blob/main/contrib/txn-set-checksum.sh
Lastly Tackler data model is designed and tested to withstand a lot of transactions (not in VISA scale, but in scale of smaller system), it is routinely tested with integration tests with 100_000 txn sets, and performance tested with 1_000_000 tnx sets. One transaction every minute over year is around 500_000 txns. Or 1000 persons, 10 txns per person per day for one month, that's around 300_000 txns. Git itself will have some problems when there are many objects, but there are workarounds for those problems. If you like to play with git as db, check out this demo/proto: (https://gitlab.com/e257/proto/gitdb)
If you are after personal finances and don't need strong auditing capabilities, then you could be better of with ledger, hledger or beancount. On the other hand, if you have system, which is (semi) autonomously producing transactions, then tackler could be something which is worth of investigation.
Hi @olimination! Maybe, maybe not. =) It depends on what are you actually trying to do? Simplest way is to generate balance report for Income and Expenes accounts and then the delta is income or Profit/Loss. Typically negative delta means that you have gained value (Profit) and positive delta means Loss. This is because Income is represented with negative values when using typical plaintext accounting conventions. (Beancount tutorial about general concept of Income statement and plaintext accounting: https://beancount.github.io/docs/the_double_entry_counting_method.html#income-statement)
The selection of balance report accounts could be selected either by configuration file or by command line arguments, e.g.
--reporting.accounts "Income(:.*)?" "Expenses(:.*)?" for typical account names. More info about account selectors is here: https://tackler.e257.fi/docs/report-balance/#account_selectors
If you would like to have something for closing accounts or books as the year end is approaching, then Equity export could be used for that: https://tackler.e257.fi/docs/export-equity/
Lastly, if you would like to build/extend own report (e.g. PDF report) then JSON output could be perhaps utilised or used directly server API: https://tackler.e257.fi/docs/server-api/#generating_reports
Currently tackler is missing at least these features, which could be usefull in this case: option to invert values (e.g. Income is negative, Expenses are positive numbers, when using plaintext accounting conventions) and a report where you have left and right sides and the delta between those sides (this is the actual income or profit/loss report?).
Hope this helps. Happy accounting and New Year!