Data Entry GUI - Cashier

483 views
Skip to first unread message

Alen Šiljak

unread,
May 12, 2019, 6:26:08 AM5/12/19
to Ledger
After a fairly short time of using Ledger, it is obvious that it is a very powerful system for producing any sort of view of our financial status. It is also fairly obvious that the main point in plain-text accounting is the side that Ledger does not cover - data entry.
This is, yet, the crucial part that user needs to do. And, for fairly simple financial flows, it helps develop some self-discipline with the user.
However, for anything that's a bit more complex or at challenging in terms of number of transactions, a tool to help out would come in handy.
I've seen multiple attempts to solve this and they cover different scenarios more or less well. None of them seems to work (too) well for me so I'm coming out with the following idea.
The data-entry application needs to satisfy the following functional requirements:

- convenient data-entry screen for transactions
- work both on desktop and mobile devices. These are two different scenarios - I enter bank statements on desktop but, when away from a PC, I use the phone.
- load quickly and help me enter the transactions within a couple of seconds. Similar to MMEx for Android is currently doing.
- show me current balances
- export entered transactions as a text file for inclusion in the main book

Non-functional requirements would be:
- run on multiple platforms
- require minimal effort in maintenance
- require minimum infrastructure

The solution, in my view, is to create a Progressive Web Application. Utilize modular approach and convenience of Vue.js. It runs in a web browser. Can be used offline. Can auto-update. Stores the data on a local device.

I am posting here to get some feedback and ideas from you, Ledger users (and also mostly software developers :). Do you find this useful? I also want to share the idea in case others would like to participate.

For this purpose, I've (just) started the project at https://gitlab.com/alensiljak/cashier
The end-result can be seen at https://cashier.alensiljak.ml/.
Note that it is in a *very early* stage (read as of this week) and is still mostly use to prototype concepts and provide blueprints.

My todo list is offline as it is still in the brainstorming/prototype stage but at some point I would dump it into a file or just use the issue tracker for it.

Hope some find this useful.

psionl0

unread,
May 13, 2019, 3:41:43 AM5/13/19
to Ledger
It might seem very 80s to use a text editor for ledger entries - especially since there is a short learning curve involved. However, I find that a big strength. The flexibility of this system is unlimited though you will need to keep past versions of the files you edit if you are using it for an official bookkeeping system.

The biggest problem with more sophisticated bookkeeping systems is that they impose complex and artificial rules on what you may do and it takes longer to learn them. For example, with MYOB, you can't spend money on a customer. You have to receive a negative amount from them. And as for payroll, .... ARRRGH! Xero doesn't have provision for general journal entries so you need a fudge to do so.

No doubt, you can create a GUI entry system that doesn't impose these artificialities but that is low on my list of priorities.

Alen Šiljak

unread,
May 13, 2019, 3:49:55 AM5/13/19
to Ledger
Hi! Thanks for the feedback. It would be useful to also note your most common use-case scenario. I.e. - how many transactions do you normally enter at once, how many accounts do you have (assets, income, and expense "categories"), how many commodities are involved, how many trades vs same-commodity transfers do you make, etc.

This would highlight some user profiles and who a GUI entry app would help. By no means I consider this a silver bullet but my data-entry sessions are unnecessarily long - identifying the full name for the account, making sure it's not the one from another company or currency, entering 10-posting transactions that I have to balance manually, currency conversions, revaluations of the funds, etc.
Another scenario is keeping track while away from a PC. I'm not fond of using a text editor on my phone to enter transactions. If I'm traveling, or am just outside, there's not much time to enter transactions that I'd otherwise forget.

My main goal is to offload as much of that work to machines and spent life time on something more important. To me it is a great benefit if, instead of 1 hour of entering transactions, it would takes 10 minutes per week.

psionl0

unread,
May 13, 2019, 5:26:18 AM5/13/19
to Ledger
I am currently doing trades person level bookkeeping which is admittedly less complex that what you are involved with. Even so, I find that the bookkeeping packages I have mentioned don't save any time with the entries. Even the auto entries can be time consuming since you always have to examine them and correct any errors within (there always is). The standard text editor search/replace and copy/paste functions go a long way to reducing the time spent at the keyboard.

