Show HN: Transity – Plain Text Accounting
feram.io
feram.io
1. The author doesn't understand bookkeeping. 2. The author doesn't somehow believes that emulated teletypes are a good substrate for building user interfaces. 3. The author has spent significant time writing a bookkeeping tool for his business instead of doing something that will move the business forward.
If you're thinking about writing an open source accounting program, spend time mastering GnuCash first. If you feel like you can't do what you need with that and cannot possibly extend it in the way that you need, then write your own.
I don't see how it handles complex transactions very well. A simple example would be VAT. Assume a 25% VAT (which is standard here). If you sell a product for $1000 cash in hand the relevant transaction would be:
C: Revenues $800
C: VAT payable $200
D: Cash $1000
An even better example would be payroll which can involve 5-15 different ledger accounts for a single employee.
The next bit can probably be solved through the notes part, but how would you attach invoices and documentation with Transity?
How do you do accounts payable or receivable with it? In addition to the balance sheet sum, the accounts pay/rec should also show the balance for each individual customer and supplier.
transfers:
- from: robert-q-customer
to: john:cash
amount: 1000 usd
- from: john:payable
to: vat-authority
amount: 200 usdHow is separating what you have (assets/liabilities) from your revenues/expenses confusing? It's basic tools to get a view of the profitability vs the Balance sheet (what the company owns) vs the cash flow.
The idea of looking at it in terms of transaction is interesting, I recommend looking at https://martin.kleppmann.com/2011/03/07/accounting-for-compu... for a good take on this idea.
Edit: typo
GnuCash - I could see mistakes everywhere. I don't see how this is much different than what an accountant would do in 1740 england. Why not have it all automated -- with computers??
https://web.archive.org/web/20080321021644/http://www.infowo...
https://www.cnet.com/news/intuit-products-phone-home-more-of...
Also, your company's accounting information can be sensitive, and hence you may not want to share that information with Intuit (and whoever they choose to share/sell it to).
> Mint on the otherhand, detects the income by scanning all accounts, automatically categorizes it, etc etc.
Does this mean that you literally hand over your online account log in details to Intuit? Or how is this "scanning" done?
> GnuCash - I could see mistakes everywhere. I don't see how this is much different than what an accountant would do in 1740 england. Why not have it all automated -- with computers??
What kind of mistakes were you noticing? (in the Youtube video below, I assume?)
Yes. They use your banks credentials and scan the accounts. It is really awesome. Because you can centralize 20+ accounts into one flow in an automated fashion ++ you don't need a bookkeeper. Ironically, it is actually more secure since I can catch things within minutes.
"Also, your company's accounting information can be sensitive, and hence you may not want to share that information with Intuit (and whoever they choose to share/sell it to)."
Worse! Intuit does all my TAX RETURNS. Their tax system is absolutely worth it. I trust them more than "Jeff" at my local small bookkeeper firm. They handle a large percent of american's taxes. [Yes, yes I understand their lobbying is terrible].
Tax returns are generally a lot less sensitive than bank/credit card statements. Plus they have your plain text credentials too, so if they get hacked someone could transfer money out of your bank account.
Interesting. Is your bank OK with you handing out your web bank login to 3rd party?
I found it strange how LinkedIn could trick people into handing over their email password. But the web bank login..!?
Yes, mint screen scrapes any bank that doesnt have an api. The sheer number of sites it works with is impressive. I have moved away from it, because if the security concerns, but I wish there was a self hosted open source solution that had connectivity into everything you could want.
Also you know that Mint is a proprietary company which keeps and uses your data as it pleases, right? That's a huge difference to any open source tool which allows you to keep your company's data inside your company. If it uses a good file format you can also automate everything if desired.
Second, Mint sadly is not supported in many countries. If you are in the US, fine. But if you are not, e.g. your corp has a shop in Germany, then you simply can't use it at all.
I think the basic idea though is the difference between the "pay someone else to solve your problems" vs "solve problems yourself" approaches/mindsets. Each of them has their clear advantages and disadvantages and I hope we don't have to reiterate them here.
Yes. That is what a happy user sounds like.
Maybe it's just me, but I stopped reading here b/c this language struck me as unnecessarily antagonistic. Just some feedback.
A lot of people probably did start with SourceTree or a git plug-in in Visual Studio etc
My git workflow is very much tied to aliases. Customization is a hot thing for many people
(but really you should probably read the fugitive.vim docs in their entirety)
SourceTree didn't exist when I started using git, but it makes the day to day operations of source control much easier and more precise than the command line. I spent enough years in a command line debugger that I am thrilled to have good debugger integration in my IDE.
It's easy to get into a machismo thing where you regard the shell and a teletype emulator as the "natural" interface to the computer, but it's really an incredibly abstracted interface already, and if you spend some time thinking about what you're actually doing, there's usually a GUI or library for an actual language that is what you really want. It just may not exist.
Unspoken presumptions about how the CLI is harder to use and GUIs somehow more natural (because graphics) is usually a sign of not understanding neither.
I spend most of my time in my editor and at the command line because it's easier to use. I don't have to learn thousands of little clickable widgets just to get the job done (which tend to change with every version of the tool).
That said, there are good and bad user interfaces with CLI tools, just like with GUI tools.
What's more interesting however, is how tools shape the way you think. CLI tools tend to feel like processing data, whereas with GUI tools you feel like maneouvering a large machine. The former tends to lead to fewer mistakes at scale.
I use the IntelliJ IDE family's visual conflict resolution tool so I guess it wouldn't be a big step to start using SourceTree. Realistically the only git commands I use are add, commit, rebase, push and pull.
After using other Atlassian products and being very disappointed, I can't even imagine using a GUI built by them.
personally, I don't know why people claim that mercurial is so much more intuitive, but I also don't think that something that is clearly a personal preference based on previous experience warrants an ideologic war.
git -c interactive.singleKey=true commit --verbose --patchPS: I'm cheering for Pijul from the sidelines. :)
It would be different if they were expressing the same sentiment for something like a 3D graphics editor...
This CLI app could be useful to me for a subset of accounting I do. Yes, it won't be able to track VAT accounts. It won't amortize my expenses. But if I needed that for a critical business I'm running, I'd not use a hobby project.
The CLI is useful. Double Entry bookkeeping is useful but as things scale it gets very confusing even for the best of accountants. This program is simple and can give you a solution if you are looking for very simple bookkeeping.
> CLI tools also have the advantage that their developers don't have to waste their time building and maintaining a useless GUI, but can instead use the time to improve the tool itself.
It's fine if you like CLI apps and find it painful maintaining a GUI application, but it's not helpful to write it as a general statement. CLI "GUI" tools also require quite a bit of work and I'd claim that an experienced GUI developer will spend less time on creating a GUI app, than the author had spent to get their CLI "GUI" app display as wanted.
> It made sense in former times as this layout makes it easier to add up the amounts by hand, but not in times of computers.
Double booking keeping isn't just a relic from the past. There are big benefits to it and just because it doesn't fit into simple account keeping, doesn't mean we can just pretend that it's useless, because computers!
In summary you simply should not write your opinions as if they were facts. You can do so if you want, but then you need to be prepared to get some critical feedback.
Also on the whole topic of running a business, you're honestly better off just hiring an accountant to do the work for you, so you can really spend time on your core business.
[1] https://www.quora.com/What-are-the-merits-of-double-entry-sy...
Because you are explicitly tracking what you receive, what you have and what you spend, the accounting system can check that the numbers line up.
Nice intro here : https://www.accountingcoach.com/debits-and-credits/explanati...
Regardless of his tone, he built a small CLI tool to do basic bookkeeping that can simplify double-entry bookkeeping with transaction actions/tags.
Take it or leave it. But heavily "attacking" him is a useless practice. Maybe if you don't like it just don't upvote it and move on with your life. This toxicity is not doing good for the community here.
Plus it's a "Show HN" thread which the whole idea is, that people give feedback.
Posts like "I had this problem and solved it this way" are generally well regarded, the issue with the post here is, that the author didn't just explain what his problem is, but implied that most GUI apps are bad and that his accounting method is way more superior to what everyone else uses.
If you have this high confidence in yourself and your creations, then you should also be able to take some negative feedback on it.
OP states, in large font, that Transity is "The Future of Plain Text Accounting". If you're going to make a bold statement like that, then people are going to be critical.
It is just "mumbo jumbo" to you because accounting/finance is not your area of expertise.
Most people have some fixed recurring bills (insurance, rent, subscriptions, etc.), some variable recurring bills (utilities, etc.), standing payments like savings, and monthly spends like groceries.
For them (myself included) something that lets you simply input recurring expenses and your income and show a running tally is pretty much all that's needed, add some simple transaction tracking and you're there. Basically all you really want is two things:
1) Given $2000 at payday, how much of that is available to spend if $X is going towards known expenses.
2) The day before payday I have $Y left in my account. Where did I spend the $2000-$X?
If you don't have this, then you won't be able to work out where you spent your $X amount of money.
If I see 15 bucks each month going to "Spotify" I don't have to be a CPA to work out that I spend 15 bucks a month for Spotify...
You have just understood it, intuitively.
It would be like creating a niche programming IDE for people who don't understand the term "computer" or "programming" or "code."
In specialized communities there is a lot of gatekeeping just by their slang. If I can explain something in plain english without using numerous technical terms, I've mastered the first hurdle to make it more accessible.
I suspect there will be a third stage where I will learn their true value. But I also strongly expect that the value lies in them being a common language that other accountancy uses. If so, then they will never be useful in my own personal accounts.
I might use a single-entry ledger for my personal finances (though I prefer the double-entry). I wouldn't run a business on it though.
[UPDATE: I am now pretty sure there is a serious misunderstanding my paragraph above, but think it is more constructive to note it, than to delete it.]
My main objection was to making account types so so fundamental. From the POV of my account book "Assets:InTheBank" behaves just like "Liabilities:CreditCard". True, the later balance is almost always negative, but it is the minus sign and not the word "Liabilities" that matters.
Similarly for transactions, a plus or a minus in front of a delta is less confusing to me than the equivalent accountant-jargon. But here, for some reason, I have more sympathy for accountants and their jargon.
I took an intro accounting class in a community college as well as microeconomics in high school, so I have an inkling where this stuff comes from. I look askance at stuff like "contra assets" too.
But yes: boiled down, those are legacy words indicating positive or negative.
My comment assumed that double-entry accounting meant that every transaction adds up to zero. But cgio links to which claims http://www.ellerman.org/the-math-of-double-entry-bookkeeping... that definition is a common misunderstanding.
What cgio means by double-entry is adding up debits and credits as separate unsigned numbers, as opposed to a single signed one. The fact that the numbers only ever increase can help you verify the books.
Indeed I've experienced the pain of signed numbers first hand when keeping accounts with pen-and-paper. I can't remember how exactly it worked, but it was something to do with how if I had monotonically increasing values, I could have put a strict time bound on where a missing entry had to be.
[1] http://www.ellerman.org/the-math-of-double-entry-bookkeeping...
I'd love a cheat-sheet or plain-English example of how to model the following with GAAP: I'm an individual, I have couple bank accounts, get a salary and occasional invoice, I pay for various stuff, I sometimes use cash. I do not own shares in companies. I want to do budgeting, including some sort of "envelopes" or "virtual accounts" so that I can earmark some money for particular use. I tried to build something like that with Ledger CLI several times now, but I always bounce off the confusion about terminology, and not knowing what goes into "Equity", what into "Liabilities", etc., and why does everything expect me to have "accounts payable" and "receivable"...
Knowing what's the proper, idiomatic representation of such financial system would go a long way towards me understanding what the hell all those terms mean.
https://www.khanacademy.org/economics-finance-domain/core-fi...
This might clarify the account types (assets, liabilities, equity, income, and expense) as structuring the income/balance reports, and accrual basis accounting as the reason to have "accounts payable/receivable."
Consider also thinking of your accounts as nodes in a directed graph. When you credit account 1 and debit account 2, you draw an edge from 1 to 2, representing a transaction. The credit is the "source" and the debit the "target."
(Double entry means you record a transaction as two updates with opposite charge, so credits and debits are listed separately. This is basically an error-correcting heuristic from 15th century Italy, which is still a good practice.)
So when you send an invoice to a client, that's a transaction. You obtain an asset taken from another entity. So you credit a revenue account and debit an asset account called "accounts receivable" (it's not "cash"). When you receive the payment, you credit accounts receivable and debit cash.
Consider that you sell a product worth $1000 on the first of January and you issue an invoice to your customer that is due 30 days later (net 30 days). As of January first the economic transaction has taken place and needs to be recorded to stay consistent with the principles of accrual accounting. As we've provided the customer with a product but haven't received payment yet, we've in reality given the customer a short-term loan of $1000 which has to be recorded. Accounts payable is the overview of all of these "short-term loans" given to our customers. The ledger entry for this transaction would increase revenue and also increase this short term loan as shown below.
January 1:
c: revenue $1000 (income statement)
d: accounts receivable $1000 (balance sheet)
Whenever the customer pays for the product we have to update our balance to reflect that the loan has been paid and that the customer no longer has any outstanding debt to us. To do this we credit (decrease) accounts receivable by $1000 and debit (increase) cash on hand by $1000. Note that the second entry doesn't touch the income statement as the revenue has already been recognized.
January 30:
c: accounts receivable $1000
d: cash $1000
The final balance of our accounts at the end of the 30 day period will be:
revenues: $1000 (credit)
accounts receivable: 0
cash: $1000 (debit)
Accounts payable is the same thing, but in reverse. When purchasing from a supplier on netX terms, we've been given a short-term, interest free, loan which we have to record until we pay it. I hope this helps.
Income:Job
Asset:Bank1
Asset:Bank2
Expenses:whatever
Liabilities:whatever
And then each transaction moves the money from one account to another. Income->Asset, Asset->Expenses, etc. Value moves into the system from income, Expenses are (more or less) transactions where value moves out of the accounting system. You track your salary but probably not the hours you work and that you spent $50 on food (Asset->Expenses:Food) but not the food.Equity is mostly just the offsetting account for balances that aren't tracked more specifically. So beginning balances are booked against equity instead of coming from some source of income.
Liabilities are amounts that you owe. When you buy something on credit, you are receiving the thing, so you book a transaction (booking an expense against the liability). Then later you book another transaction to pay for the thing (booking a decrease in assets against the liability).
Accounts receivable and accounts payable come up because businesses care about how (and when) they recognize payments and non payments and so on. For personal accounting just put money you owe as a liability and money you are owed as an asset.
So, again, thanks a lot for that last line, which helped me out.
2018/06/01 Roommate owes me
Assets:Accounts Receivable 100.00 USD
Income:Roommate
2018/06/06 Roommate paid me
Assets:Checking 100.00 USD
Assets:Accounts Receivable
You can drill down another level to add who owes you the money, or perhaps tag it.The end result is that your checking account is always accurate. Then, as maxerickson says, use virtual accounts to handle mark where the needs to go next or what it's intended for. Also examine ledger's budgeting capabilities for this.
https://www.ledger-cli.org/3.0/doc/ledger3.html#Effective-Da...
I'd echo someone else's recommendation to have one place in your hierarchy that has a balance that matches up with each physical account so you can check your work when you've entered all your transactions. Beyond that, you're basically programming a system for processing the math related to your money. You can figure it out.
I'd been muddling my way through for years due to the same inability to find any good "accounting for regular people" before I met my SO who is a CPA. Her response to my accounting methods were basically "It's wrong, but it will work just fine."
Want to allocate the money in an account to some things? Create some subaccounts, move money into them. What kind of account? Asset! Asset all the things! People sending money that's going into your chequeing account to pay future bills? Create a subaccount (you guessed it - asset) and put the money into that. Your chequeing account's balance matches up, that money is separated.
Perfect is the enemy of good.
Personally I don't like the yaml-like syntax. I use beancount myself, and with fava (https://github.com/beancount/fava) as the UI.
I also don't like the yaml format for the simple reason that not all necessary information is in one line. No idea why a transaction can't be written into one line.
Also for people who love plain text, one can checkout the banking format (comes from German banks, so most info is only available in German but here's a summary): https://en.wikipedia.org/wiki/FinTS
Gnucash should also support it, but with my bank it always fails. It's certainly not a format I would use for local storage, but it's a good source of structure and edge cases when one thinks about developing or modifying an existing format.
That's defining a group called the Pacioli Group. One thing that is relatively easy to do with this group is to quickly verify consistency in the transactions. That is something you lose with a single-entry system.
I'm really interested if someone can show me a use case where this system is less powerful / safe than a classic double entry system.
You've presented a system in which one transaction modifies 2 accounts. If there's an error in the code, you've got no way of knowing it without manually checking the calculations by hand.
How do you handle recording sales taxes? In Canada, for a business, every transaction will require splitting the tax component into a separate account so that it can be fed into the quarterly GST return. This happens both on the sales side, where you record the taxes you collected, and on the purchases side, where you record the taxes you paid to your suppliers.
What about cases where there are multiple "to" accounts? For example, you might go to Best Buy and purchase a computer and a video game. In this case, the "to" would be split between two separate accounts (assuming you do your books this way).
This is a contrived example, but in the business world this type of transaction is very common. An example involving selling a taxable service (think of a haircut) might look like:
Debit Cash
Credit Service Income
Credit Sales Tax Payable (this is remitted to the government)In double bookkeeping, you must have balanced books, but you do not note which bookings occur together. The transactional scheme seems strictly superior because you automatically know which debits and credits or losses and gains go together. You automatically have balanced books. I think you sould be able to even generate double bookkeeping from transactional bookkeeping automatically.
In the traditional accounting model you have two major things:
1. The Ledger, which is the current state of your accounts. Generally each account is a page (or more) in the ledger which lists the debits and credits for that account.
2. The Journal Entries, which are the source documents that feed into the Ledger. Each Journal Entry groups all of the related debits and credits into one balanced entry. Since each Journal Entry is balanced, the Ledger ends up balanced.
Some software packages follow the accounting model very closely in their data model, others make some different choices. Some software, usually professional software, has a Ledger of accounts and uses Journal Entries to record activity in those accounts and requires that you run a process to post the journal entries. Professional software typically has modules for sales, purchasing, etc, that create the Journal Entries for you. Other software "fakes" some or all of the Ledger (typically the Asset/Liability accounts are in the Ledger and the Income/Expense accounts are "fake"), this type of software is usually aimed at home users. In both cases, all entries are done as a balanced journal entry with multiple lines.
Back to the accounting model:
A sale involving VAT, for example, might look like this in Journal Entry form:
2018-06-06 Sold a haircut and shampoo to Bob
Cash DR $21.00
Haircut Sales CR $10.00
Product Sales CR $10.00
VAT Collected CR $1.00
Cost of Goods Sold DR $8.00
Inventory On Hand CR $8.00
The first line is basically the header and it groups all of the entries related to that one sale. In this case, a customer paid cash for a product and a service. Because they bought a product, we also reduced the value of the inventory that we have on hand. And, because I'm in Canada, both of these items are eligible for VAT, so I had to record how much VAT I collected on behalf of the Government - I'll need these records later when it's time to pay up.You can't really support that kind of entry if your data model has only one From field and only one To field - you've be creating five entries that aren't tied together. To support this, your data model needs to let you create one entry with multiple From and To fields. Once you get to this point, you're at the journal entry model that real accounting software uses.
My point was basically, most or all of the interesting information is stored in the journal. You could hide the legder from a non-technical user, or even generate it on-the-fly. I think this is the distinguishing idea in OP's program. That the data model has only one "from" and one "to" field is incidential and could be fixed.
I can keep my ledger in git, I don't need to pay for or even learn to use QuickBooks, I can quickly write a script to import data from basically anywhere, and I can use all the standard tools in my toolbox (grep, diff, python) to visualize and work with the data.
I'm sure mainstream accounting programs add value as the organization grows, but I spent a few minutes playing with Quickbooks and I was ready to just use Excel when I discovered the whole plain text accounting thing. And it's been working well for me.
I have written a handful of Python scripts to convert CSV credit card statements (Chase, credit unions, etc) to ledger. Additionally, pdfquery can be used to extract data from PDF statements.
> Very few are going to be able to deal with a text file of journal entries. QuickBooks is the standard for all small business accounting, like it or not.
I always find this lowest-common-denominator as de facto standard depressing. It's how we end up with word processing documents as a standard for exchange and collaboration (and word processors are horrible environments to create in).
"Informally, a strategy profile is a Nash equilibrium if no player can do better by unilaterally changing his or her strategy. To see what this means, imagine that each player is told the strategies of the others. Suppose then that each player asks themselves: 'Knowing the strategies of the other players, and treating the strategies of the other players as set in stone, can I benefit by changing my strategy?'
If any player could answer "Yes", then that set of strategies is not a Nash equilibrium. But if every player prefers not to switch (or is indifferent between switching and not) then the strategy profile is a Nash equilibrium. Thus, each strategy in a Nash equilibrium is a best response to all other strategies in that equilibrium.
The Nash equilibrium may sometimes appear non-rational in a third-person perspective. This is because a Nash equilibrium is not necessarily Pareto optimal."
Rather the word-processing situation (and likely the QuickBooks situation, though I know much less about accounting software) seems to be something like maximizing the lowering of perceived entry cost (in terms of learning to use the software) over all other factors (with resulting increasing in complexity for more advanced functions and poor flexibility).
I've only recently moved to it in fact, previously used tools like YNAB and so on, but this approach seems to be a bit more flexible, especially around managing investments etc
I think you need to have the mindset for it, I've always reconciled my transactions and like to keep an overview of everything, so people saying it's tedious etc doesn't wash with me, in an odd way I sort of enjoy it
> Sub accounts vs. Tags > But what if the expense is part of another category as well, like expenses for your vacation? Well, you'd be at a loss. There is no good way to model this in ledger-likes without getting really hacky.
But that's not true. Ledger has tags. You specify a tag with:
:tagname:
For instance: 6-5-2018 Gave food to Bart Simpson, while on vacation
Expenses:bart 1 orange ; :vacation:
Assets:foodI'm a long time Buxfer user, which also works like this. It's not that I don't understand double entry bookkeeping, I've used GNUCash for a long time before moving away. It is indeed very powerful and flexible, but it always was too much of a chore to maintain and next to impossible to get other family members to contribute.
I'm not sure this "transaction model" would be appropriate for business accounting, but IMHO it works very well for Personal Finance.
Simple recurring transactions is like the one feature I really need from a tool like this.
I had the ideas used in this project in my head, but I've been putting off the work forever now.
I LOVE YOU FOREVER for using transactions as the central operation rather than double entry accounting, and I love you even more for adding the ability to tag transactions. I can not put off work for a web interface instead, which is a lot less work to put off :)
I haven't tried it yet, but it's now high on my list for when I get home from work.
Basically what he was trying to do here was a expense and income administrator with tags. That it's just a part of what bookkeeping and accounting is.
Nice try. But you can't replace what works and what has been done for reliability and confidence since 1400 at least by the masters of trade.
I am not sure that is true. Isn't the world full of examples of quite the opposite? Especially because it's 1400 years old an because it was created for pen an paper work. We have computers now.
e.g. It used to be that companies have a handful of yearly profit/loss accounts and every year they "close the books" by transferring all balance to first profit/loss accounts then to equity. The financial year then starts with 0 profit an 0 loss. Afaik nobody does this anymore. Today you just keep all accounts running (don't "close them) and you generate repots by selecting a date range and let the computer calculate profits and losses for that range.
Besides, most commercial software already hides debit and credit from you. I would risk that most accountant don't know their debits and credits, it's just one of those things you learn at accounting school before you start working in the industry.
I agree one should not write an accounting system without understanding the full details and history of the domain, but I disagree that 1400 year history proves anything. In fact even after reading through the Pacioli Group article I still don't see the advantages. It's only advantage is that it makes it harder to make a mistake on paper.
I've worked in accounting and this is just not true. The ledger is stated in debit/credit and all transactions are done in debit/credit. Even if modern accounting software can automate some of it it still requires the accountant to verify the transaction. Hell, most accountants I know even draw up good ol' T-accounts on paper every once in a while to understand the larger and more complex transactions. I'd think you'd be hard pressed to find an accountant that doesn't know their debit and credit. An accountant that doesn't know their debits and credits is like a software developer that only knows Scratch.
Most commercial software doesn't hide debit/credit, and if it does, you should run away as fast as you can. How do you produce the required documentation for your auditor if the software hides debit and credit?
EDIT: To continue a bit.
>It used to be that companies have a handful of yearly profit/loss accounts and every year they "close the books" by transferring all balance to first profit/loss accounts then to equity. The financial year then starts with 0 profit an 0 loss. Afaik nobody does this anymore. Today you just keep all accounts running (don't "close them) and you generate repots by selecting a date range and let the computer calculate profits and losses for that range.
All companies still do this. It's part of the closing entries at the end of the FY. It's not just that the FY starts with 0 profit and 0 loss, but that that is the entire point of the financial statements. A company has three financial statements: the balance sheet, the income statement, and the cash flow statement. For this example, only the income statement and the balance sheet are relevant.
The balance sheet can be seen as a snapshot of a company. It shows what the company owns (assets) divided into short- and long-term assets, as well as how they paid for it (liabilities and equity). The concepts that it balances assets + liabilities + equity = 0 (debit is positive and credit is negative) is the foundation for the balance. The income statement shows a company's results over a given time frame, usually a year. You can consider the balance sheet permanent and the income statement temporary. Consider a company with the following results per 31.12:
assets: $10.000 (d)
liabilities: $7 500 (c)
equity: $500 (c)
net revenue: $5.000 (c)
costs: $3.000 (d)
profit/loss: $2.000 (c)
It's clear that the entire ledger balances per 31.12 as the sum of debit is equal to the sum of credit accounts. We also see that the company owns $10.000 worth of assets which is mainly paid for through debt, and that they have a profit of $2.000 since the profit is credit. As the income statement is supposed to reflect the performance over a given period and the balance is supposed to balance, the solution is to transfer the profit to equity to record the profit in the (permanent) balance sheet and reset the (temporary) income statement so that they can record their next fiscal year. To do this they record debit profit/loss $2.000 and credit equity $2.000.It's also not just a matter of recording the entry, which is fairly easy on modern accounting systems, but as it involves the distribution of profit (and touching equity for that matter) it typically needs the signature of the board.
I was an external auditor and when we did the closing entries for our clients we would require the CEO's or chairman's signature on a printed version of the final entries.
> I agree one should not write an accounting system without understanding the full details and history of the domain, but I disagree that 1400 year history proves anything.
Accounting isn't just a field that has had 1400 years to develop methods to solve the problem in the domain. It's a field that has had 1400 years to build regulations and exceptions. It's also a field which requires a lot of individual judgement. Take, for example, VAT. Here in Norway, the actual VAT law text is about 10% of the text in the handy VAT exceptions and judgement calls book we had in the office.
Writing accounting software that is actually useful for an extended period of time is incredibly difficult due to how accounting laws change all the time. Double the effort if you want the software to make tax returns as well. The company that developed the software we used had personal relations with almost all of their customers and would ask for feedback all the time. They probably shipped three versions during the busy season I was there.
I'm admittedly a fan of double-entry bookkeeping as it's conceptually easy (once learned) to map out complex transactions on a piece of paper.
99% of accounting is bog-standard, but that last 1% is complex as all hell. It can't really be ignored either as it can end up costing you or your client a significant amount of money, or even jail time.
I can't really state specifics, but I had a client whose bookkeeper failed to stay up to date on a very specific subset of a rather specific law which ended up costing the client millions in extra taxes. To put it in perspective, they suddenly had back-taxes for more than their company made in a year in revenues. This change was so specific that there wouldn't have been any consequences if they had done it a few weeks earlier. I'm rambling a bit here, but the point is, if you want to write a new type of accounting software, be really sure you know what you're doing.
E.g. ( from ledger cli documentation )
2004/09/29 Circuit City
Assets:Reimbursements:Company XYZ $100.00
Liabilities:MasterCard $-100.00
Company XYZ:Expenses:Computer:Software $100.00
Company XYZ:Accounts Payable:Your Name $-100.00
What I genuinely don't understand is how is this not equivalent to: 2004/09/29 Circuit City DEBITS CREDITS
Assets:Reimbursements:Company XYZ $100.00
Liabilities:MasterCard $100.00
Company XYZ:Expenses:Computer:Software $100.00
Company XYZ:Accounts Payable:Your Name $100.00
My understanding is that as long as you don't use negative numbers the two forms have the same expressiveness.Please note that I am only challenging the method of encoding, not the rest of accounting. How you set up and manage a chart of accounts and how you take real world transactions and code them into your system IS very important and I very much acknowledge 1400 years of evolution on that front.
This topic genuinely interests me and I have questions. If you don't mind please drop me an email (it's in my profile) I have a few questions.
p.s. Accounting standards vary. I work with startups in the US (little to no standards).
>p.s. Accounting standards vary. I work with startups in the US (little to no standards).
That's true. Here in Norway, all financial statements are publicly available regardless of company size, so they have to adhere to NGAAP (or IFRS if they're big enough).
I don't know where you got this idea from. I got an impression the author knows a few things about accounting.
Now a days I use a smartphone app called walnut, which mines your SMSes for transaction data and builds up a ledger by itself, without the need for interfacing with banks directly, because in my country atleast all banks provide SMS trails for transactions.
Cleaning up the payees is the trickier part.
I guess in cases like Amazon, where you might buy a plethora of things across different accounts, ML might be helpful
https://play.google.com/store/apps/details?id=org.gnucash.an...
Now I want to see someone take, say, Tiffany & Co's latest 10-Q⁽¹⁾ and run it through this.
__________
If you are interested, drop me an email, I would love to discuss more about fintech (I run a fintech startup)
The accounts are the things you want to review after you record a transaction, to ensure balances are correct (validate your checking account with what the bank says it should be) and to understand your financial situation (current net worth and cash flow).
Math predates computers, let's just stop using that too!
Double entry is not that complicated and computers or not, it just works.
hledger makes some strong assumptions (IIRC) about your accounts being in assets, liabilities, income, equity, expenses. But I may be thinking of beancount for that. If I'm remembering correctly, hledger will let you do whatever you want, but some of their built in reports (like balance sheet) assume liabilities and assets as top-level accounts.
However, ledger allows you to do things like:
personal:expenses:...
personal:assets:...
club:expenses:...
wife:expenses:...
And you can specify what the prefix should be for all transactions in a region like: apply account personal
2018/06/05 Gym
Expenses:Gym 54.00 USD
Assets:Checking
end apply account
So everything in there is now in my personal set of accounts, eliding the prefix (which can become cumbersome). If you use this† as an example, putting things into separate code blocks via org-mode makes it trivial to conduct accounting for multiple entities.Query: Does Transity allow for money to come from or go to multiple places? Suppose I'm traveling for work and need a more detailed accounting of my spending (they don't reimburse alcohol, perhaps):
2018/06/05 Place with good cocktails ; 50 USD is on me
Work:Expenses:Travel:Food 20.00 USD
Work:Expenses:Travel:Drinks 50.00 USD
Liabilities:Work:CC
(with a note that I have to cover that 50 USD when paying off the card next month). I do this sort of thing just on regular shopping. I may spend a bunch of money at the store that's gifts for my girlfriend along with clothes for me. I like to know how much I've spent so I'll split it (this is more a personal curiosity thing, along with trying to stick to a budget).I don't want to have to enter a from/to pair that's redundant (repeating the same from) for things I split like this.
Additionally, there's no need for this "perspective" aspect. If I move money to an account, its balance goes up. If I move money from it it goes down. If I am managing my girlfriend's accounts in ledger (or she is, but it's pushed into a common household file):
2018/06/05 GF ; lunch last week
Jared:Assets:Cash 10.00 USD
GF:Assets:Cash
In the report hers looks like it went down, mine like it went up. There's no need for me (if I'm managing multiple entities) to bother treating that 10 USD like it came from my income account. It is income, but it came from the GF's cash account. The income account is really only needed when you don't control or track the accounts money comes from. Your job, a gift from an uncle, lottery winnings, etc.Same thing with a business. If I own my own LLC and "pay" myself a salary out of it (I'm assuming I also pay out my health insurance or something in this, I don't know, I don't do payroll), let's say:
2018/06/05 Paycheck
Jared:Assets:Checking 2000.00 USD
Jared:Expenses:HealthInsurance 100.00 USD
JSLCC:Expenses:PayrollStuffs 200.00 USD
JSLLC:Assets:Checking
In all the reports, everything looks right. It's done, no need to worry about perspectives.† https://orgmode.org/worg/org-tutorials/weaving-a-budget.html