I can see how GUI would work better on a phone and help improve the format of the reports for the screen. However, visual improvement time saving are two different things.

Alen Šiljak

unread,
May 13, 2019, 6:27:11 AM5/13/19
to Ledger


On Monday, 13 May 2019 11:26:18 UTC+2, psionl0 wrote:

I can see how GUI would work better on a phone and help improve the format of the reports for the screen. However, visual improvement time saving are two different things.

Sure. If there is a quick way of entering transactions on the phone, I'm all ears! It would save me a lot of time of reinventing the wheel, then. ;)

I'm currently using MoneyManagerEx and https://gitlab.com/alensiljak/moneymanagerexlib to read them on the PC and export ledger-style format, which I then need to manually merge into the main book, preferably in the date order.

I don't remember the exact issues the date order in ledger file can cause but I see that hledger uses the date order of transactions, not entry order, so that's a way out for any potential issues.

Craig Earls

unread,
May 13, 2019, 9:23:01 AM5/13/19
to ledge...@googlegroups.com
What text editor are you using?  

--

---
You received this message because you are subscribed to the Google Groups "Ledger" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ledger-cli+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ledger-cli/b4e3cc4f-834e-4cec-a20d-e485e527e474%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
Craig, Corona De Tucson, AZ
missile_flyout
enderw88.wordpress.com

Richard Lawrence

unread,
May 13, 2019, 9:23:18 AM5/13/19
to Alen Šiljak, Ledger

Hi Alen and all,

Interesting idea!

Alen Šiljak <alen....@gmx.com> writes:

> Sure. If there is a quick way of entering transactions on the phone, I'm
> all ears! It would save me a lot of time of reinventing the wheel, then. ;)

I too would like a better way to capture transactions on my phone when
I'm on the go.

For me, it's not important to see balances or other reports on the
phone. But it would be really great to have a quick way to enter data
at the moment that I make the transaction, so I don't have to carry the
receipt home (or remember the amount if I don't get a receipt).

Most of my daily transactions are in cash, so it's particularly
important to capture these things before I forget.

I have a separate file that defines my accounts for ledger's --strict
option. It would be great to pass this file to an app so that it could
help me quickly select the right accounts to define the transaction.

The tricky part is then getting that data into a ledger file on my
computer. I would be somewhat reluctant to trust yet another
third-party server for this. It would be great if I could e.g. copy and
paste it from an email (or an IMAP-based "Note", available on iOS) on a
server I already have to trust, or if the app could briefly upload data
to a server I run from my local computer when I want to sync.

--
Best,
Richard

Alen Šiljak

unread,
May 13, 2019, 9:39:00 AM5/13/19
to Ledger
Hi, Richard! Thanks for the feedback. I guess I need to clarify a few points but raising them here is a good opportunity to others to get acquainted with the idea.


On Monday, 13 May 2019 15:23:18 UTC+2, Richard Lawrence wrote:

I too would like a better way to capture transactions on my phone when
I'm on the go.

For the "new transaction", you can currently have a look, if you're an Android user, at the equivalent form in Android MMEx, http://android.moneymanagerex.org/. While being satisfactory at the moment, it's Category-oriented nature, and data schema, are an incompatible anchor to using it more along Ledger-alikes.
But, the point is that the form there, from home screen to completing a transaction, takes me normally a couple of seconds. The most-used Payees are normally on top, typing max. 2 letters finds me the one I'm looking for. Selecting a Payee automatically selects the last-used Category, etc. Quite convenient, with minimum taps on the screen.
I want the same (or better) functionality in Cashier.
 
For me, it's not important to see balances or other reports on the
phone.  But it would be really great to have a quick way to enter data
at the moment that I make the transaction, so I don't have to carry the
receipt home (or remember the amount if I don't get a receipt).

My ideas was to import "bal" and "payees" output from ledger. This would provide: account names, their book balances, and commodities. Plus the names of payees. To me that's enough.
I don't want to rewrite ledger, especially since it can run on Android in Termux, anyway, so all the reports are already available there through Termux shortcuts and widgets. But seeing the current balance (book + entered) is quite a convenience.
 
I have a separate file that defines my accounts for ledger's --strict
option.  It would be great to pass this file to an app so that it could
help me quickly select the right accounts to define the transaction.

The idea with the "payees" output is to be able to search through them and select, like in MMEx. This might also propose the full last transaction contents. We'll see when we get there.
 
The tricky part is then getting that data into a ledger file on my
computer.  I would be somewhat reluctant to trust yet another
third-party server for this.  It would be great if I could e.g. copy and
paste it from an email (or an IMAP-based "Note", available on iOS) on a
server I already have to trust, or if the app could briefly upload data
to a server I run from my local computer when I want to sync.

Ahem, I have no intention of hosting any servers for this, nor would I host my data in such a way. The idea is to use PWA as a set of technologies that allow, as I've mentioned, extremely easy updates, *offline* storage and execution, and export functionality. I have yet to check what the best way would be to share the entries, but a simple file download might suffice for starters. This is intended to be shared and transported somehow to the real ledger book. That's way outside the scope of the app. 
One option would be to export the entries, and have a mobile.ledger file that includes the export file (in Downloads), along with the copy of the real book, and a set of scripts that can run "source" and other verification options using Ledger in Termux.
Oh, I see you're an iOS user. I'm sorry for you. ;)
But, in any case, the goal is to export the transactions text file and then the user somehow merges it with the "real" book.

So, at this stage, it is to be only a quick-entry assistant. Actually, when I think about it, I find it even convenient to use as a regular entry mechanism, just because of the easy of selecting payees (I like when the names match fully, that makes the reporting easier later on), and accounts ("categories"). Auto-assigning commodities should also happen when an account is selected. However, this might be an issue for multi-commodity accounts, which I have never used before but are allowed by Ledger.
One step at a time, anyways.

Alen Šiljak

unread,
May 13, 2019, 9:41:20 AM5/13/19
to Ledger
On Windows and Linux I use Visual Studio Code and Sublime Text. On Android, none really. I found only one that can work with large files and it's a PIA to type any structured text there.
I've often seen references to Vim and Emacs but the only key combination I know how to use there is :q
:)

psionl0

unread,
May 14, 2019, 4:36:19 AM5/14/19
to Ledger


Sure. If there is a quick way of entering transactions on the phone, I'm all ears! It would save me a lot of time of reinventing the wheel, then. ;) 

I'm not sure how that is a response to my support for GUI on a mobile phone. Mind you, these are horrible devices for entering as much data as you want to enter - whether by text or GUI forms. I can barely see what I am entering - especially when half the screen gets taken up by a keyboard. 

I don't remember the exact issues the date order in ledger file can cause but I see that hledger uses the date order of transactions, not entry order, so that's a way out for any potential issues.

ledger-cli has a "--sort date" which will list your selected transactions in date order.

psionl0

unread,
May 14, 2019, 4:39:56 AM5/14/19
to Ledger
On Monday, May 13, 2019 at 9:23:01 PM UTC+8, Craig Earls wrote:
What text editor are you using?  

I just use Leafpad on Linux or Notepad on Windows. These are crude editors but it shows how versatile ledger-cli is.

I sometimes use Geany if I want to change the encodings between Linux and Windows. I could probably set it up to generate reports as well though a few script (batch) files does just as well for me. 

Alen Šiljak

unread,
May 14, 2019, 6:43:29 AM5/14/19
to Ledger
Perhaps I'm repeating myself here but have a look at http://android.moneymanagerex.org/, for example. Normally, it takes me 2-3 seconds to enter a transaction after I leave the store. Not so horrible, in my opinion.

Alen Šiljak

unread,
May 14, 2019, 6:49:44 AM5/14/19
to Ledger
I believe there's a confusion here as to who said what due to the chaining (I'm using the web interface at groups.google.com). :)
In this case, I was arguing that this *is* a time-saving, not (just) a visual improvement. As a matter of fact, I was not even thinking about providing some graphical reports as a part of this exercise.
Here I'm mostly focusing on transaction entering. At least as the first step. You'll see what I mean when some basic search functionality is added. My current blueprint is what MMEX 4 Android does in transaction entry, since that's my current experience.
Sorry if there's any confusion.

On Tuesday, 14 May 2019 10:36:19 UTC+2, psionl0 wrote:

Alen Šiljak

unread,
May 14, 2019, 6:53:25 AM5/14/19
to Ledger
Thanks to Simon, who reminded me of hledger-web and hledger-api projects.
That opens up an interesting avenue for data communication to your main book. With a service like ngrok, one can start the API server on your machine, open up the tunnel, and connect to it from a PWA app like Cashier.
Then the data could be transferred either way.
From the server to the mobile: read accounts, balances, payees.
From the mobile to the server: send created transactions.

psionl0

unread,
May 21, 2019, 3:09:40 AM5/21/19
to Ledger
On Tuesday, May 14, 2019 at 6:43:29 PM UTC+8, Alen Šiljak wrote:
Perhaps I'm repeating myself here but have a look at http://android.moneymanagerex.org/, for example. Normally, it takes me 2-3 seconds to enter a transaction after I leave the store. Not so horrible, in my opinion.

Come on! 2-3 seconds? It took at least that long for the simulation to respond to a button-click. And that was with a razor sharp mouse pointer. With my fat fingers? No way.

If all you are entering is "Pay business store $100 from checking account" then yes, entries can be made quite quickly. But if you have to break down that payment into half a dozen different accounts then you will be spending more that 2-3 seconds to do so. For a mobile phone, a GUI is an advantage because you can use a pull-down menu (I assume) to select your accounts and this is much easier than trying to key in account names without errors.

Alen Šiljak

unread,
May 21, 2019, 3:28:15 AM5/21/19
to Ledger
Hi,


On Tuesday, 21 May 2019 09:09:40 UTC+2, psionl0 wrote:
On Tuesday, May 14, 2019 at 6:43:29 PM UTC+8, Alen Šiljak wrote:
Perhaps I'm repeating myself here but have a look at http://android.moneymanagerex.org/, for example. Normally, it takes me 2-3 seconds to enter a transaction after I leave the store. Not so horrible, in my opinion.

Come on! 2-3 seconds? It took at least that long for the simulation to respond to a button-click. And that was with a razor sharp mouse pointer. With my fat fingers? No way.

I'm not sure which simulation you tried. The actual app on the phone works quite well. See below.
 
If all you are entering is "Pay business store $100 from checking account" then yes, entries can be made quite quickly.

Most of my transactions, when outside, are like that. There is a widget that opens the New Transaction screen. Finding the Payee by typing the first 2-3 characters is fairly quick. Add the fact that the app will auto-populate the last used category, which is correct in 90+% of the cases and all that's left is to enter the amount and tap Save.
 
But if you have to break down that payment into half a dozen different accounts then you will be spending more that 2-3 seconds to do so. For a mobile phone, a GUI is an advantage because you can use a pull-down menu (I assume) to select your accounts and this is much easier than trying to key in account names without errors.

Absolutely. That's the idea. If you have time, Cashier is approximately at a demo state. You can try it out. Any suggestions for usability improvements are welcome. The point is to have a simple and accessible GUI for creating transaction records.

Alen Šiljak

unread,
May 22, 2019, 9:06:52 AM5/22/19
to Ledger
Cashier is now entering Alpha state. The basic functionality has been implemented, including the account creation, transaction entry, and export.
I'm going to actively use it for data entry as of today.

The Alpha status comes from the fact that I'm not doing database data migrations if the schema changes. Considering I'm the only user, it is currently easier to wipe the storage on the device.
As the solution for the worst-case, one can always export the journal file via download or copy/paste via clipboard to another location before wiping the storage.

The development will continue to polish the rough edges and to identify areas of improvement. As the next step, I'll be looking to synchronize all the data with hledger-web, which should make the data exchange pretty much automatic.

Alen Šiljak

unread,
May 25, 2019, 10:25:01 AM5/25/19
to Ledger
I think it is now at a point where it can be considered Beta stage. I'm using it actively now and intend only to add smaller improvements and less often than in the past two weeks.
Any feedback is welcome.
Reply all
Reply to author
Forward
0 new messages